Crear un paquete Debian binario sencillito
En esta receta se muestran los pasos básicos para crear un paquete binario Debian de forma que puedas empaquetar tu programa de forma fácil y sencilla.
Asunciones
En este ejemplo voy a suponer que partes de una estructura de directorios como la siguiente:
/home/pepito/proyecto
- Makefile
- ejemplo.c
- debian/
- control
- [...]
El objetivo es empaquetar el binario “ejemplo” generado por el Makefile. El Makefile debe tener un objetivo “install” para que debhelper construya el paquete correctamente. Dicha regla debería tener una acción como esta (consulta cómo hacer un Makefile para un paquete Debian para más información):
[...]
install:
mkdir -p $(DESTDIR)/usr/bin/
-cp ejemplo $(DESTDIR)/usr/bin/
[...]
Si no tienes el directorio “debian” es necesario que lo crees. Además, también voy a suponer que el paquete fuente se llama “ejemplo” y el paquete binario “ejemplo-package”; y que para construir “ejemplo.c” es necesaria la librería “libslab-dev”. Además, el paquete binario dependerá del programa “sl”.
Archivo debian/control
Para empaquetar este programa, el archivo “debian/control” debería quedar más o menos así:
Source: ejemplo
Section: misc
Priority: extra
Maintainer: Pepito de Mengano <pep@mengano.com>
Build-Depends: debhelper (>= 7), libslab-dev
Standards-Version: 3.8.3
Homepage: http://ejemplos.org
Package: ejemplo-package
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, sl
Description: Un paquete de ejemplo
Esto es un ejemplo de paquete Debian. Puede ayudar a otros a entender
el proceso de empaquetación y, así, que cada uno cree sus paquetes
cuando quiera.
.
Ya no hay nada más que decir, pero este párrafo es una excusa para
mostrar cómo poner distintos párrafos en la descripción larga del
paquete.
En el campo Maintainer deben ir los datos del mantenedor del paquete y deben coincidir con los datos del cierre de una entrada en el fichero “debian/changelog”.
El campo Architecture del paquete binario indica en para qué plataforma el paquete es compatible. Con el valor “any” se asegura que, al menos, funciona para la plataforma de construcción y que para el resto debe compilarse.
Si te fijas en las dependencias del paquete binario verás que hay dependencias especiales encerradas con llaves. Estas dependencias serán resueltas por debhelper al finalizar el proceso de creación del paquete y, en función de lo que él decida, incluirá las referencias a los paquetes o no. Por ejemplo, “shlibs:Depends” son las librerías compartidas que necesita “ejemplo-package” tener instaladas. La fase “dh_shlibdeps” se encarga de detectarlas y de añadirlas, automáticamente, al control.
Archivo debian/changelog
En este archivo se registran los cambios que se hacen sobre el paquete Debian fuente. En otras palabras, es un changelog para los archivos del directorio debian.
ejemplo (1.0-1) unstable; urgency=low
* Initial version.
-- Cleto Martin Angelina <cleto.martin@example.com> Thu, 05 Aug 3010 25:50:25 +1200
La versión del programa es 1.0 y la del paquete Debian la 1, de ahí 1.0-1. Si se cambian sólo cosas del paquete Debian, se incrementa la versión del paquete (ej. 1.0-2, 1.0-34). Si cambia la versión del programa, pues se cambia convenientemente y se reinicia la del paquete (ej. 2.1-1).
Archivo debian/rules
Con debhelper 7 y dado que lo que se pretende empaquetar es símplemente un binario, este archivo archivo queda de la siguiente forma:
%:
dh $@
Archivo debian/copyright
Asegúrate de que existe y que contiene los datos requeridos.
Construcción
Una vez tengamos todo en orden basta con realizar lo siguiente:
~/proyecto $ dpkg-buildpackage -us -uc -rfakeroot
La orden anterior construye el paquete binario y nos deja el resultado en “..”, o sea, en /home/pepito. También puedes construirlo con pbuilder.
Referencias
- Control files and their fields: donde se explican cada uno de los campos del archivo control y cuales son obligatorios.
$ man dh
$ man dpkg-buildpackage