Cuando se pega mucho (pero mucho, mucho) con debian
, lleva un momento en que empieza a hacer o modificar paquetes y es entonces cuando el uso de un repositorio personal es una buena idea. Hace unos años, crear y sobre todo mantener un repositorio de paquetes de debian
era doloroso por los scripts que había que ejecutar, puesto que funcionaban una de cada dos veces y estaban llenos de parches. Afortunidamente han surgido unos cuantos programas que facilitan mucho la tarea de instalación y sobre todo de mantenimiento de los repositorios y, dentro de todos ellos, mi favorito es reprepro
.
No es excesivamente pesado, se maneja completamente desde la línea de comandos y el cifrado de los ficheros que contienen las sumas MD5 (los ficheros Release
) es transparente. También, la configuración de cada repositorio es sencilla y mediante ficheros de texto y toda la información de los paquetes se almacen en una base de datos Berkeley, por lo que no es necesarios ningún SGBD.
Tener los repositorios disponibles para un sólo equipo no es muy inteligente así que se suelen instalar bajo servidores web o ftp. Los repositorios de mi red están en ranas
, mi servidor raspberry NAS, así que por motivos de rendimiento y recursos preferí instalar un servidor pure-ftpd
antes que un apache2
. Como ambos pillan fuera del ámbito de esta guía, os dejo los enlaces de configuración de ambos:
Instalación
Instalamos conjuntamente reprepro
y pure-ftpd
.
sudo aptitude install reprepro pure-ftpd
pure-ftpd
Configuramos pure-ftp
según se explica en los enlaces superiores y configuramos unas cuantas cosas más.
- crear usuario ftp con directorio
/media/nas/ftp/
.
sudo adduser --system --disabled-password --disabled-login --home /media/nas/ftp ftp
Añadiendo el usuario del sistema `ftp' (UID 113) ...
Añadiendo un nuevo usuario `ftp' (UID 113) con grupo `nogroup' ...
Creando el directorio personal `/media/nas/ftp' ...
- asignar permisos a mi usuario en el directorio de los repositorios.
$ chown -R diego:diego /media/nas/ftp/
reprepro
Toda la configuración y gestión del repositorio con reprepro
se realiza como un usuario sin privilegios, salvo el de escribir en el directorio de los repositorios.
Dada la versatilidad de reprepro
puedo crear tantos repositorios como quiera. Si, por ejemplo, quiero tener los repositorios de cada proyecto organizados, puedo crear dentro de /media/nas/ftp
un directorio, proy01
, que contenga los repos proy01
, partners
y apps
. Para el segundo proyecto crearía proy02
con los repos proy02
y extras
y así… Cada proyecto con sus paquetes y, probablemente, un repo general con debian
, con jessie
, wheezy
y sid
dentro.
- debemos crear una llave gpg de 2048 bits con que firmar los paquetes.
$ gpg --gen-key
$ gpg --list-keys
- exportamos la parte pública de la llave a un fichero
asc
.
$ gpg --armor --export 12345678 > /media/nas/ftp/ranas.asc
- creamos el fichero de configuración del repo nimhix.
$ mkdir /media/nas/ftp/nimhix/conf
$ cat /media/nas/ftp/nimhix/conf/distributions
Origin: n1mh.org
Label: paquetes de n1mh.org
Codename: boyd
Architectures: i386 amd64
Components: main contrib non-free
Description: paquetes generador para uso particular
DebIndices: Packages Release . .gz .bz2
SignWith: 12345678
Las líneas más jugosas son Architectures
, donde indicamos que arquitecturas están soportadas, Components
, donde se enumeran las ramas del repo y SignWith
, donde especificamos la clave pública que se usará para firmar los paquetes. Codename
es el nombre en clave del repositorio y si, en este caso viene de la serie Justified.
- creamos el repositorio y los enlaces. Si estamos en el directorio principal del repositorio (donde se ve el directorio
conf
), no es necesario pasar el argumento-b
.
$ reprepro -VVV --ask-passphrase -b ~ftp/nimhix export
$ reprepro -VVV --ask-passphrase -b ~ftp/nimhix createsymlinks
Gestionando paquetes
Todos los ejemplos se ejecutan desde el directorio principal (al mismo nivel que conf
). De no ser así, el argumento -b
es tu amigo. 🙂
Listar paquetes del repositorio
reprepro list boyd
Añadir nuevos paquetes (o versiones actualizadas)
reprepro --ask-passphrase includedeb boyd ~/escritorio/paquetes/*deb
Borrar paquetes
reprepro --ask-passphrase remove boyd firefox-esr
Y con esto ya tenemos cuantos repositorios necesitemos. Actualmente es ranas
quien sirve los paquetes en mi red local, así que el gasto de recursos está bastante contenido (con pure-ftpd
). Si, además, configuras samba
para «tirar» los paquetes en el directorio del ftp, lo tienes todo más a mano.