Configuración y uso de Pbuilder

Debian-develArco

Pbuilder es un sistema de construcción automática de paquetes Debian. El principal objetivo de este sistema es poder generar paquetes Debian (o Ubuntu) sin “ensuciar” nuestro sistema con las dependencias de los paquetes que estemos generando.

Instalación

Lo primero de todo, como es natural, es instalar el paquete pbuilder. Para ello, como ya sabes, usa apt-get/aptitude/synaptics/tu-sistema-de-paquetes-favorito para hacerlo. Por ejemplo, con aptitude:

# aptitude install pbuilder

Configuración

El sistema pbuilder utiliza dos ficheros de configuración; el primero está en /etc/pbuilderrc, que será el utilizado por todos los usuarios si no definen el segundo fichero de configuración.

Este segundo (y en mi opinión más importante fichero) se debe ubicar en el directorio del usuario que vaya a usar pbuilder. En tu caso, será $HOME/.pbuilderrc

Ambos ficheros tienen la misma forma de construirse, que simplemente se trata de un script en Bash. En este script debemos especificar una serie de variables, las cuales serán usadas por pbuilder para averiguar para que versión de Debian/Ubuntu quieres compilar tus paquetes. Esto te permite hacer virguerías como tener diferentes repositorios para cada distribución/versión y cosas así.

De todos modos, estos ficheros son opcionales ya que podemos decirle a pbuilder, mediante opciones, lo que queremos generar.

Un ejemplo mínimo de fichero de configuración sería el siguiente:

PBUILDER_DIR=$HOME/pbuilder
DIST=sid
BASETGZ="$PBUILDER_DIR/$DIST-base.tgz"
DISTRIBUTION="$DIST"
BUILDRESULT="$PBUILDER_DIR/$DIST/result/"
BUILDPLACE="$PBUILDER_DIR/build/"
APTCACHE="$PBUILDER_DIR/$DIST/aptcache/"
BINDMOUNTS="$PBUILDER_DIR/$DIST/result"
OTHERMIRROR="deb file:$HOME/pbuilder/$DIST/result ./"
MIRRORSITE=http://ftp.uk.debian.org/debian/

Con esto se le indica a pbuilder que su directorio de trabajo será $HOME/pbuilder (buena idea para ejecutar pbuilder como sudo), que distribución será la que se generará (sid), los nombres de los directorios y ficheros que usará y el repositorio de donde descargará los paquetes del chroot.

Naturalmente, los directorios que se especifican en el fichero de configuración deben existir para la correcta preparación del entorno y compilación de los paquetes.

Generar las imágenes de pbuilder

El primer paso del proceso de uso de pbuilder es crear las imágenes para chroot de la distribución para la que queramos generar. Para hacerlo, simplemente escribe en tu terminal

$ sudo pbuilder create

El proceso tarda un poco (sobre todo dependiendo de la velocidad de la red). Como resultado obtendrás, en el directorio que hayas configurado (para el ejemplo $HOME/pbuilder) un par de directorios (build y el nombre de la distro que estés generando).

De vez en cuando sería MUY conveniente que actualices esta imagen generada. Nada tan fácil:

$ sudo pbuilder update

Una vez terminado sin errores, estás listo para generar tus paquetes.

Edición 1/10/2010: recientes cambios en la forma de funcionar de sudo hacen que algunas variables de entorno (en concreto $HOME) se mantengan para el usuario destino del sudo. Es decir, que al ejecutar con sudo las ordenes explicadas en este apartado, al intentar leer el fichero de configuración $HOME/.pbuilderrc intentará leer /root/.pbuilderrc. Si esto os ocurre y queréis evitarlo deberéis añadir al fichero /etc/sudoers (configuración de sudo) la siguiente línea:

Defaults        env_keep += HOME

Para más información sobre este cambio en sudo leer /usr/share/doc/sudo/UPGRADE.gz

Creación de nuestro primer paquete

Una vez terminado el proceso de creación de la imagen seguro que no puedes esperar para generar tu primer paquete Eye-wink. Empezaremos por algo sencillito como descargar el código fuente desde los repositorios APT de Debian (que ya incluye los ficheros necesarios para generar el paquete) y compilarlo usando pbuilder.

Elige un paquete (el que más rabia te dé) y descarga su código fuente en el directorio que te apetezca (por ejemplo, en /tmp):

$ cd /tmp
$ apt-get source gentoo
$ cd gentoo-0.15.3
$ pdebuild

Y a esperar toca… Pasado un tiempo (más o menos dependiendo del paquete que estés compilando) pbuilder terminará el proceso y encontrarás todos los ficheros necesarios en el directorio que tengas configurado como BUILDRESULT en el fichero de configuración.

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.
Imagen de david.villa

Packages.gz

Si en mitad del pbuilder create acaba con un error parecido a esto:

[…]
Err file: ./ Packages                
  File not found
Get:1 http://ftp.fi.debian.org sid Release.gpg [835B]
Get:2 http://ftp.fi.debian.org sid Release [104kB]
Get:3 http://ftp.fi.debian.org sid/main Packages [6271kB]
Fetched 6375kB in 8s (714kB/s)                                                                       
W: Failed to fetch file:/home/tucan/pbuilder/sid/result/./Packages.gz  File not found

Ve al directorio result y ejecuta:

$ dpkg-scanpackages . /dev/null | gzip -c9 > Packages.gz

Después vuelve a ejecutar:

$ sudo pbuilder create

PS: Ah, también hay que instalar el paquete cdebootstrap.

Y gracias a Paco por la ayuda.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.