Creación de un repositorio Debian …

28 01 2008

La siguiente es una guía rápida de cómo crear un repositorio de paquetes al estilo Debian. Lo configuraremos de forma tal también de que podamos hacer subidas y actualizaciones automáticas de paquetes. El repositorio puede contener paquetes de distribuciones múltiples ( estable, inestable, pruebas ), contener paquetes de arquitecturas múltiples ( x86, sparc, all, etc … ) y ser administrado de forma fácil.

Nos auxiliaremos para ello de los paquetes reprepro y dupload.

# apt-get install dupload reprepro

Por lo general los repositorios de paquetes se sirven a través de interfaces web aunque podemos usar otras. Primeramente crearemos un subdirectorio al que llamaremos conf que contendrá el fichero de configuración y un directorio entrada donde montaremos la lógica para subir archivos. En el ejemplo usaremos a /opt/debian_repo como raíz del repositorio.

# mkdir -p /opt/debian_repo
# mkdir -p /opt/debian_repo/conf
# mkdir -p /opt/debian_repo/entrada

A continuación crearemos el fichero conf/distributions que contendrá las características principales del repositorio:

Origin: Nombre
Label: Etiqueta
Suite: ....
Codename: ....
Version: ....
Architectures: i386 all source .....
Components: main non-free contrib ....
Description: una descripción

Un ejemplo podría ser:

Origin: teratux
Label: Repositorio estable
Suite: stable
Codename: etch
Version: 4.0
Architectures: i386 all source
Components: main non-free contrib
Description: Una descripción

Origin: teratux
Label: Repositorio inestable
Suite: unstable
Codename: sid
Architectures: i386 all source
Components: main non-free contrib
Description: Otra descripción

Importar

Para importar elementos a nuestro nuevo repositorio usaremos el comando reprepro. Para usarlo debemos ubicarnos en la raíz de nuestro repositorio. Aquí enseñaremos solamente cómo hacer operaciones básicas con paquetes .deb:

# reprepro -Vb . includedeb etch paquete_0.1.deb

Eliminar
Para eliminar elementos hacemos la misma operación solo que un parámetro diferente al reprepro:

# reprepro -Vb . removedeb sid paquete_0.2.deb

Al importar un paquete de una versión mayor que el actual este se elimina automáticamente.

Para usar ahora el repositorio simplemente añadimos al /etc/apt/sources.list:

deb http://localhost/debian etch main contrib non-free

Aquí tomamos como método de acceso al repositorio la vía web.

Subiendo archivos
Cómo habíamos visto anteriormente usaremos este programa para copiar los elementos que querramos publicar en el repositorio. Editaremos pues el archivo de configuración /etc/dupload.conf:

$cfg{'repo'} = {
fqdn => "repoPc.cu",
login => "teratux",
method => "scpb",
incoming => "/entrada/",
# The dinstall on ftp-master sends emails itself
dinstall_runs => 1,
};

Hemos especificado el nombre del destino ( repo ), el nombre de la pc ( repoPc ), el nombre de usuario que podrá acceder a ese directorio ( teratux ), el método de transferencia ( scpb ó scp ) y el directorio donde se almacenarán ( entrada ).

Para subir algún elemento usaremos:

# dupload --to repo "elemento"

Script para actualizar el repositorio
Una vez que hayamos subido un elemento para esa ubicación nos resta configurar al sistema para que cada cierto tiempo mueva esos elementos para su respectiva ubicación en el repositorio Debian que creamos. Quedaría así:

#!/bin/sh

INCOMING=/opt/debian_repo/entrada

#
# Make sure we're in the apt/ directory
#
cd $INCOMING
cd ..

#
#  See if we found any new packages
#
found=0
for i in $INCOMING/*.changes; do
if [ -e $i ]; then
found=`expr $found + 1`
fi
done

#
#  If we found none then exit
#
if [ "$found" -lt 1 ]; then
exit
fi

#
#  Now import each new package that we *did* find
#
for i in $INCOMING/*.changes; do

# Import package to 'sarge' distribution.
reprepro -Vb . include etch $i

# Delete the referenced files
sed '1,/Files:/d' $i | sed '/BEGIN PGP SIGNATURE/,$d'
| while read MD SIZE SECTION PRIORITY NAME; do

if [ -z "$NAME" ]; then
continue
fi

#
#  Delete the referenced file
#
if [ -f "$INCOMING/$NAME" ]; then
rm "$INCOMING/$NAME"  || exit 1
fi
done

# Finally delete the .changes file itself.
rm  $i
done

Con una línea en el cron del sistema para ejecutar este script bastaría para mantenernos actualizados:

*/5 * *  *  * /opt/nuevos_paquetes.sh

Referencias:

debian-administration.org

Advertisements

Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s




%d bloggers like this: