Repositorio APT con soporte para subida de paquetes

¿No les ha pasado que quisieran montar su propio repositorio APT donde monten los paquetes con dput o dupload como si lo hiciesen directamente a Debian o Ubuntu pero con la ventaja de que se actualice en 5 minutos? Bueno, realmente es fácil hacerlo y les explicaré como en este artículo. También podrán tener, opcionalmente, otra ubicación o ruta donde coloquen un histórico de todos los paquetes que han subido aparte del pool como éste.

¿Qué necesitas?

Usaremos reprepro para manejar el repositorio y para la administración unos scripts en bash, además necesitarás el paquete devscripts pues necesitaremos del script dcmd.

Instalar y Configurar

Facilisto: # aptitude install reprepro devscripts

Para configurar: en el directorio seleccionado para hospedar el repositorio crea la carpeta conf donde crearás el archivo llamado distributions, en éste último archivo colocaremos información sobre el repositorio en el siguiente formato: Origin: Jose Luis Rivas Label: Jose Luis Rivas for Debian Suite: unstable Codename: sid Architectures: i386 all source Components: main non-free contrib Description: Jose Luis Rivas's repo for Debian-related work

Origin: Jose Luis Rivas Label: Jose Luis Rivas for Debian Suite: testing Codename: squeeze Architectures: i386 all source Components: main non-free contrib Description: Jose Luis Rivas's repo for Debian-related work

Esa es la configuración de mi repositorio, tengo lugar para testing y para unstable. Así mismo para subir tengo dos directorios diferentes, uno para unstable y otro para testing.

Los archivos para sincronizar los directorios de subida con el repositorio son diferentes para cada distribución configurada; el script es el siguiente: #!/bin/sh

DCRET=/home/ghostbar/incoming DCROT=/srv/dl.rivco.net/debian/

for i in $( find $DCRET | grep ".changes" ); do reprepro -Vb $DCROT include unstable $i for j in $( dcmd $i ); do rm $j done done

Lo obvio, en DCRET va el directorio donde subiran los archivos y DCROT es donde está ubicado el repositorio APT. Si quieres además llevar el histórico como comenté más arriba el script entonces se vería más como:

#!/bin/sh

DCRET=/home/ghostbar/incoming-unstable DCROT=/srv/dl.rivco.net/debian/ HISTORICREPO=/srv/repo.rivco.net/debian

for i in $( find $DCRET | grep ".changes" ); do reprepro -Vb $DCROT include sid $i mkdir -p $HISTORICREPO/$( grep "Source: " $i | sed 's/Source: //' )/$( grep "Version: " $i | sed 1's/Version: //' | grep --max-count=1 - ) for j in $( dcmd $i ); do mv $j $HISTORICREPO/$( grep "Source: " $i | sed 's/Source: //' )/$( grep "Version: " $i | sed 1's/Version: //' | grep --max-count=1 - )/ done done

Para que sea automático y que revise cada 5 minutos el incoming simplemente se coloca en cron una línea como esta:

/5 * * * * /usr/local/bin/incoming-unstable.sh/5 * * * * /usr/local/bin/incoming-testing.sh

Soporte para subidas

Yo uso dput y mi configuración es la siguiente en ~/.dput.cf: [rivco] fqdn = rivco.net login = ghostbar incoming = /home/ghostbar/incoming-unstable method = scp run_dinstall = 0

[rivco-testing] fqdn = rivco.net login = ghostbar incoming = /home/ghostbar/incoming-testing method = scp run_dinstall = 0

El método que uso es scp y lo único que necesito tener configurado en mi servidor es sshd; creo que el resto de los parámetros son autoexplicativos.

Ajá ¿y ahora?

dput rivco package_file.changes

Y esperar unos 5 minutos para que los scripts hagan su trabajo y ¡disfrutar!

Any comment goes best to my twitter here.