martes, 2 de junio de 2009

Crear paquetes *.deb a partir de código fuente para Ubuntu

0. Introducción

Una situación bastante común que se encuentran muchos usuarios es necesitar un programa que no esta empaquetado para su distribución favorita. Por suerte para todos, teniendo disponible el código fuente cualquiera puede compilar por si mismo los programas, aunque esto genera varios inconvenientes. Es fácil hacer un "make install" pero no todos los programas soportan "make uninstall", de modo que eliminar el paquete cuando deje de ser necesario o directamente estorbe puede ser bastante complicado.

La solución mas cómoda y eficaz en estos casos es crear paquetes deb a partir del código fuente, y utilizar la administración de paquetes para instalarlos/actualizarlos/eliminarlos cuando sea necesario. Esto suena bonito pero casi siempre parece mas complicado de lo que es, sobretodo cuando se es novato. Ahí es donde entra en juego esta pagina. Voy a explicar de forma más o menos simple, el proceso para crear paquetes de forma sencilla. Este proceso no se puede seguir al pie de la letra, tiene que ser adaptado para cada paquete en particular, pero sirve como plantilla general para la mayoría de programas, especialmente aquellos que se podrían compilar siguiendo el clásico proceso "./configure && make && make install".
Programas necesarios

1. Herramientas

Para crear nuestros paquetes, vamos a utilizar unos cuantos "ayudantes" que nos hagan el trabajo sucio, así que necesitaremos los siguientes paquetes:

* dh-make
* devscripts
* fakeroot
* build-essential

2. Debianizando

Lo primero que necesitamos es un directorio de trabajo. En este directorio acabaremos teniendo varias cosas así que es recomendable que sea un directorio vacío. Si vamos a preparar varios paquetes yo recomendaría usar un directorio para cada uno.

Una vez dentro del directorio de trabajo, descomprimimos las fuentes del programa a empaquetar, así nos quedara (casi siempre) un subdirectorio con el nombre del programa. Tenemos que comprobar que el nombre sea del tipo "nombre-versión", por ejemplo "agenda-0.0.1". Si el nombre no corresponde lo modificaremos para que no de problemas y entraremos en ese subdirectorio.

Ahora pasamos a lo importante, vamos a "debianizar" el árbol de fuentes ejecutando "dh_make -e email@proveedor". Nos preguntara que tipo de paquete queremos crear, generalmente sera "s" para programas o "l" para librerías (hay mas opciones pero esto es una guia básica, consulta los manuales para mas detalles). Se pueden añadir las opciones "-s" o "-l" detrás del email para responder directamente a esta pregunta.

Con esto, a menos que falle algo, tenemos hecha la debianización básica a falta de algunos detalles y personalizaciones y ya seria posible empaquetar el programa.

Es importante tener en cuenta que en el directorio "exterior" a las fuentes (el que esta justo por encima) se van a crear varias cosas durante el proceso que se usaran en la creación del paquete, ¡no las eliminéis!

3. Configurando

Ahora toca configurar el paquete. La configuración se hace editando varios archivos que se crearon al debianizar las fuentes. Todos esos archivos están dentro del directorio "debian".

Empezaremos por modificar la información del paquete, que se encuentra en el archivo "debian/control". Como podéis ver tiene varias partes con un formato predefinido (¡cuidado de no alterarlo!). Concretamente modificaremos las lineas "Section:" para definir la sección a la que pertenece el paquete (por ejemplo "main/x11" o "universe/web"), "Package:" si necesitamos cambiarle el nombre al paquete por algún motivo y por ultimo "Description:". La parte "Description:" tiene un formato un poco distinto, en la misma linea se puede poner una descripción corta (60 caracteres si no recuerdo mal) y debe empezar con minúsculas después de los dos puntos, la segunda parte va a continuación en una nueva linea. Esta linea y las siguientes que forman parte de la descripción deben empezar con un espacio en blanco y si queremos dejar una linea en blanco debemos poner un solo punto después del espacio obligatorio.

El siguiente archivo que modificaremos es uno de los mas importantes, porque define la forma en que se compilara y empaquetara nuestro programa. Es el archivo "debian/rules" y tiene formato de makefile. No entraremos en muchos detalles (consultar el manual para más información), pero si en lo mas practico. En la línea que comienza CFLAGS="$(CFLAGS)" ./configure .... podemos añadir todas las opciones que normalmente añadiríamos al ./configure de un programa, opciones de compilación, optimizaciones, etcetera.

Para terminar con la configuración básica nos falta modificar el archivo "debian/changelog". Podemos hacerlo a mano pero es mejor hacerlo con un programa ayudante llamado "dch" (incluido en devscripts). Es recomendable hacerlo así porque con solo ejecutarlo estando en el directorio de fuentes (no un subdirectorio) nos abrirá el changelog para modificar y nos creara una linea nueva, pero mas aun, si lo ejecutamos con el parámetro "-i" nos incrementa el numero de versión del paquete, crea una entrada nueva en el changelog y nos permite editarla. Una de las utilidades de este archivo es controlar que cambios hay de una versión a otra, pero también la propia versión del paquete. Por ejemplo, al debianizar amule-2.0.3 en el changelog nos pondrá la versión "2.0.3-1" indicando que es la primera versión del paquete, al hacer "dhc -i" pasaría a ser la "2.0.3-2". Más aun, si queremos identificar el paquete aun mejor podemos introducir algo entre el guión y el numero, por ejemplo el nombre de la distribución a la que se dirige ("2.0.3-breezy1"). Justo detrás de la versión nos encontramos con la distribución, donde podemos poner a que distribución pertenece, por ejemplo "stable", "unstable", "unreleased", ... y para finalizar la prioridad. Esta prioridad indica la importancia de las diferencias entre este paquete y la versión anterior. Así por ejemplo si el nuevo paquete solo añade alguna funcionalidad poco importante puede ser "low" (baja) mientras que si arregla algún fallo importante puede ser "high" (alta).

4. Compilando y empaquetando

Estamos terminando chicos, solo nos falta empaquetar. Para ello nos colocamos en el directorio de fuentes y ejecutamos "dpkg-buildpackage -rfakeroot" y nos sentamos a esperar con los dedos cruzados para que no falle nada. Si todo va bien debería quedarnos fuera del directorio de fuentes un lindo paquete deb listo para usar.

También nos habrán quedado varios archivos auxiliares pero la utilidad de esos archivos es otra historia algooooo

5. Agradecer a Gatoloko el curre con éste COMO, ya que él es el autor de esta ayuda que yo me he limitado a recopilar para que esté accesible para toda la comunidad de Ubuntu-es.org


Fuente: http://www.ubuntu-es.org/node/11143

JID: versvs@jabberes.org
http://www.versvs.net

No hay comentarios: