Repositorios propios para sistemas Debian con Reprepro y GPG

Imagen de pepo

Esta es una guía rápida para crear tus propios repositorios cuando tu distribución se basa en sistemas Debian.

He sabido que en EcuaLUG hay guías usando AptonCD, sin embargo yo tengo hecho un script que agrega los paquetes nuevos a mi repositorio cuando quiero, puedo transportar mi repositorio completo, y este repositorio lo firmo con GPG osea que puede estar primero en las jerarquías del /etc/apt/sources.list; y, usando instalaciones de Debian-like (como Ubuntu) con PXE (documentos que he publicado también en EcuaLUG) no lo pongo en CD/DVD porque no lo he necesitado; sin embargo tu puedes escoger el que más te guste.

Las rutas aquí mostradas puedes variarlas a tu gusto, yo las he puesto porque me parecen las mejores.

[color=#FF0000][size=30]Reprepro.[/size][/color]

Es una herramienta para producir, manejar y sincronizar repositorios locales de paquetes Debian (.deb). Pero lo mejor es que lo hace sumamente rápido y fácil, incluso tu puedes actualizar tu repositorio con los paquetes de otro repositorio, que puede ser uno oficial del proyecto Debian/Ubuntu/que te guste.

[color=#FF0000][size=30]Preparar el repositorio.[/size][/color]

Creamos el fichero directorio base para nuestro repositorio, y el fichero directorio con nuestra configuración:

[code]
mkdir -p /opt/apt/conf
[/code]

Editamos el fichero de configuración:

[code]
vi /opt/apt/conf/distributions
[/code]

Y lo configuramos así:

[code]
Origin: Pepo
Label: Paquetes de pepo
Suite: testing
Codename: testing
#Codename: lenny
Version: 5.0
Architectures: i386 amd64
Components: main non-free contrib
Description: Repositorio de Pepo
Update: debian
SignWith: pepo@linuxmail.org
[/code]

Esta es una guía rápida y en realidad todas las líneas son entendibles, sin embargo comentaré algunas:

[color=#5A23FF]Suite: testing[/color] Indica el tipo de tu distribución
[color=#5A23FF]Architectures: i386 amd64[/color] Puedes tener varias arquitecturas por repositorio, yo mantengo un repositorio para mi AMD64 y además un i386 para arquitecturas de 32bits, para mi laptop.
[color=#5A23FF]Update: debian[/color] (Opcional) Indica el servidor del cuál se actualizará, ya veremos esto después.
[color=#5A23FF]SignWith: pepo@linuxmail.org[/color] Esta es la llave que va a usar cuando cifre el fichero de paquetes, con esto tienes tu repositorio controlado y además si lo pones en la primera línea de tu [b]/etc/apt/sources.list[/b] tendrá preferencia sobre otros del mismo fichero.

Ojo que puedes tener varios repositorios allí mismo, solo debes ir agregando las configuraciones en el fichero [b]/etc/apt/sources.list[/b]

[color=#5A23FF](Opcional)[/color]
Para tener los repositorios remotos desde donde se puede actualizar el nuestro creamos el siguiente fichero:

[code]
vi /opt/apt/conf/updates
[/code]

Con esta configuración:

[code]
Name: debian
Method: http://archive.progeny.com/debian
#VerifyRelease: 010908312D230C5F
[/code]

Vemos que ya tiene sentido la línea [color=#5A23FF]Update: debian[/color]

[color=#FF0000][size=30]Descargar los paquetes necesarios.[/size][/color]

Este podría haber sido el paso uno ;) sin embargo no habría problema y lo he puesto así para tener un mejor entendimiento:

[code]
sudo apt-get install eprepro pinentry-qt
[/code]

[color=#5A23FF]reprepro[/color] Este es el paquete que hace todo, no leiste el título :)
[color=#5A23FF]pinentry-qt[/color] Este es un paquete muy importante porque nos ayuda a firmar nuestro fichero de paquetes, si no tuvieramos este tendríamos que estar ingresando nuestra clave por cada paquete que ingresamos a nuestro repositorio, hay versiones para KDE (Qt) y para GNome (GTK2), incluso una en NCurses para consola, pero no sabría se hay algo equivalente para un método de consola puro (sin ncurses) sin embargo lo más común es hacerlo desde nuestro escritorio aunque el repositorio sea remoto montado por NFS, SHFS o similar.

Tenemo listo todo ahora a ingresar paquetes en nuestro repositorio:

[code]
cd /opt/apt
reprepro -b . includedeb testing
[/code]

Recordemos que hemos llamado [b]testing[/b] a uno de nuestro repositorio por lo que [b]reprepro[/b] se encargará de identificar la arquitectura y ponerlo en los [color=#5A23FF]Components[/color] que creamos, sí... [i]es algo como magia[/i] :)

Yo tengo hecho este script: [b]vi /opt/apt/insertor.sh[/b]

[code]
#!/bin/sh
RUTA=$1

for archivoDeb in `find ${RUTA} -name '*.deb'`
do
echo "Enviando $archivoDeb"
reprepro -b . includedeb testing $archivoDeb
done
[/code]

Es súper útil, y lo más común es mandarlo contra:

[code]
cd /opt/apt
./insertor.sh /var/cache/apt/archives/
[/code]

Así ingresará los paquetes que hemos descargado y/o instalado y los mantenemos en nuestro cache, además como tenemos [b]pinentry[/b] nos aparecerá un cuadro de diálogo pidiendo nuestra contraseña para la llave GPG por lo que [i]no tendremos que volver a escribirla nuevamente[/i].

[color=#5A23FF]OJO[/color] asegúrate que no tienes paquetes parciales en [b]/var/cache/apt/archives/partial/[/b] porque los agregaría y entonces tendrías ese paquete como oficial y te daría problemas cuando tratas de actualizar tu sistema desde el repositorio.

[color=#FF0000][size=30]Apt-zip.[/size][/color]

Apt-zip es una gran herramienta, con esta simplemente te creas una lista con todos los paquetes que deberías descargar para instalar algo o incluso actualizar tu sistema, si no tienes un ancho de banda aceptable llevas el fichero y lo bajas donde te guste, el fichero está hecho para usarlo con [b]wget[/b] por lo que debes depurarlo un poco con [b]awk[/b] para usarlo con otra herramienta, yo usaba [b]Free Download Manager[/b] porque tenía que ir a equipos Win2 en mi Universidad; además la línea en el fichero [b]fetch-script-wget-<tu host>[b] que dice

[code]
wget -t3 -nv -O $2 $1
[/code]

la cambio por

[code]
wget -t3 -c -O $2 $1
[/code]

y así puedo parar y luego continuar la descarga del fichero en cualquier momento.

Cuando tengo todos los paquetes descargados en alguna carpeta por ejemplo [b]/home/pepo/down/[/b] hago nuevamente:

[code]
cd /opt/apt
./insertor.sh /home/pepo/down/
[/code]

Y listo tengo mi repositorio actualizado.

[color=#FF0000][size=30]En nuestro servidor web Apache.[/size][/color]

Creamos el fichero para que esté disponible en nuestro servidor Apache:

[code]
sudo vi /etc/apache2/sites-enabled/apt.conf
[/code]

Y escribimos:

[code]
Alias /apt "/opt/apt"

Options Indexes
AllowOverride None
order allow,deny
allow from all

[/code]

Claro que podemos definir más seguridad pero no creo necesario

[color=#FF0000][size=30]Añadiendo el repositorio.[/size][/color]

Estas son las modificaciones en el [b]/etc/apt/sources.list[/b].

Si quiero ingresar por el servidor web puedo tener:

[code]
deb http:///apt/ testing contrib main non-free
[/code]

Si quiero el repositorio local:

[code]
deb file:///opt/apt/ testing contrib main non-free
[/code]

Sin duda el primero es más útil porque así puedo simplemente acceder remotamente desde otro equipo en mi LAN o incluso en Internet.

Saludos,
Pepo