Crear un paquete Debian binario sencillito

Debian-develArco

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

$ man dh
$ man dpkg-buildpackage

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.

Problema con changelog

Hola. Me surgió un problema cuando y no se que es. Cuando presiono:

$ dpkg-buildpackage -us -uc -rfakeroot

Me aparece el siguiente error:
tail: no se puede abrir «debian/changelog» para lectura: No existe el fichero o el directorio
dpkg-buildpackage: fallo: final de «debian/changelog» devolvió un estado de salida de error 1

Esta excelente tu post. Muchas gracias!!

Imagen de cleto

Ciertamente, debian/changelog

Ciertamente, debian/changelog se me ha olvidado ponerlo y es obligatorio. Y también es cierto que necesita una estructura concreta. Actualizo la receta. Gracias.

Imagen de darkgnu

Llámame loco

Llámame loco, pero así a bote pronto yo diría que el problema es: no se puede abrir «debian/changelog» para lectura: No existe el fichero o el directorio.

----------------------------------------------------------
$ mv *.net /dev/null

Imagen de int-0

...en otras palabras...

lo que darkgnu quiere decir es que quizás deberías crear ese fichero... Sticking out tongue

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Ok, no soy tan noob

Si, eso ya lo había pensado (no soy tan noob xD). Igual saca un error ya que el debian/changelog tiene un formato definido. Estuve consultando y este es necesario siempre que queramos crear un paquete Debian. Ademas es de vital importancia a la hora de crear un paquete.changes (se crea automaticamente). Para mas info:

http://www.debian.org/doc/maint-guide/ch-dreq.es.html#s-changelog