Crear paquetes deb …

4 12 2007

El proceso de instalación de una aplicación se pudiera caracterizar como la ubicación en el sistema de sus archivos, la resolución de sus dependencias y la configuración de la ejecución del producto final. En casi todos los sistemas operativos existen aplicaciones que manejan este proceso para nosotros. En muchos casos nos muestran una interfaz de operación desde la cual configuramos todos los aspectos necesarios para instalar un paquete.

En esta sección veremos uno de ellos muy usado en la distribución Debian GNU/Linux: apt.

APT ó Advanced Packaging Tool es una herramienta que se usa para gestionar la preconfiguración, instalación y postconfiguración de un producto determinado. No cubriremos por ahora la filosofía ni uso de la suite de herramientas de este manejador. Por ahora lo que haremos es mostrar cómo crear paquetes para ese grupo de herramientas.

Se conocen como paquetes los archivos .deb que no son más que ficheros compactados que siguen una estructura determinada que es interpretada por las herramientas de la suite de APT. Comenzaremos con un ejemplo para ilustrar su contenido.

prueba-0.1_i386.deb:

control.tar.gz
data.tar.gz

El archivo compactado a su vez contiene dos archivos compactados un control.tar.gz el cual contiene todas las opciones de configuración para el paquete así como sus detalles y el data.tar.gz contiene los archivos y directorios que serán copiados en el sistema.

Básicamente el sistema instalador lo que hace es seguir las instrucciones del paquete control.tar.gz dentro del cual podemos encontrar opcionalmente varios ficheros. El archivo esencial en todos los paquetes .deb es el control que contiene información del paquete así como sus interdependencias. Veremos uno de ejemplo:

control:

Package: hola_mundo
Version: 0.1
Maintainer: usuario <usuario@hola.mundo&gt
Description: Paquete simple para mostrar cómo hacer un paquete de Debian

Las opciones que mostramos anteriormente son las necesarias con las que se puede crear un paquete sencillo. A continuación mostraremos las opciones que podemos usar así como su explicación:

Package - Nombre del paquete
Version - Serie de la versión del paquete ( es un campo alfanumérico )
Architecture - Arquitectura bajo la cual se instalará el paquete.  Existe la opción "all" para el caso en que sea multi-arquitectura.  Puede especificarse otras como i386, amd64, m68k, sparc, alpha, powerpc
Section - Sección en el repositorio bajo la cual se ubicará el paquete
Priority - Nivel de prioridad del paquete con respecto a su función en el sistema.  Generalmente se pueden usar required, standard, optional, extra
Essential - Especifica si el paquete es esencial para el sistema.  Normalmente se especifica cuando la opción es yes.  Un paquete esencial no será eliminado por el sistema a menos que el usuario esté seguro de ello.
Depends - Relaciona los paquetes de los que depende el paquete para su funcionamiento.  Esta dependencia es post-instalación
Pre-Depends - Relaciona los paquetes de los que pre-depende ( dependencias antes de instalar )
Recommends - Relaciona los paquetes que se recomiendan con la instalación del paquete
Suggests - Relaciona los paquetes que pueden extender la funcionalidad del paquete actual
Replaces - Relaciona los paquetes que reemplaza el paquete actual
Conflicts - Paquetes con los que entra en conflicto el paquete
Provides - Se usa para proveer paquetes virtuales con los cuales otros paquetes pueden trabajar
Installed-Size - Este parámetro es para información solamente.  Muestra el tamaño aproximado del paquete una vez instalado
Maintainer - Mantenedor del paquete así como algunos de sus datos personales
Source - Especifica si tiene algún paquete en el repositorio de fuentes asociado
Description - Descripción sobre el paquete y lo que instala

Las opciones que relacionan nombres de paquetes se pueden especificar usando operadores entre ellos. Un “|” funcionaría como un OR lógico y una “,” como un AND. También podemos especificar el número de versión específico que queremos de un paquete usando 5 operadores: &gt&gt “mayor que”, &gt= “mayor o igual”, << “menor que”, <= “menor o igual” e = “igual”.

Podemos tomar de ejemplo el paquete grep muy usado incluso por servicios del sistema:

Package: grep
Essential: yes
Priority: required
Section: base
Maintainer: Wichert Akkerman <wakkerma@debian.org>
Architecture: sparc
Version: 2.4-1
Pre-Depends: libc6 (<= 2.0.105)
Provides: rgrep
Conflicts: rgrep
Description: GNU grep, egrep and fgrep....

Una vez creado este archivo pasamos a especificar el contenido del paquete y los directorios pertinentes. Primeramente especificaremos una carpeta DEBIAN/ en la carpeta actual de trabajo y copiaremos en su interior el control que definimos. Dentro de esa carpeta irá todo lo que finalmente quedará en el control.tar.gz del paquete. Y en la carpeta actual quedará todo lo que se distribuirá en data.tar.gz.

Con esto en mente crearemos una serie de directorios que simulen la ubicación final en el sistema de los ficheros que se distribuirán. Por ejemplo, tomemos el caso en que querramos instalar un objeto compartido libhola_mundo.so.1.0.0 bajo /usr/lib/hola_mundo. En la carpeta actual crearemos esa ruta con el fichero dentro quedando de esta forma:

DEBIAN/control
usr/lib/hola_mundo/libhola_mundo.so.1.0.0

Pasaremos por último a especificar los scripts de configuración, instalación y desinstalación. Ellos se ejecutarán cuando el proceso de instalación o desinstalación del paquete pase por distintas fases. Las más especificadas son la de “pre-instalación” preinst, “post-instalación
postinst y “desinstalación” postrm. Un ejemplo de un script de instalación es este el cual corresponde con el proceso de desinstalación:

postrm:

#!/bin/sh
set -e
if [ "$1" = "remove" ] then
.
..
fi

Para nuestro ejemplo haremos uno para la fase de post-instalación o configuración como también se le conoce. Lo usaremos para luego de distribuir el objeto compartido crear los vínculos simbólicos en el sistema. Quedaría así:

postinst:

#!/bin/sh
set -e
if [ "$1" = "configure" ]; then
ldconfig
fi

Ya con este fichero estamos listos para empaquetar todo lo que hemos hecho. Este último archivo va dentro de la carpeta DEBIAN/.

Nos aseguramos primero ahora que el usuario root sea dueño de todos los archivos y que tengan permisos de lectura solamente ( 755 ). Para construir nuestro paquete que llamaremos libhola_mundo_0.1-dev-i386.deb, nos ubicamos una carpeta más abajo de la ruta de trabajo y usamos el siguiente comando:

# dpkg-deb -b ruta_trabajo/ libhola_mundo_0.1-dev-i386.deb

Luego para instalarlo:

# dpkg -i libhola_mundo_0.1-dev-i386.deb

¡¡ Y ya !!, tendremos nuestro paquete instalado correctamente …

Advertisements

Actions

Information

One response

28 12 2009
Lobozoldick

Excelente gracias me ha ayudado caleta, pero tengo una consulta "No logro hacer que me funcione el desinstalador del paquete deb que he creado"

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s




%d bloggers like this: