Repositorio Debian

De Astillas.net

Esta página contiene anotaciones sobre la creación y el mantenimiento de un almacén de paquetes Debian utilizando para ello el programa debpool.

Existe otro programa documentado con el mantener un repositorio: mini-dinstall.

Enlaces y referencias

Flujo de trabajo

  1. Los paquetes se reciben en un directorio determinado.
  2. El programa debpool revisa ese directorio
    • Periódicamente si funciona como demonio
    • Puntualmente si se invoca directamente
  3. y procesa los paquetes
    1. carga los archivos .changes que encuentra en el directorio
    2. instala los archivos necesarios en el árbol de directorios pool
    3. actualiza los archivos índice Packages[.gz] y Sources[.gz] con la nueva adquisición.

Instalación y configuración

Una vez instalado el paquete debpool realizamos unos cuantos ajustes para poder emplearlo cómodamente.

Usuario especial

Creamos un usuario para que manipule el repositorio de paquetes y para que ejecute los programas sin privilegios excesivos:

# adduser --system --group --shell /bin/bash --gecos 'Debian Pool Manager' debpool

Directorio raíz del repositorio

El directorio raíz predeterminado es /var/cache/debpool y como vamos a respetarlo tendremos que ajustar su propiedad y sus permisos ya que mientras que el usuario debpool debe poder trabajar con él, también es necesario que exista acceso de escritura al directorio de entrada de paquetes (incoming) y de lectura y paso para el servidor web.

Como empleamos el directorio que definido en el paquete debpool tendremos que avisar al sistema de paquetería de Debian que la propiedad de todos estos archivos va a ser ahora distinta:

# dpkg-statoverride --update --add debpool debpool 0755 /var/cache/debpool

Configuración

El archivo /etc/debpool/debpoolrc está escrito en lenguaje Perl y contiene la configuración del programa debpool dividida en varias secciones, de las cuales voy a anotar aquí las que considero de uso más inmediato.

Directorios y permisos

# Raíz de todos los demás archivos 
$Options{'archive_dir'} = '/var/cache/debpool';

# ...

# Permisos de creación de directorios y archivos 
# (en este caso de la base de datos de paquetes)
$Options{'db_dir_mode'} = 0750;
$Options{'db_file_mode'} = 0640;

# ...

# Directorio de recepción de paquetes y permisos de acceso especiales
$Options{'incoming_dir'} = "$Options{'archive_dir'}/incoming";
$Options{'incoming_dir_mode'} = 01775;

El resto de los directorios se basan en la variable $Options{'archive_dir'} y no conviene tocarlos a menos que sepa muy bien qué se está haciendo.

Ramas y arquitecturas incluídas en el repositorio

Las siguientes variables definen los nombres de las ramas o versiones Debian que el repositorio acepta así como las secciones y las arquitecturas.

# Ramas incluídas y sus alias 
$Options{'dists'} = {
    'unstable'  =>      'sid',
    'stable'    =>      'squeeze',
    'oldstable' =>      'lenny',
};

# Secciones 
$Options{'sections'} = [ 'main', 'contrib', 'non-free' ];

# Arquitecturas posibles 
$Options{'archs'} = [ 'i386', 'sparc', 'powerpc', 'amd64' ];

Registro de eventos y otros matices

# Archivo donde registrar la actividad del repositorio 
$Options{'log_file'} = "/var/log/debpool.log";

# Activar modo demonio (s/n)
$Options{'daemon'} = 0;

# Segundos entre revisiones del directorio ''incoming''
$Options{'sleep'} = 300;

# Si está activo se permite que versiones antiguas de paquetes
# reemplacen a versiones más nuevas
$Options{'rollback'} = 1;

# Si está activo se emplea el mecanismo 'inotify' para
# controlar cambios en el repositorio
$Options{'use_inotify'} = 1;

En el caso de situar el registro de eventos en el directorio genérico conviene crearlo con los permisos adecuados:

$ LOGFILE=/var/log/debpool.log
$ sudo touch $LOGFILE
$ sudo chown debpool.adm $LOGFILE
$ sudo chmod 0640 $LOGFILE

y añadir una entrada para que sea rotado con el resto.

Uso del repositorio

Enviando paquetes

Para añadir paquetes al repositorio Debian existen varias utilidades disponibles, como dupload y dput, pero el proceso básicamente consiste en copiar en el directorio incoming del mismo los archivos que componen dicho paquete.

Suele emplearse un archivo con extensión .changes que lista todos los demás y el resultado de la operación de envío se registra en otro fichero con el mismo nombre y la extensión .upload.

Instalando paquetes

La primera parte es proporcionar un acceso vía web a los paquetes y para ello podemos añadir una estrofa a la configuración del servidor web:

Alias /debian /var/cache/debpool/

Después, una vez que tengamos acceso por esta vía a los paquetes, debemos incluir la fuente en el sistema de paquetes Debian. Para esto es mejor crear un archivo específico con las indicaciones para nuestro repositorio e instalarlo en la zona que apt reserva para ello:

# cat > /etc/apt/sources.list.d/personal.list
deb http://example.com/debian sid main contrib
deb-src http://example.com/debian sid main contrib
^D
# apt-get update 

Así bastaría con renombrar la extensión del archivo para desactivar el repositorio de paquetes.