Montar un repositorio estándar de paquetes Debian

Debian

Ya vimos como montar un repositorio trivial de paquetes Debian. Ahora vamos a hacer un repositorio general de paquetes, algo más avanzado y general que lo anterior pero se basa en la misma filosofía.

Estructura de directorios
Primeramente, debemos crear la estructura de nuestro nuevo repositorio, que vamos a llamar mirepo como ejemplo. El lugar donde lo debemos crear la estructura puede ser cualquiera, por ejemplo en /var/:

mirepo
|
+-dists
  |
  |-stable
  | |-main
  | | |-binary-i386
  | | |-binary-powerpc
  | | |-binary-amd64
  | | +-source
  | |-contrib
  | | |-binary-i386
  | | |-binary-powerpc
  | | |-binary-amd64
  | | +-source
  | +-non-free
  |   |-binary-i386
  |   |-binary-powerpc
  |   |-binary-amd64
  |   +-source
  |
  |-testing
  | |-main
  | | |-binary-i386
  | | |-binary-powerpc
  | | |-binary-amd64
  | | +-source
  | |-contrib
  | | |-binary-i386
  | | |-binary-powerpc
  | | |-binary-amd64
  | | +-source
  | +-non-free
  |   |-binary-i386
  |   |-binary-powerpc
  |   |-binary-amd64
  |   +-source
  |
  +-unstable
    |-main
    | |-binary-i386
    | |-binary-powerpc
    | |-binary-amd64
    | +-source
    |-contrib
    | |-binary-i386
    | |-binary-powerpc
    | |-binary-amd64
    | +-source
    +-non-free
      |-binary-i386
      |-binary-powerpc
      |-binary-amd64
      +-source

Como se puede ver, vamos a usar las tres distribuciones de Debian (stable, testing y unstable), cada una con sus ramas (main, contrib y non-free), para tres arquitecturas (i386, powerpc y amd64) y con sus respectivos paquetes de fuentes (directorios sources).

Aquí puede sobrar o faltar según tus propias necesidades. Quizás sólo quieras una distribución o incluir también la arquitectura arm; solo tendrías que quitar o añadir las partes que te interesen. Eso sí, siguiendo la estructura específicada.

Llenando el repositorio
Los paquetes binarios los debemos almacenar en los directorios binary’s correspondientes y los sources en la rama que pertenezca. Si tú numero de paquetes es considerable, ni que decir tiene que es aconsejable automatizar esta tarea con algún script que lo haga de forma periódica.

Una vez tengamos todos los archivos en su sitio, si queremos que nuestros usuarios del repositorio puedan utilizar el pinning de APT debemos incluir en cada directorio binary y source un archivo llamado Release con la siguiente forma:

Archive: "nombre de la distribución (stable, testing o unstable)"
Component: "nombre de la rama (main, contrib, non-free)"
Origin: "Persona/compañía/proyecto que da origen al repositorio"
Label: "Etiqueta descriptiva"
Architecture: "La arquitectura a la que perteneces (i386, powerpc, amd64 o source)"

Las comillas serán necesarias dependiendo de si el dato es una cadena sin espacios o no. Es un archivo bastante sencillo y que se debe personalizar para cada directorio binary donde vaya a ser guardado.

Con los repositorios llenos de paquetes y los Release en su sitio sólo nos queda crear los ficheros índices. Utilicemos la herramienta apt para este fin. Antes de nada, tenemos que crear unos ficheros de configuración para que apt haga lo necesario para nuestro repositorio. Vamos a crear, concretamente, 2 tipos de archivos que pueden almacenarse en el raíz del repositorio (/var/mirepo/)

apt-“distribucion”-release.conf


En nuestro caso, deberíamos crear tres: apt-stable-release.conf, apt-testing-release.conf, apt-unstable-release.conf. Vamos a mostrar la estructura de uno de ellos y la del resto es idéntica, salvo cambios propios de cada distribución. Para la distribución stable, tendríamos en apt-stable-release.conf:
APT::FTPArchive::Release::Origin “Tu nombre/empresa/proyecto”;
APT::FTPArchive::Release::Label “Etiqueta descriptiva”;
APT::FTPArchive::Release::Suite “stable”;
APT::FTPArchive::Release::Architectures “i386 powerpc amd64 source”;
APT::FTPArchive::Release::Components “main contrib non-free”;
APT::FTPArchive::Release::Description “Descripcion detallada”;

Debemos rellenar los campos oportunos con los valores específicos para cada uno de los archivos.

apt-ftparchive.conf


Este otro archivo de configuración define las reglas que apt usará y aplicará a la hora de crear los ficheros índices. Para nuestro ejemplo sería un archivo bastante largo y no proporciona información añadida hacerlo para todas las ramas, por lo que se muestra sólo la distribución unstable:

Dir { ArchiveDir “.”; CacheDir “.”;
};

#Como se van a comprimir
Default { Packages::Compress “gzip bzip2”; Sources::Compress “gzip bzip2”; Contents::Compress “gzip bzip2”;
};

#Rutas a paquetes binarios
BinDirectory “dists/unstable/main/binary-i386” { Packages “dists/unstable/main/binary-i386/Packages”; Contents “dists/unstable/Contents-i386”; SrcPackages “dists/unstable/main/source/Sources”;
};

BinDirectory “dists/unstable/main/binary-powerpc” { Packages “dists/unstable/main/binary-powerpc/Packages”; Contents “dists/unstable/Contents-powerpc”; SrcPackages “dists/unstable/main/source/Sources”;
};

BinDirectory “dists/unstable/main/binary-amd64” { Packages “dists/unstable/main/binary-amd64/Packages”; Contents “dists/unstable/Contents-amd64”; SrcPackages “dists/unstable/main/source/Sources”;
};

#<——Aquí debemos especificar el resto de rutas a paquetes binarios

#Especifica de qué consta la distribución
Tree “dists/unstable” { Sections “main doc”; Architectures “i386 powerpc amd64”;
};

#<—- Las demás distribuciones

Default { Packages { Extensions “.deb”; };

Con esto almacenado y configurado podemos hacernos un breve script (update-archives.sh) que automatizará la actualización del repositorio:

#!/bin/sh
apt-ftparchive generate apt-ftparchive.conf
apt-ftparchive -c apt-unstable-release.conf release dists/unstable/ >dists/unstable/Release
apt-ftparchive -c apt-stable-release.conf release dists/stable/ >dists/stable/Release
apt-ftparchive -c apt-testing-release.conf release dists/testing/ >dists/testing/Release

Este script debemos ejecutarlo cada vez que añadamos un paquete binario o fuente a nuestro repositorio. Se puede hacer a mano o utilizando cron.

Utilizando el repositorio
Una vez que hemos hecho todo lo anterior podemos añadir la siguiente línea a nuestro /etc/apt/sources.list para utilizar el repositorio de forma local:

deb file:///var/mirepo unstable main contrib non-free

La línea anterior utilizaría la distribución unstable, con las tres ramas.

Si quieres tenerlo accesible de forma remota, puedes crear un enlace simbólico en /var/www/ para redireccionar la consulta http a tu servidor Apache:

# cd /var/www

  1. ln -s /var/mirepo mirepo

Y añadir como repositorio la línea:

deb http://midominio.com/mirepo testing main contrib
Referencias

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Script para automatizar la actualización

¿Podrías explicar un poco más la funcionalidad del script para automatizar la actualización del repositorio?

Gracias y enhorabuena