Siguiente: Las herramientas dpkg-xxxxx Superior: Creación de paquetes de Anterior: Sistema de paquetes frente |
Se van a ver, a continuación, los pasos y herramientas necesarios para la creación de un paquete bajo un sistema Debian GNU/Linux. Se va a escoger el paquete hello pues es el que ofrece Debian para mostrar el sistema de construcción de paquetes, que no tiene más que la versión GNU de hello, habitual para los programadores, que se trata un simple programa que escribe "Hello world" por la salida estándar.
Se obtienen primero los tres ficheros fuentes del paquete Debian hello, es decir: hello_x.x.orig.tar.gz, hello_x.x-xx.diff.gz y hello_x.x-xx.dsc (donde las 'x' dependerán del número de versión). Todos se pueden encontrar en una distribución de Debian en stable/main/source/misc/.
El primero de ellos es el código fuente original, el segundo un fichero con las diferencias entre el árbol fuente original (el directorio donde se encuentra el código fuente) y el árbol fuente Debian, y el tercero es una breve descripción del paquete, que, como se verá después, está firmada con PGP (Pretty Good Privacy, ver más abajopgp) por la persona que lo ha empaquetado y tiene un valor de control (función hash MD5) de los dos ficheros anteriores para poder detectar si han sido modificados por alguien ajeno al desarrollador (útil para detectar paquetes 'troyanos').
En primer lugar se ejecutará, con los tres ficheros en un mismo directorio, dpkg-source -x hello_x.x-xxx.dsc, que realizará un untar del fichero original (generando la estructura de directorios del árbol fuente original) y, posteriormente, aplicará el programa patch para incorporar las modificaciones que se han hecho en Debian del paquete. Dentro del directorio generado, que será de la forma nombre_de_paquete-version, se ejecutará dpkg-buildpackage, que, si todo sale bien (como se puede ver aquícreahello), dejará en el directorio anterior, un fichero hello_xxx.deb que será el paquete preparado para instalar.
El proceso de construcción del paquete lo realiza la orden dpkg-buildpackage y para ello ejecuta, por orden: dpkg-source, debian/rules (con los métodos clean, build y binary), dpkg-shlibdeps, dpkg-gencontrol, dpkg-genchanges, y PGP, más adelantedpkg-x se verá su significado aunque se pueden ver los distintos pasos in figure .
Es necesario hacer todo esto como root, ya que una serie de las operaciones que se ejecutan necesitan tener los privilegios de este usuario, como es el cambio de propietario de los ficheros (pasan a ser del usuario root y el grupo root generalmente). Esto puede ser un problema cuando un usuario quiera generar un paquete en un sistema en el que carece de estos privilegios. Para esto existe el programa fakeroot que hace creer al sistema que el usuario es root, esto no supone ningún problema de seguridad porque en realidad es sólo un engaño para el usuario y sus aplicaciones que, en cualquier caso, no adquieren ninguno de los privilegios del superusuario.
Debian usa PGP (aunque cambiará pronto a GPG) para certificar la autenticidad e integridad de los paquetes, ya que el sistema de inserción de paquetes hechos por desarrolladores de Debian es semi-automático (via varios servidores de ftp anónimo y las máquinas de Debian) y, también es posible que personas ajenas a Debian (u otros desarrolladores de Debian) manden cambios, para, por ejemplo, arreglar errores críticos. Es por tanto importante que los paquetes vayan firmados por el que hizo las modificaciones (dpkg-buildpackage llama a PGP al final) y proteger contra modificaciones del paquete que se intenten hacer una vez el maintainer ha dado su versión. Se firma así el fichero .dsc que contiene una descripción del paquete y una ``huella'' de los ficheros anteriormente vistos, esta firma se realiza con una función ``hash'' muy conocida: MD5; también se firma, si existiera, el fichero .changes que contiene las modificaciones realizadas entre una versión.