Creación de paquetes Debian
De SergiTurWiki
Este articulo es una traducción del articulo Creació de paquets Debian
Paquetes Debian
Nombre de los ficheros Debian
El formato del fichero .deb es el siguiente:
<nombre_del_paquete>_<numero_de_version>-<numero_de_revision_debian>.deb
El número de versión está especificado por el desarrollador de la aplicación. Hay un estándar y nos podemos encontrar diferentes tipos de codificaciones como "19990513" o "1.3.8pre1".
El número de revisión de Debian está especificado por el desarrollador Debian (o por quien realmente cree el paquete). Este número se corresponde con el nivel de revisión del paquete Debian. En el caso de que sea un paquete Ubuntu aquí encontraremos la versión de Ubuntu.
Estructura de un paquete binario
Cada paquete Debian es un archivo ar compuesto por:
- data.tar.gz: Ficheros a instalar en el sistema
- control.tar.gz: Scripts de mantenimiento y metadatos
- debian-binary: Número de versión del binario Debian
El fichero control.tar.gz contiene los metadatos del paquete. Dentro de este paquete podemos encontrar ficheros como:
El fichero control contiene los metadatos. Por ejemplo el fichero control del paquete apache2.2-common:
Package: apache2.2-common Version: 2.2.3-3.2build1 Section: web Priority: optional Architecture: i386 Depends: apache2-utils, net-tools, libmagic1, mime-support, lsb-base Conflicts: apache2-common, libapache2-mod-php5 (<= 5.1.6-3), libapache2-mod-php4 (<= 4:4.4.4-2), libapache2-mod-mime-xattr (<= 0.3-2), libapache2-mod-mono (<= 1.1.17-3), libapache2-mod-proxy-html (<= 2.4.3-2), libapache2-mod-scgi (<= 1.11-1), libapache2-mod-speedycgi (<= 2.22-3), libapache2-modxslt (<= 2005072700-1), libapache2-redirtoservername (<= 0.1-1), libapache2-webauth (<= 3.5.3-1), libapache2-webkdc (<= 3.5.3-1) Replaces: apache2-common Installed-Size: 3460 Maintainer: Ubuntu Core Developers <ubuntu-devel@lists.ubuntu.com> Original-Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org> Source: apache2 Description: Next generation, scalable, extendable web server Apache v2 is the next generation of the omnipresent Apache web server. This version - a total rewrite - introduces many new improvements, such as threading, a new API, IPv6 support, request/response filtering, and more. . It is also considerably faster, and can be easily extended to provide services other than http. . This package contains all the standard apache2 modules, including SSL support. However, it does *not* include the server itself; for this you need to install one of the apache2-mpm-* packages; such as worker or prefork.
Que coincide con la información que podeis encontrar con Synaptic si seleccionáis el paquete y con el botón derecho escogeis la opción Propiedades del menú Contextual:
Los contenidos de estos ficheros en el caso de Debian vienen regulados por la Debian policy
El fichero md5sums contiene las sumas de comprobación (checksums) que permiten comprobar que no hay ninguna diferencia entre el paquete que tenemos y el original:
c4d71eca239992365ff6bb0dd2b087e6 usr/bin/krusader a1bea18a70b85afac022cfe6e05d6b64 usr/share/icons/crystalsvg/22x22/apps/krusader_blue.png 29847c1108bc50911de6eb9e231fee69 usr/share/icons/crystalsvg/22x22/apps/krusader_root.png c963d8938d45793ed937abdf1f874685 usr/share/icons/crystalsvg/22x22/apps/krusader_shield.png 1d046e13a24bc4db374fdd599727b233 usr/share/icons/crystalsvg/22x22/apps/krusader_user.png e2b220c05fa7c83b5f53e1843715cced usr/share/icons/crystalsvg/22x22/apps/krusader_red.png
.............
El resto de ficheros son los scripts de mantenimiento (postrm, postinst, etc) que se explican con más detalle en otro apartado.
Recursos:
- Paquetes Binarios en la Debian Policy
- man 5 deb
Ficheros GNU ar
El comando ar lo proporciona el paquete binutils:
$ dpkg -S /usr/bin/ar binutils: /usr/bin/ar
Metadatos
Podemos consultar los metadatos de un paquete Debian a través del comando:
$ dpkg --info talk_0.17-11ubuntu1_i386.deb
paquet de debian nou, versió 2.0.
mida 21638 bytes: arxiu de control= 1084 bytes.
611 bytes, 17 línies control
449 bytes, 7 línies md5sums
357 bytes, 14 línies* postinst #!/bin/sh
158 bytes, 8 línies* prerm #!/bin/sh
Package: talk
Version: 0.17-11ubuntu1
Section: net
Priority: optional
Architecture: i386
Depends: libc6 (>= 2.5-0ubuntu1), libncurses5 (>= 5.4-5), update-inetd, openbsd-inetd | inet-superserver
Suggests: talkd
Replaces: netstd
Installed-Size: 88
Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
Original-Maintainer: Alberto Gonzalez Iniesta <agi@inittab.org>
Source: netkit-ntalk
Description: Chat with another user
Talk is a visual communication program which copies lines from your terminal
to that of another user.
.
In order to talk locally, you will need to install the talkd package.
Los metadados se almacenan en el fichero control de dentro del fichero comprimido control.tar.gz de un fichero binario de debian.
La Debian Policy determina como se han de utilizar los campos del fichero control.
Recursos:
- Campos del fichero control según la Debian Policy (http://www.debian.org/doc/debian-policy/ch-controlfields.html)
Scripts de mantenimiento
Durante la instalación o desinstalación de un paquete Debian no se instalan o se eliminan simplemente ficheros en el sistema, sino que también se llevan a cabo diferentes acciones para configurar los paquetes. Estas acciones las llevan a cabo los siguientes scripts de mantenimiento:
- preinst: Se ejecuta antes de extraer los ficheros del paquete al sistema.
- postinst: Se ejecuta después de extraer los ficheros del sistema.
- prerm: Se ejecuta antes de borrar los ficheros del sistema.
- postrm: Se ejecuta después de borrar los ficheros del sistema.
- config: Fichero de configuración de Debconf.
- templates: Plantillas de Debconf.
Todos estos ficheros se encuentran dentro del fichero control.tar.gz de un paquete Debian. Durante el proceso de construcción del paquete, los ficheros se encuentran en la carpeta debian.
La siguiente gráfica muestra cuando se ejecutan estos scripts.
La [(http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html) Debian Policy] determina como se han de utilizar los scripts de mantenimiento. Si consultais el enlace anterior además vereis que hay otros scripts de mantenimiento aparte de los mencionados.
Recursos:
Relaciones entre paquetes
- El paquete A depende del Paquete B: Implica que es absolutamente necesario que el paquete B esté instalado antes de poder instalar A. También incluso puede ser que A dependa de una versión específica de B.
- El paquete A recomienda B: B no es necesario pero el desarrollador de A cree que la mayoria de usuarios de A encontrarán útil B.
- El paquete A sugiere B: El paquete A sugeriere el B porque B contiene funcionalidades relacionadas con A (y que a menudo mejoran su funcionalidad).
- El paquete A entra en conflicto con el paquete B: El paquete A no puede operar en el sistema si existe B. A menudo porque los dos proporcionan el mismo fichero.
- El paquete A reemplaza B: Al instalar A se borran los ficheros de B y en algunos casos se sobreescriben.
- El paquete A provee de B: Cuando todos los ficheros y funcionalidades de B han de estar incorporados a A.
Recursos:
Importancia de un paquete
- Required: Paquetes imprescindibles para el correcto funcionamento del sistema. Esto incluye todas las herramientas necesarias para reparar los defectos de un sistema. Sin estos paquetes el sistema estará roto y no se podrá utilizar dpkg para arreglarlo. Los sistemas que solo tienen paquetes requeridos no son utilizables, pero tienen las suficientes funcionalidades para permitir que el administrador del sistema pueda iniciar la máquina e instalar más software.
- Important: Paquetes que se habrian de encontrar en todo sistema. Estos paquetes no incluyen Emacs o X11 o TeX ni ninguna otra "gran" aplicación. Estos paquetes solo constituyen la infraestructura básica.
- Standard: Los paquetes Standard, son aquellos paquetes mínimos que se habrian de encontrar en toda máquina. Están las herramientas básicas para navegar por la web (w3m), enviar correos electrónicos (mutt) o descargar ficheros o servidores FTP. Estos paquetes (y los de prioridad superior) son los que se instalan por defecto. No incluye muchas aplicaciones importantes.
- Optional: Paquetes que posiblemente mucha gente querrá instalar pero que no son imprescindibles para el sistema. Aquí encontramos paquetes tan importantes como X11.
- Extra: Paquetes que entran en conflicto con otros de mayor prioridad pero que en ciertas condiciones los usuarios pueden preferir.
Una instalación por defecto de Debian instala todos los paquets de prioridad Standard o superior.
Recursos:
Estructura de los paquetes fuente Debian
Si consultais un repositorio de paquetes Debian como por ejemplo el repositorio de Ubuntu:
Obtendreis el siguiente:
Como podeis ver hay diferentes versiones del mismo paquete, y además de los paquetes Debian para diferentes arquitecturas (fitxers .deb) hay otros ficheros:
- hello_2.2-2.dsc: Fichero principal que controla el código fuente del paquete, con información general del código fuente. Están firmados con PGP.
- hello_2.2-2.orig.tar.gz: Código fuente original o el que a menudo se denomina upstream.
- hello_2.2-2.diff.gz: Fichero diff que contiene los cambios que se han de aplicar sobre el original para obtener la versión Debian.
Si queremos obtener estos ficheros los podemos descargar manualmente o simplemente ejecutando:
$ apt-get source hello Se está leyendo la lista de paquetes... Hecho Se está construuendo el árbol de dependencias Reading state information... Hecho Se necesita descargar 388kB de archivos fuente. Des:1 http://ch.archive.ubuntu.com feisty/main hello 2.2-1build1 (dsc) [524B] Des:2 http://ch.archive.ubuntu.com feisty/main hello 2.2-1build1 (tar) [383kB] Des:3 http://ch.archive.ubuntu.com feisty/main hello 2.2-1build1 (diff) [4841B] 388kB descargados en 1s (372kB/s) gpg: Signature made dl 05 mar 2007 02:22:21 CET using DSA key ID 0F932C9C gpg: No se ha podido comprobar la firma: no se ha encontrado la clave pública dpkg-source: se está extrayendo hello a hello-2.2 dpkg-source: se está desempaquetando hello_2.2.orig.tar.gz dpkg-source: se está aplicando ./hello_2.2-1build1.diff.gz
Nos descarga todos los ficheros y aplica el pegado:
$ ls -l total 404 drwxr-xr-x 10 sergi sergi 4096 2007-06-14 08:30 hello-2.2 -rw-r--r-- 1 sergi sergi 4841 2007-03-05 03:04 hello_2.2-1build1.diff.gz -rw-r--r-- 1 sergi sergi 524 2007-03-05 03:04 hello_2.2-1build1.dsc -rw-r--r-- 1 sergi sergi 382629 2006-12-12 14:03 hello_2.2.orig.tar.gz
En la carpeta hello-2.2 tenemos todo el código fuente del paquete Debian. Si quereis, podeis crear (compilar) vuestro paquete ejecutando:
$ cd hello-2.2 $ fakeroot # dpkg-buildpackage
Recursos:
Comando patch
TODO
Recursos:
Comando debdiff
Permite comparar fichero debian. Veamos un ejemplo:
$ wget http://ch.archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.2-2_i386.deb $ wget http://ch.archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.2-2_powerpc.deb
$ debdiff hello_2.2-2_i386.deb hello_2.2-2_powerpc.deb File lists identical (after any substitutions) Can't compare control files; wdiff package not installed
Instalamos wdiff:
$ sudo apt-get install wdiff
$ debdiff hello_2.2-2_i386.deb hello_2.2-2_powerpc.deb
File lists identical (after any substitutions)
Control files: lines which differ (wdiff format)
------------------------------------------------
Architecture: [-i386-] {+powerpc+}
Installed-Size: [-584-] {+588+}
Son ficheros debian idénticos pero para diferentes arquitecturas.
Recursos:
Comando dpkg-source
Continuando con el ejemplo hello. Si descargamos los ficheros fuente
$ wget http://ch.archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.2-2.dsc $ wget http://ch.archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.2-2.diff.gz $ wget http://ch.archive.ubuntu.com/ubuntu/pool/main/h/hello/hello_2.2.orig.tar.gz
Ahora podemos crear la carpeta con el código fuente del paquete debian con:
$ dpkg-source -x hello_2.2-2.dsc
NOTA: Todos estos pasos son equivalentes a ejecutar apt-get source.
Recursos:
Nota sobre Paquetes Ubuntu
TODO
Así, la primera revisión de la versión 1.0 del paquete «dirhola» sería «dirhola_1.0-1» si es la primera vez que la versión 1.0 de este paquete entra en Debian, «dirhola_1.0-2» si es la segunda revisión, etc... En Ubuntu el nombre es el mismo, pero si se da el caso de que Ubuntu también hace cambios este último pasaria a ser «dirhola_1.0-2ubuntu1»; si encontramos algún otro problema entonces saldría el paquete «dirhola_1.0-2ubuntu2», etc.
En el caso de que un paquete esté en Ubuntu pero no en Debian el número de revisión de debian es 0, por ejemplo «diradeu_0.1-0ubuntu1», si es la primera vez que se hace un paquete de la versión 0.1 del programa «diradeu» y ésta solamente se hace en Ubuntu (o se hace independientemente del de Debian, caso que también se puede dar).
Gracias a Siegfried-Angel Gevatter Pujals (RainCT).
Debconf
Debconf es una utilidad de software que permite llevar a cabo tareas de configuración en sistemas Debian GNU/Linux. Debconf está muy ligado a dpkg.
Muchos paquetes al instalarse iniciando una interfaz con el usuario para pedir los parámetros de configuración que crean adientes:
Debconf se proporciona por el paquete del mismo nombre. Ejecutando
$ dpkg -L debconf | grep bin /usr/sbin /usr/sbin/dpkg-preconfigure /usr/sbin/dpkg-reconfigure /usr/bin /usr/bin/debconf /usr/bin/debconf-apt-progress /usr/bin/debconf-communicate /usr/bin/debconf-copydb /usr/bin/debconf-escape /usr/bin/debconf-set-selections /usr/bin/debconf-show
Podemos ver cuáles son los comandos proporcionados por Debconf. El más importante es dpkg-reconfigure que nos permite reconfigurar paquetes ya instalados en nuestro sistema. Uno de los ejemplos más comunes es ejecutar:
$ sudo dpkg-reconfigure xserver-xorg
Que permite configurar el servidor X tal y como podeis ver en el artículo Configurar_el_paquet_Debian_xserver-xorg.
Hay otros paquetes relacionados con debconf:
- debconf-doc: Documentación de debconf
- debconf-utils: Utilidades para Debconf
- po-debconf: Internacionalización de Debconf.
- debconf-i18n: Internacionalización de Debconf.
La especificación de Debconf en la Debian Policy os puede dar más detalles sobre Debconf.
Recursos:
- Página oficial de DebConf
- http://en.wikipedia.org/wiki/Debconf_%28software_package%29
- http://www.fifi.org/doc/debconf-doc/tutorial.html
- man dh_installdebconf
- man debconf-devel
- man confmodule
- man debconf.conf
Protocolo Debconf
Las aplicaciones que quieren utilizar debconf han de utilizar un protocolo de comunicación con debconf. Los comandos del protocolo son:
- VERSION
- CAPB
- TITLE
- SETTITLE
- INPUT
- GO
- CLEAR
- BEGINBLOCK
- ENDBLOCK
- STOP
- GET
- SET
- RESET
- SUBST
- FGET
- FSET
- METAGET
- REGISTER
- UNREGISTER
- PURGE
En el manual de debconf-devel encontrareis una explicación de cada comando. Los más importantes (o los que utilizamos en los ejemplos de este artículo):
- VERSION: Establece la versión. Utilizamos la versión 2.0
- CAPB: Establece las capacidades de DEBCONF. Lo utilizaremos para establecer la capacidad backup.
- INPUT: Prepara una plantilla de debconf para ser mostrada. Cada ventana tiene una cierta prioridad.
- GET: Obtenemos el resultado de llamar a una plantilla. Dependiendo de la plantilla puede ser una respuesta sí/no, un string, etc...
- GO: Muestra la plantilla que hemos preparado con INPUT.
Cada comando tiene una función equivalente en shell. Estas funciones son proporcionadas por el script de shell /usr/share/debconf/confmodule y sus nombres son:
db_comandodebconf
Donde comandodebconf es un comando de debconf. Ejemplos: db_capb, db_version, db_get. También se pueden comunicar con debconf a través de otros lenguajes como Perl.
- man debconf-devel. La sección THE DEBCONF PROTOCOL.
Depurando Debconf
Una herramienta muy útil para identificar errores con debconf es activar el modo DEBUG de debconf con:
$ export DEBCONF_DEBUG=developer
Ahora si ejecutamos el script config tendremos más información sobre la ejecución:
$ sudo ./config debconf (developer): frontend started debconf (developer): Trying to find a templates file.. debconf (developer): Trying ./config.templates debconf (developer): Trying ./templates debconf (developer): I guess it is ./templates debconf (developer): frontend running, package name is debconf (developer): starting ./config debconf (developer): <-- VERSION 2.0 debconf (developer): --> 0 2.0
................................
Prioridades de debconf
El parámetro debconf/priority define la prioridad más alta de los mensajes a mostrar por debconf. La instalación predeterminada utiliza priority=high. En este caso se mostrarán los mensajes con prioridad high y critical, pero se anularán los mensajes con prioridad medium y low.
Estos parámetros se utilizan con debconf y con la instalación del sistema. Si utilizais el parámetro de arranque priority=medium, se os mostrará el menú de instalación y dispondreis de más control sobre la instalación. Cuando se utiliza el parámetro priority=low se mostrarán todos los mensajes (es equivalente al método de arranque experto). En el caso de priority=critical, el sistema de instalación mostrará únicamente los mensajes críticos y procurará hacer el trabajo correctamente sin mostrar mensajes.
Recursos:
Interfaces de debconf
El parámetro DEBIAN_FRONTEND es un parámetro que define el tipo de interfaz de usuario utilizado durante las instalaciones y también con las configuraciones con Debconf. Los posibles parámetros de configuración actuales para la instalación del sistema son:
- DEBIAN_FRONTEND=noninteractive: No hay interacción con el usuario.
- DEBIAN_FRONTEND=text: Texto para línea de comandos. readline es una opción equivalente.
- DEBIAN_FRONTEND=newt
- DEBIAN_FRONTEND=gtk
$ export DEBIAN_FRONTEND=readline
Si ejecutamos el script, las preguntas se harán desde la línea de comandos:
$ sudo debian/config Configuración del paquete «» Please enter the hostname of the database server host. Database server hostname: 8001
NOTA: Realmente debconf utiliza las interfaces definidas en la carpeta /usr/share/perl5/Debconf/FrontEnd:
$ ls Dialog.pm Editor.pm Gnome.pm Kde Kde.pm Noninteractive.pm Passthrough.pm Readline.pm ScreenSize.pm Teletype.pm Text.pm Web.pm
Por ejemplo para probar con Gnome hemos de ejecutar:
$ export DEBIAN_FRONTEND=gnome $ sudo debian/config
Por defecto, debconf utiliza Programació_en_C_2#Dialog dialog. Dialog es un conjunto de herramientas que utilizando ncurses para crear formulario de interfaz con los usuarios por línea de comandos. Las pantallas se muestran de la siguiente forma:
Podeis probar el resto de interfaces:
Dialog.pm Editor.pm Gnome.pm Kde Kde.pm Noninteractive.pm Passthrough.pm Readline.pm ScreenSize.pm Teletype.pm Text.pm Web.pm
estableciendo la variable de entorno en el nombre de fichero pero en minúsculas. Por ejemplo:
$ export DEBIAN_FRONTEND=kde
Recursos:
Debconf-communicate
Se puede utilizar para comunicarse con debconf. Por ejemplo el comando:
$ sudo -i $ echo get echod/port | debconf-communicate 0 8001
Nos devuelve el resultado de ejecutar la pregunta echod/port.
Recursos:
Herramientas de traducción de Debconf
TODO
Troubleshooting
Al ejecutar los scripts de configuración de debconf (config) no se muestran las plantillas
Si al ejecutar debconf, de golpe las ventanas de configuración dejan de ejecutarse podemos probar los pasos indicados en esta sección para mirar de solucionarlo.
Si configuramos debconf en mode debug:
$ export DEBCONF_DEBUG=developer
Si ahora ejecutamos el script:
$ sudo debian/config debconf (developer): frontend started debconf (developer): Trying to find a templates file.. debconf (developer): Trying debian/config.templates debconf (developer): Trying debian/templates debconf (developer): I guess it is debian/templates debconf (developer): frontend running, package name is debconf (developer): starting debian/config debconf (developer): <-- VERSION 2.0 debconf (developer): --> 0 2.0 debconf (developer): <-- CAPB backup debconf (developer): --> 0 multiselect escape backup debconf (developer): <-- INPUT critical echod/port debconf (developer): --> 30 question skipped ...........
Vemos como las preguntas se saltan. Para solucionar este problema le hemos de indicar a debconf (a través del comando debconf-communicate) que la plantilla no está vista todavia:
$ sudo -i $ echo fset echod/port seen false | debconf-communicate $ echo fset echod/notconfigured seen false | debconf-communicate $ exit
Problemas extraños. Comandos que hemos pedido pero que finalmente no se han ejecutado
Ojo con el uso de fakeroot porque solamente nos sirve para crear el paquete con dpk-buildpackage!!! Si os dais cuenta que algunos comandos que habeis ejecutado no se han realizado (por ejemplo habeis borrado un paquete del sistema con --purge y los ficheros de configuración todavia están ...) es muy posible que el comando lo hayais ejecutado desde fakeroot.
Debianización de programas
Pasos previos. Paquetes necesarios para crear paquetes Debian
$ sudo apt-get install binutils gcc libc6-dev make fakeroot
Posiblemente muchos de estos paquetes ya los encontrareis instalados en el sistema dependiendo de su importancia.
Utilidades:
$ sudo apt-get install debmake dpkg-dev devscripts patch
Documentación:
$ sudo apt-get install debian-policy developers-reference
DebHelper. Ayuda en el proceso de Build
Instalación:
$ apt-get install debhelper dh-make
dh_make es la aplicación que nos ayuda a crear una carpeta debian a partir de la cual debianizar un código fuente
$ dh_make -e you@example.com -f ../foo0.1.tar.gz
debhepler nos proporciona una serie de guiones de shell que no ayudan en la creación de paquetes debian. Podemos obtener la lista de guiones de shell ejecutando:
$ dpkg -L debhelper | grep bin /usr/bin /usr/bin/dh_builddeb /usr/bin/dh_clean /usr/bin/dh_compress /usr/bin/dh_desktop /usr/bin/dh_fixperms /usr/bin/dh_gconf /usr/bin/dh_gencontrol /usr/bin/dh_iconcache /usr/bin/dh_install /usr/bin/dh_installcatalogs /usr/bin/dh_installchangelogs /usr/bin/dh_installcron /usr/bin/dh_installdeb /usr/bin/dh_installdebconf /usr/bin/dh_installdirs /usr/bin/dh_installdocs /usr/bin/dh_installemacsen /usr/bin/dh_installexamples /usr/bin/dh_installinfo /usr/bin/dh_installinit /usr/bin/dh_installlogcheck /usr/bin/dh_installlogrotate /usr/bin/dh_installman /usr/bin/dh_installmanpages /usr/bin/dh_installmenu /usr/bin/dh_installmime /usr/bin/dh_installmodules /usr/bin/dh_installpam /usr/bin/dh_installppp /usr/bin/dh_installudev /usr/bin/dh_installwm /usr/bin/dh_installxfonts /usr/bin/dh_link /usr/bin/dh_listpackages /usr/bin/dh_makeshlibs /usr/bin/dh_md5sums /usr/bin/dh_movefiles /usr/bin/dh_perl /usr/bin/dh_python /usr/bin/dh_scrollkeeper /usr/bin/dh_shlibdeps /usr/bin/dh_strip /usr/bin/dh_suidregister /usr/bin/dh_testdir /usr/bin/dh_testroot /usr/bin/dh_testversion /usr/bin/dh_undocumented /usr/bin/dh_usrlocal
Las siguientes tablas nos muestran los ficheros que utilizan algunos de los guiones debhelper más importantes:
Recursos:
Probando los paquetes creados. Lintian y Linda
Instalación:
$ apt-get install lintian linda
Devscripts
El paquete devscripts proporciona múltiples utilidades útiles para los desarrolladores.
$ sudo apt-get install devscripts
Las utilidades o comandos que proporciona son:
$ dpkg -L devscripts | grep bin /usr/bin /usr/bin/bts /usr/bin/checkbashisms /usr/bin/cvs-debuild /usr/bin/dd-list /usr/bin/debchange /usr/bin/debcommit /usr/bin/debdiff /usr/bin/debi /usr/bin/debpkg /usr/bin/debuild /usr/bin/dget /usr/bin/dpkg-depcheck /usr/bin/dscverify /usr/bin/grep-excuses /usr/bin/mass-bug /usr/bin/plotchangelog /usr/bin/rc-alert /usr/bin/rmadison /usr/bin/svnpath /usr/bin/annotate-output /usr/bin/archpath /usr/bin/cvs-debi /usr/bin/cvs-debrelease /usr/bin/deb-reversion /usr/bin/debclean /usr/bin/debrelease /usr/bin/debrsign /usr/bin/debsign /usr/bin/dpkg-genbuilddeps /usr/bin/mergechanges /usr/bin/nmudiff /usr/bin/pts-subscribe /usr/bin/tagpending /usr/bin/uscan /usr/bin/uupdate /usr/bin/whodepends /usr/bin/who-uploads /usr/bin/wnpp-alert /usr/bin/requestsync /usr/bin/dch /usr/bin/debc /usr/bin/cvs-debc
Debchange (alias dch)
El comando debchange (también conocido como dch) nos permite modificar los ficheros changelog de forma cómoda. Si ejecutamos debchange sin parámetros (siempre desde la raiz de nuesro código fuente o lo que es lo mismo que la carpeta debian esté dentro de la carpeta donde nos encontramos) nos abre el fichero debian/changelog con nuestro editor preferido (variable de entorno $EDITOR).
Pero la verdadera utilidad de debchange la encontrareis en el siguiente ejemplo: imaginaros que acabais de solucionar un BUG/error en vuestro código fuente. Podeis ejecutar:
$ debchange S'ha modificat la línia x del fitxer y per solucionar l'error 2325
Si ahora ejecutais debchange obtendreis el siguiente fichero changelog:
echod (0.1-1) unstable; urgency=low *Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP> *S'ha modificat la línia x del fitxer y per solucionar lerror 2325
Como podreis observar algunos caracteres se "pueden escapar". La forma correcta habría sido:
$ debchange S\'ha modificat la línia x del fitxer y per solucionar l\'error 2325
Si estamos creando una nueva versión del paquete podemos cambiar el fichero changelog fácilmente con:
$ debchange -i echod (0.1-1ubuntu2) feisty; urgency=low *Nueva versión -- Sergi Tur Badenas <sergi@localhost.localdomain> Wed, 6 Jun 2007 12:58:10 +0200 echod (0.1-1) unstable; urgency=low *Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP> *Sha modificat la línia x del fitxer y per solucionar lerror 2325 -- Sergi Tur Badenas <sergi@localhost.localdomain> Wed, 6 Jun 2007 12:53:05 +0200
NOTA: También podemos utilizar debchange utilizant el alias dch:
$ which dch /usr/bin/dch $ ls -la /usr/bin/dch lrwxrwxrwx 1 root root 9 2007-04-21 03:09 /usr/bin/dch -> debchange
Creación de un paquete Debian. Servidor de echos (echod)
En este apartado veremos los pasos a seguir para convertir en un paquete Debian el Servidor de ecos del artículo Programación de demonios Linux. Podeis obtener los ficheros en:
- Usuari: anonymous
- Contrasenya: anonymous
Encontrareis una carpeta echoDimoni. El primer paso es copiar esta carpeta a una nueva que siga los convenios de debian:
$ cd sessio10 $ cp -r echoDimoni echod-0.1
Ahora hay que obtener las herramientas necesarias para crear el paquete Debian:
$ sudo apt-get install dh-make fakeroot build-essential devscripts debhelper
- dh-make: Será la utilidad que nos creará la carpeta debian a partir de la cual podremos crear el paquete debian.
- fakeroot: Para crear el paquete necesitamos permisos de superusuario. Este comando es útil para aquellos desarrolladores que han de crear paquetes en sistemas donde no tenemos permisos de superusuario.
- build-essential: Build essential es un paquete "tonto" (dummy package) que instala todas las herramientas necesarias para construir aplicaciones a partir del códigp fuente:
- libc6-dev: librerias de C para desarrolladores.
- gcc: el compilador GNU.
- g++: el compilador GNU de C++.
- make: la herramienta make.
- dpkg-dev: nos proporciona herramientas como dpkg-buildpackage que nos ayudarán en la construcción del paquete.
- 'devscripts: devscripts nos proporciona guiones de shell útiles para los desarrolladores de paquetes debian como por ejemplo debchange.
- debhelper: Nos proporciona todas los comandos dh_xxx que nos ayudarán a construir el paquete Debian.
Para crear un paquete Debian, hay que crear una carpeta debian dentro de nuestro código. Esta carpeta tendrá una serie de información necesaria para crear un paquete debian a partir del código fuente. La forma más sencilla de crear esta carpeta es utilizar una herramienta como dh_make del paquete deb-helper:
NOTA: Poned vuestro propio correo en lugar de creador.del.paquete@ejemplo.com.
$ cd echod-0.1 $ dh_make -e creador.del.paquete@ejemplo.com --createorig
Os preguntará por el tipo de paquete. En este documento solamente trataremos la opción single binary (s):
Type of package: single binary, multiple binary, library, kernel module or cdbs? [s/m/l/k/b]
Y nos mostrarán los datos de control iniciales de nuestro paquete (más adelante los veremos con más detalle y los adaptaremos a nuestras necesidades):
Maintainer name : Sergi Tur Badenas Email-Address : sergi.tur@upc.edu Date : Fri, 8 Jun 2007 13:15:56 +0200 Package Name : echod Version : 0.1 License : blank Type of Package : Single Hit <enter> to confirm:
Presionamos enter y ya tenemos creada la carpeta debian.
La opción --createorig nos creará una carpeta llamada echod-0.1.orig:
$ ls -la .. total 32 ............. drwxr-xr-x 5 sergi sergi 4096 2007-06-08 13:18 echod-0.1 drwxr-xr-x 4 sergi sergi 4096 2007-06-08 13:12 echod-0.1.orig drwxr-xr-x 4 sergi sergi 4096 2007-06-08 12:59 echoDimoni ......
Esta carpeta será utilizada más adelante para crear los ficheros fuente de debian.
Una vez tenemos la carpeta debian, ya estamos en condiciones de crear un paquete Debian a través del comando dpkg-buildpackage. Para crear el paquete hay que ser superusuario o todavia mejor, utilizar el comando fakeroot:
$ fakeroot # dpkg-buildpackage ............. ............. dpkg-genchanges dpkg-genchanges: including full source code in upload signfile echod_0.1-1_i386.changes dpkg-buildpackage: full upload (original source is included)
Una vez creado el paquete es MUY IMPORTANTE para evitar errores y otras complicaciones, salir de fakeroot con el comando exit:
# exit $
Si ejecutamos el comando:
$ ls -l .. .............................. drwxr-xr-x 5 sergi sergi 4096 2007-06-08 13:22 echod-0.1 -rw-r--r-- 1 sergi sergi 7474 2007-06-08 13:22 echod_0.1-1.diff.gz -rw-r--r-- 1 sergi sergi 546 2007-06-08 13:23 echod_0.1-1.dsc -rw-r--r-- 1 sergi sergi 980 2007-06-08 13:23 echod_0.1-1_i386.changes -rw-r--r-- 1 sergi sergi 6550 2007-06-08 13:23 echod_0.1-1_i386.deb -rw-r--r-- 1 sergi sergi 18471 2007-06-08 13:22 echod_0.1.orig.tar.gz drwxr-xr-x 4 sergi sergi 4096 2007-06-08 12:59 echoDimoni .....................
Se han creado tanto el paquete debian binario, como los #Estructura_de_los_paquetes_fuente_Debian paquetes debian fuente () y el fichero de cambios (.changes).
Pero no todo es tan simple, realmente si ahora abris el paquete debian con el comando:
$ nautilus ..
Y abris el paquete con la aplicación "Gestor d'arxius":
en KDE teneis una aplicación llamada ARK:
Desde la línea de comandos, el comando equivalente es:
$ file-roller ../echod_0.1-1_i386.deb
Si navegais por los contenidos del paquete vereis que hay mucha información incompleta (descripción del fichero, fichero README, etc...) y que todavia quedan algunos detalles por mejorar. Esto es debido a que dh_make no puede hacer todo el trabajo del programador, pero sí facilitarla proporcionandonos una serie de herramientas y plantillas que precisamente se encuentran en la carpeta debian.
De hecho, si utilizamos alguna de las herramientas de comprobación de paquetes como por ejemplo lintian:
$ lintian ../echod_0.1-1_i386.debW: echod: binary-without-manpage echod E: echod: helper-templates-in-copyright E: echod: description-is-dh_make-template W: echod: wrong-bug-number-in-closes l3:#nnnn E: echod: section-is-dh_make-template
Vemos que el paquete tiene errores y que todavia no cumple completamente con las políticas de Debian.
Hay que decir también que con tal de poder utilizar dpkg-buildpackage el Makefile del código fuente original ha de tener como mínimo las normas clean y install. Vemos los ficheros debian/rules y Makefile para conocer mejor la relación entre los dos. Ejecutamos los comandos:
$ gedit debian/rules & $ gedit Makefile &
Fichero debian/rules:
clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp # Add here commands to clean up after the build process. -$(MAKE) clean dh_clean ................ install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # Add here commands to install the package into debian/echod. $(MAKE) DESTDIR=$(CURDIR)/debian/echod install
Fichero makefile:
OWNER=root GROUP=root PROGRAM=echod INSTALL=/usr/bin/install BINDIR=$(DESTDIR)/usr/sbin INITDDIR=$(DESTDIR)7/etc/init.d ETCDIR=$(DESTDIR)/etc/$(PROGRAM) all: echod echod: echod.c gcc -o echod echod.c clean: rm -f echod install: all install_portfile install_initd $(INSTALL) -c -o $(OWNER) -g $(GROUP) -m 755 $(PROGRAM) $(BINDIR) install_initd: all mkdir -p $(INITDDIR) $(INSTALL) -c -o $(OWNER) -g $(GROUP) -m 755 etc/init.d/$(PROGRAM) $(INITDDIR) install_portfile: all mkdir -p $(ETCDIR) $(INSTALL) -c -o $(OWNER) -g $(GROUP) -m 644 etc/$(PROGRAM)/port $(ETCDIR) uninstall: rm -f $(INITDDIR)/echod rm -f $(BINDIR)/echod
Fijaros que el truco de utilizar la variable $(DESTDIR) nos permite instalar la aplicación allí donde queramos. El fichero debian/rules no es más que un script Makefile (por eso en la primera línea #!/usr/bin/make -f).
El comando dpkg-buildpackage ejecuta las normas de Debian necesarias para poder crear el paquete. Algunas de estar normas contienen llamadas a normas del fichero Makefile original, como puede ser el caso de las normas install y clean:
$(MAKE) clean $(MAKE) DESTDIR=$(CURDIR)/debian/echod install
Fijaros que todos los ficheros que formarán part del paquete se instalan antes temporalmente en la carpeta debian/nombre_paquete (en nuestro caso: debian/echod). Todo empieza a relacionarse!
Podeis encontrar más información sobre el fichero debian/rules de la Debian Policy.
El resto del fichero debian/rules son llamadas a guiones de shell de debhelper. Durante lo siguientes apartados veremos algunos ejemplos de uso de estos guiones:
Ahora vamos a modificar las plantillas que nos proporciona dh_make para configurar nuestro paquet y acabar de crear un Paquete Debian "perfecto".
Seguiremos los siguientes pasos:
- Modificar el fichero debian/control para introducir la sección del paquete y la descripción (si el paquete tuviese alguna dependencia también la habríamos de especificar en este fichero)
Fichero original:
Source: echod
Section: unknown
Priority: extra
Maintainer: Sergi Tur Badenas <sergi.tur@upc.edu>
Build-Depends: debhelper (>= 5)
Standards-Version: 3.7.2
Package: echod
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: <insert up to 60 chars description>
<insert long description, indented with spaces>
Fichero modificado:
Source: echod
Section: web
Priority: extra
Maintainer: Sergi Tur Badenas <sergi.tur@upc.edu>
Build-Depends: debhelper (>= 5)
Standards-Version: 3.7.2
Package: echod
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Servidor d'ecos del curs de programació en Linux
Aquest servidor és un dimoni que esta a l'espera de rebre missatges d'un client
Els missatges rebuts pel client són retornats sense cap canvi al client
- Podemos/habríamos de modificar el fichero de registro de cambios (debian/changelog) con el comando debchange. Si ejecutamos:
$ debchange Esta es la versión inicial de nuestro paquete
y después ejecutamos:
$ debchange
Vemos como se ha modificado el fichero de cambios:
echod (0.1-1) unstable; urgency=low *Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP> *Esta es la versión inicial de nuestro paquete -- Sergi Tur Badenas <sergi@localhost.localdomain> Sun, 10 Jun 2007 11:27:06 +0200
Veremos como hemos añadido un comentario al registro de cambios. Consultar la sección debchange para obtener más detalles sobre debchange.
El siguiente paso es modificar el fichero debian/copyright para especificar nuestra licencia. El comando dh_make nos ha creado la siguiente plantilla:
This package was debianized by Sergi Tur Badenas <sergi.tur@upc.edu> on
Tue, 5 Jun 2007 13:01:02 +0200.
It was downloaded from <fill in http/ftp site>
Upstream Author: <put author(s) name and email here>
Copyright: <put the year(s) of the copyright, and the names of the
copyright holder(s) here>
License:
<Put the license of the package here>
The Debian packaging is (C) 2007, Sergi Tur Badenas <sergi.tur@upc.edu> and
is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.
Podeis encontrar ficheros de ejemplo de licencias en vuestra propia máquina ejecutando el comando:
$ sudo updatedb $ locate copyright
Por ejemplo la licencia de emacs la encontrareis en:
$ cat $(dpkg -L emacs | grep copyright)
o apache2:
$ cat $(dpkg -L apache2 | grep copyright)
Podeis copiar la licencia libre que os parezca más adecuada a vuestro fichero de copyright.
- El siguiente paso es modificar el fichero debian/dirs para que solamente incluya las carpetas que realmente utilizaremos (al tratarse de un demonio solamente necesitamos la carpetas /usr/sbin)
$ gedit debian/dirs usr/sbin
- El siguiente paso es preparar los ficheros debian/README.Debian y debian/TODO.Debian:
$ cat debian/README.Debian echod for Debian --------------------- <possible notes regarding this package - if none, delete this file> -- Sergi Tur Badenas <sergi.tur@upc.edu> Tue, 5 Jun 2007 13:01:02 +0200
En el fichero README podemos poner las notas que creamos convenientes sobre la aplicación. Otro fichero típico es el fichero TODO (things to do), donde como dice su propio nombre, se muestran las tareas que hay pendientes de hacer. Podemos crear un fichero llamado debian/TODO.Debian.
Estos dos ficheros acabarán en la carpeta de documentación, que siguiendo el estándar FHS debe ser la carpeta /usr/share/doc/nompaquet.
- Hay que recordar que nuestro código fuente es el código fuente de un demonio y que como tal tiene su correspondiente script de inicialización System V /etc/init.d/echod. El fichero ya se instala en la carpeta adecuada durante la llamada a la norma install, pero además deb_helper nos proporciona el comando dh_installinit. Solo hemos de descomentar la línea adecuada en el fichero debian/rules:
......... # dh_installemacsen # dh_installpam # dh_installmime # dh_python dh_installinit # dh_installcron # dh_installinfo
En este punto es donde hemos de introducir nuestro primer hack del fichero debian/rules'. El comando dh_install no hará nada si ya encuentra el fichero /etc/init.d/echod instalado en el sistema. Como que el instalador del código fuente original del programa (norma install del Makefile) ya instala el fichero dh_installinit no hará nada. Podemos solucionar este problema añadiendo la línea:
$ mv $(CURDIR)/debian/echod/etc/init.d/echod $(CURDIR)/debian/echod.init
En la norma install del fichero debian/rules queda de la siguiente forma:
install: build dh_testdir dh_testroot dh_clean -k dh_installdirs # Add here commands to install the package into debian/echod. $(MAKE) DESTDIR=$(CURDIR)/debian/echod install mv $(CURDIR)/debian/echod/etc/init.d/echod $(CURDIR)/debian/echod.init
Es un buen punto para hacer notar como todo el fichero debian/rules está lleno de llamadas a los comandos del paquete deb-helper (comandos dh_*). Cada uno de estos comandos tiene su correspondiente manual donde podemos obtener información detallada de lo que hacen.
El comando dh_installinit creará los ficheros:
- echod.postinst.debhelper
- echod.postrm.debhelper
- echod.prerm.debhelper
Estos ficheros son los que conjuntamente con los ficheros (en el caso que existan):
- debian/postinst
- debian/postrm
- debian/prerm
Conformarán los Scripts de mantenimiento finales postinst, postrm y prerm que encontraremos en el fichero control.tar.gz del paquete debian final.
Si vemos el código de uno de ellos echod.postinst.debhelper:
# Automatically added by dh_installinit if [ -x "/etc/init.d/echod" ]; then update-rc.d echod defaults >/dev/null if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then invoke-rc.d echod start || exit $? else /etc/init.d/echod start || exit $? fi fi # End automatically added section
Veremos que el script postinst se encargará de configurar nuestro sistema para iniciar el demonio automáticamente al iniciar el sistema. Simplemente Genial! El resto de scripts hacen tareas similares (como por ejemplo sacar del inicio el demonio si lo desinstalamos).
NOTA: Hay que recalcar que los scripts echod.*.debhelper no reescriben nuestros ficheros postinst, postrm, etc sino que deb_helper se encarga de añadir este código (operación merge) a nuestro fichero.
- Ahora es el turno de crear los manuales del programa. dh_make nos crea diferentes plantillas por si todavia no tenemos nuestros propios manuales.
Las plantillas son:
- manpage.1.ex
- manpage.sgml.ex
- manpage.xml.ex
Son los tres formatos soportados por los ficheros man. Como podeis ver las plantillas siempre acaban con la extensión .ex.
El guión de shell de debhelper que instala los manuales es dh_installman y está activado por defecto en el fichero debian/rules. Los únicos pasos que hemos de seguir son editar alguna de las plantillas, poner un nombre adecuado al fichero (típicamente 'nomcomando.seccion) y crear un fichero debian/manpages con la lista de ficheros manual. Los pasos a seguir:
Copiamos la plantilla:
$ cp debian/manpage.1.ex debian/echod.1
Y editamos el manual para añadir la documentación a nuestro gusto:
$ gedit debian/echod.1 &
Y editamos el manual. Una vez editado ejecutamos:
$ gedit debian/manpages &
Añadir la línea:
debian/echod.1
Si no tocamos la plantilla el resultado final será:
$ man echod
ECHOD(SECTION)
ECHOD(SECTION)
NAME
echod - program to do something
SYNOPSIS
echod [options] files...
bar [options] files...
DESCRIPTION
This manual page documents briefly the echod and bar commands.
echod is a program that...
OPTIONS
These programs follow the usual GNU command line syntax, with long options starting with two dashes (‘-’). A summary of options is
included below. For a complete description, see the Info files.
-h, --help
Show summary of options.
-v, --version
Show version of program.
SEE ALSO
bar(1), baz(1).
The programs are documented fully by The Rise and Fall of a Fooish Bar, available via the Info system.
AUTHOR
echod was written by <upstream author>.
This manual page was written by Sergi Tur Badenas <sergi.tur@upc.edu>, for the Debian project (but may be used by others).
juny 8, 2007
ECHOD(SECTION)
- Finalmente y para ilustrar el uso de Debconf vamos a crear los ficheros necesarios para pedir al usuario que instala nuestro dominio, qué puerto quiere utilizar y guardaremos este puerto en el fichero /etc/echod/port.
Lo primero que tenemos que hacer es crear el fichero debian/templates. Este fichero contiene las plantillas de interfaz con el usuario.
$ gedit debian/templates &
Un plantilla sencilla puede ser la siguiente:
Template: echod/port Type: string Default: 8001 Description: Port Number: Please enter the port number for echod. Description-es.UTF-8: por favor introducir el puerto del servidor echod Description-ca.UTF-8: Por favor introducir el puerto del servidor echod
Esta plantilla se encarga de preguntar a los usuarios el número de puerto. Si estais interesados en hacer plantillas más complejas habría que consultar el apartado Templates de la especificación de Debconf y consultar el manual debconf-devel.
El segundo paso es crear el fichero debian/config:
$ gedit debian/config
# Source debconf library.
. /usr/share/debconf/confmodule
db_version 2.0
#Establecemos que durante la configuración se pueda ir atrás con el botón cancelar
db_capb backup
#Establecemos nuestros templates a no vistos para que debconf siempre los muestre
db_fset echod/port seen false
db_fset echod/notconfigured seen false
STATE=1
while [ "$STATE" != 0 -a "$STATE" != 2 ]
do
case "$STATE" in
1)
# Preparamos el template echod/port
db_input critical echod/port || true
#lo mostramos
if db_go; then
#Controlamos si el valor del puerto está vacio
db_get echod/port || true
if [ ! -z "$RET" ]; then
STATE=2
fi
else
STATE=0
fi
;;
esac
done
#Si el puerto está vacio mostramos un mensaje de error: template echod/notconfigured
if [ "$STATE" = 0 ]; then
db_input critical echod/notconfigured || true
db_go
exit 1
fi
El fichero config solo se encarga del flujo de la interfaz con el usuario. Para este menester, utilizamos las funciones de shell proporcionadas por el fichero /usr/share/debconf/confmodule para comunicarnso con debconf a través de los comandos del protocolo debconf. Si os fijais, el script solo se encarga de llamar a la plantilla echod/port:
y en caso de que cancelemos muestra un mensaje de aviso echod/notconfigured:
El manual de confmodule (man confmodule) nos da información sobre la libreria de debconf para Shell (/usr/share/debconf/confmodule).
Ahora viene la parte más complicada: la lógica de la configuración. En nuestro caso modificaremos el script de mantenimiento postint. dh-make nos ha creado una plantilla para este fichero (debian/postinst.ex) y la aprovecharemos:
$ cp debian/postinst.ex debian/postinst $ gedit debian/postinst &
Una vez hemos copiado la plantilla le añadiremos la función get_config() justo antes del case:
get_config() {
db_get echod/port
port="$RET"
}
handle_config() {
cfile=/etc/echod/port
tempcfile=`tempfile`
cat > $tempcfile <<EOF
${port}
EOF
ucf $tempcfile $cfile
chmod 644 $cfile
}
Y llenaremos el case configure con el siguiente código:
. /usr/share/debconf/confmodule db_version 2.0 # Read debconf get_config db_stop exec 0<&1 handle_config
El fichero ha de quedar igual que este.
Resumiendo, el codigo lee el puerto que hemos introducido, y lo guarda al fichero /etc/echod/port.
El último paso que nos queda es descomentar la línea dh_installdebconf del fichero debian/rules:
# Build architecture-dependent files here.
binary-arch: build install
.....
dh_installdocs
dh_installexamples
# dh_install
# dh_installmenu
dh_installdebconf
# dh_installlogrotate
# dh_installemacsen
Ahora ya está todo preparado y podemos crear nuestro paquete Debian:
$ fakeroot # dpkg-buildpackage # exit
No olvideis el exit si no quereis pensar que estais haciendo cosas como root pero en realidad no (fake root ;-))
Para instalarlo ejecuamos:
$ sudo dpkg -i ../echod_0.1-1_i386.deb
Si queremos reconfigurar:
$ sudo dpkg-reconfigure echod
Si hacemos algún cambio y queremos volver a crear el primer paquete lo tendríamos que desinstalar con:
$ sudo apt-get remove --yes --purge echod
Crear una nueva versión del paquete
Es tan sencillo cómo hacer los cambios que queramos y cambiar de versión con:
$ dch -i
Y notificamos los cambios:
echod (0.1-1ubuntu1) feisty; urgency=low
- Segona Versió:
-- Sergi Tur Badenas <sergi@localhost.localdomain> Wed, 13 Jun 2007 12:13:34 +0200 echod (0.1-1) unstable; urgency=low *Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP> *Primera Versio -- Sergi Tur Badenas <sergi@localhost.localdomain> Fri, 8 Jun 2007 17:11:24 +0200
Y ahora ya podemos crear el nuevo paquete con:
$ fakeroot # dpkg-buildpackage # exit
Como que la prueba la he hecho en un Ubuntu, ahora el nuevo paquete se llama echod_0.1-1ubuntu1_i386.deb:
$ ls -la .. ....... -rw-r--r-- 1 sergi sergi 10883 2007-06-13 12:14 echod_0.1-1ubuntu1.diff.gz -rw-r--r-- 1 sergi sergi 324 2007-06-13 12:14 echod_0.1-1ubuntu1.dsc -rw-r--r-- 1 sergi sergi 673 2007-06-13 12:15 echod_0.1-1ubuntu1_i386.changes -rw-r--r-- 1 sergi sergi 9566 2007-06-13 12:15 echod_0.1-1ubuntu1_i386.deb
Recursos
- Debian Policy Manual
- Guía del Nuevo Mantenedor de Debian
- http://www.us.debian.org/doc/maint-guide/
- http://jon.oxer.com.au/talks/id/30
- http://video.google.com/videoplay?docid=-6726522426109060914
- http://laespiral.org/articulos/making-debian-packages/making-debian-packages.html
- http://www.bairesnortelug.com.ar/2007/03/27/armando-paquetes-para-sistemas-basados-en-debian/
- http://www.linux.com/article.pl?sid=07/02/21/1546215
- http://www.perrier.eu.org/debian/talks/debconf5/tutorial-l10n.pdf
- http://interno.ehas.org/intranet/organizacion/desarrollo-de-software/Creaci_c3_b3nDePaquetesDebian
- http://www.debian.org/doc/packaging-manuals/debconf_specification.html














