Notas sobre empaquetado en Debian
Construyendo paquetes
Lo que pretendemos aquí es construir paquetes Debian en un directorio distinto del padre de donde tenemos las fuentes. Es decir, los resultados la construcción de un paquete Debian son los siguientes archivos:
- ../paquete_version.tar.gz: fuentes originales
- ../paquete_version.diff.gz: cambios realizados en el fuente original para convertirlo en un paquete Debian.
- ../paquete_version.dsc: archivo de control del paquete fuente
- ../paquete_version.changes: descripción de los cambios en el paquete
- ../paquete_version.deb: paquete Debian en sí, aunque pueden ser varios.
El resto de los comentarios están orientados a la construcción de paquetes, aunque las herramientas mencionadas puedan hacer otras cosas (como extraer el contenido de un archivo).
dpkg-buildpackage
Este programa facilita la construcción de un paquete efectuando las siguientes tareas:
- dpkg-source
- debian/rules clean
- debian/rules build
- debian/rules binary
- dpkg-genchanges
- gpg
dpkg-source
Construye los siguientes archivos
- .dsc
- .tar.gz
- .diff.gz
en el directorio actual.
debian/rules clean
Aunque esto puede variar total y absolutamente, el valor predeterminado de dh-make para un paquete normal es el siguiente:
- dh_testdir
- dh_testroot
- borrar la marca de construcción build-stamp
- llamar al limpiador del paquete, que puede ser algo como
- make distclean
- perl Build distclean
- dh_clean
debian/rules build
Esta fase es la que se construye el programa ó librería, generalmente compilándolo, aunque en muchos casos no es necesaria.
Normalmente se hace lo siguiente tras haber superado la fase de configuración:
- dh_testdir
- compilar el programa:
- make
- perl Build
- touch build-stamp (señala la fase completada)
debian/rules install
Esta fase es la encargada de instalar los componentes del paquete como si se tratase de su localización final en el sistema. Generalmente se les engaña para que
- se instalen en otro sitio que no sea el raíz (variable de entorno $DESTDIR)
- usen privilegios de administración falsos (mediante algo como fakeroot)
y suelen hacer esto:
- dh_testdir
- dh_testroot
- dh_clean -k (para que no borre los archivos en debian/files)
- dh_installdirs (opcional)
- instalar el programa mediante (generalmente)
- $(MAKE) install DESTDIR=$(CURDIR)/debian/paquete
- $(PERL) Build install destdir=$(TMP)
- touch install-stamp (señala la fase completada)
debian/rules binary
Este paso consiste generalmente en dos: 1. construir paquetes independientes de la arquitectura (binary-indep) 1. construir paquetes dependientes de la arquitectura (binary-arch)
en nuestro caso nos centramos en la fase final de empaquetado sea cual sea su dependencia de la arquitectura, sobre todo pensando que la mayor parte de mis paquetes están escritos en Perl y tienen muy pocas ó ninguna dependencias de compilaciones.
Los pasos principales suelen ser los siguientes, aunque pueden existir muchos otros, y me voy a limitar a marcar aquellos que producen los archivos que buscamos para saber cómo trasladarlos a un directorio final concreto:
- dh_testdir
- dh_testroot
- dh_installchangelogs
- dh_installdocs
- dh_installexamples
- dh_installmenu
- dh_installdebconf
- dh_installlogrotate
- dh_installemacsen
- dh_installpam
- dh_installmime
- dh_python
- dh_installinit
- dh_installcron
- dh_installinfo
- dh_installman
- dh_link
- dh_strip
- dh_compress
- dh_fixperms
- dh_perl
- dh_makeshlibs
- dh_installdeb
- dh_shlibdeps
- dh_gencontrol
- dh_md5sums
- dh_buildeb
dpkg-gencontrol
dpkg-shlibdeps
dpkg-distaddfile
dpkg-genchanges
dpkg-parsechangelog
dpkg-architecture
dh_builddeb
Para que el paquete sea construído en un directorio distinto al padre del que estamos trabajando se debe usar:
dh_buildeb --destdir=directorio
en el archivo debian/rules.