Repositorio APT con soporte para subida de paquetes

Posted by on July 7, 2010 at 10:24 pm.

¿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!

  • http://apostols.net Juan Angulo Moreno

    Hola José Luis,

    Yo uso dupload con la opción: “method = scpb” y cuando subo los paquetes a mi repositorio solo me pide una vez la clave de la cuenta ssh (también se puede manejar por llaves ssh).

    Un abrazo,

    P.D: revisando tu repositorio casualmente tiene el mismo nombre del mio: dl.dominio.tld/debian/ xD

  • http://apostols.net Juan Angulo Moreno

    Hola José Luis,

    Yo uso dupload con la opción: “method = scpb” y cuando subo los paquetes a mi repositorio solo me pide una vez la clave de la cuenta ssh (también se puede manejar por llaves ssh).

    Un abrazo,

    P.D: revisando tu repositorio casualmente tiene el mismo nombre del mio: dl.dominio.tld/debian/ xD

  • https://me.yahoo.com/ghostbar38#8e4b9 ghostbar

    ¡Hola Juan!

    Pues a mi me pide la contraseña sólo una vez también con dput :-)

    Y lo del dominio pues, no es culpa nuestra seguir los estándares :-D Jaja

  • https://me.yahoo.com/ghostbar38#8e4b9 ghostbar

    ¡Hola Juan!

    Pues a mi me pide la contraseña sólo una vez también con dput :-)

    Y lo del dominio pues, no es culpa nuestra seguir los estándares :-D Jaja

  • http://hcoder.org Esteban Manchado Velázquez

    Hola, José Luis:
    Hace un tiempo escribí un conjunto de herramientas para gestionar repositorios. La necesidad que cubre es más o menos similar, pero tiene una interfaz web que te permite aprobar los paquetes (o no) antes de que entren al repositorio, y tiene un sistema de “autobuilders” que compila los nuevos paquetes para las combinaciones de arquitecturas y distribuciones que configures.
    Si le quieres echar un vistazo, está en CPAN en http://search.cpan.org/perldoc?Arepa. Tengo varias mejoras y arreglos que no he publicado, así que seguramente sacaré una nueva versión pronto.

  • http://hcoder.org Esteban Manchado Velázquez

    Hola, José Luis:
    Hace un tiempo escribí un conjunto de herramientas para gestionar repositorios. La necesidad que cubre es más o menos similar, pero tiene una interfaz web que te permite aprobar los paquetes (o no) antes de que entren al repositorio, y tiene un sistema de “autobuilders” que compila los nuevos paquetes para las combinaciones de arquitecturas y distribuciones que configures.
    Si le quieres echar un vistazo, está en CPAN en http://search.cpan.org/perldoc?Arepa. Tengo varias mejoras y arreglos que no he publicado, así que seguramente sacaré una nueva versión pronto.

  • http://blog.carlosguerrero.com/ Carlos Guerrero

    Excelente ghostbar, probablemente lo implementemos en los repositorios de Canaima GNU/Linux, y lo que dice el compañero Esteban parece excelente, voy a revisarlo tambien.

    Gracias por el buen post.

  • http://blog.carlosguerrero.com/ Carlos Guerrero

    Excelente ghostbar, probablemente lo implementemos en los repositorios de Canaima GNU/Linux, y lo que dice el compañero Esteban parece excelente, voy a revisarlo tambien.

    Gracias por el buen post.