El documento asume que estás utilizando la versión squeeze. Si
quieres utilizar este documento con la versión lenny, debes
instalar (como mínimo) los paquetes dpkg
y
debhelper
.
Hay varios paquetes similares pero más específicos como
dh-make-perl
, dh-make-php
, etc.
N. del t.: hay una cierta ambigüedad en la traducción de «maintainer» por desarrollador puesto que se puede confundir con la traducción de «Debian Developer» (desarrollador que pertenece al proyecto) y de «upstream maintainer» (desarrollador del programa original).
N. de t.: el original utiliza el acrónimo inglés RTFM (traducido como LEJM) que es más «expresivo».
Dicho esto, hay, por supuesto, nuevos programas que vale la pena empaquetar para Debian.
N. del T.: el inglés es el idioma vehicular de Debian. Debes utilizar este
idioma en los mensajes que envíes a las listas de correo (aun cuando sepas que
el destinatario hable el español). No obstante, hay listas de correos
especificas para muchos idiomas. Puedes ver las listas actuales en http://lists.debian.org/
. También
te será de utilidad leer http://www.debian.org/MailingLists/
.
Puedes identificar el formato de archivo utilizando la herramienta
file
cuando no es suficiente con la extensión de fichero.
Ten en cuenta que el programa ya ha sido empaquetado previamente. La versión actual 0.1.5.3 ha cambiado sustancialmente de la versión 0.9.12 que se utiliza en los ejemplos mostrados a continuación.
Véase Autotools
Tutorial
y
/usr/share/doc/autotools-dev/README.Debian.gz
.
La versión del programa puede compararse ejecutando en el terminal dpkg
--compare-versions ver1 op ver2.
Véase dpkg(1)
manpage.
El texto mostrado a continuación da por supuesto que estás ejecutando Bash
como tu intérprete de línea de órdenes. Si utilizas otros intérpretes,
como Z shell, deberás utilizar sus correspondientes ficheros de configuración
en lugar de ~/.bashrc
.
Si el archivo del código fuente original ya contiene un directorio
debian
con su contenido, ejecuta la orden dh_make
con
la opción --addmissing. Así se actualizará el contenido
aportado por el autor para tu paquete Debian.
Se ofrecen varias opciones aquí: "s" para un binario,
"i" para un paquete independiente de la arquitectura
(sólo código fuente o bien documentación), "m" para
más de un binario, "l" para una biblioteca,
"k" para un módulo del núcleo («kernel»),
"n" para un parche del núcleo, y
"b" para paquetes «cdbs
«. Este documento
se centra en el uso del paquete debhelper
con la orden
dh
para la creación de paquetes con un binario y trata solo
parcialmente su uso en la creación de paquetes independientes de la
arquitectura y con más de un binario. El paquete cdbs
ofrece
guiones alternativos a la orden dh
y su uso queda fuera de este
documento.
Para deshabilitar la configuración ejecute el programa quilt
con
la opción "quilt --quiltrc /dev/null ...".
El directorio debian/patches
debería haberse creado en la
anterior ejecución de dh_make
. Sólo debes crearlo si no existe
o bien si estas actualizando un paquete.
Para paquetes con más de un archivo binario, la orden
dh_auto_install
utiliza como directorio temporal
debian/tmp
mientras que la orden dh_install
con la
ayuda de los archivos debian/paquete-1.install
y
debian/paquete-2.install
distribuirá el contenido del
directorio debian/tmp
en los directorios temporales
debian/paquete-1
y
debian/package-2
para construir paquetes
*.deb
para más de un binario.
Se trata solo de un ejemplo del contenido del archivo Makefile
.
Si el archivo Makefile
se construye con la orden
./configure
, el procedimiento correcto es ejecutar
./configure
desde la orden dh_auto_configure
con las
opciones predeterminadas incluyendo --prefix=/usr.
El autor es consciente que este no es el mejor ejemplo ahora que el paquete
libncurses
incluye un enlace simbólico libcurses.so
pero no tenia a mano un ejemplo mejor. Cualquier sugerencia será bienvenida
:-)
Este caso esta documentado en Debian Policy
Manual, Footnotes 48
. Esto se debe al funcionamiento de
dpkg-buildpackage
, no al uso de la orden dh
en el
archivo debian/rules
. Esto también se aplica al «auto build
system for Ubuntu»
.
N. del T.: estas descripciones van en inglés. Aún así hay un proyecto en
marcha para facilitar la traducción de las traducciones (http://www.debian.org/intl/l10n/ddtp.es.html
).
N. del T.: las normas actuales de Debian indican que los documentos aquí
citados estén escritos en inglés, al ser el idioma oficial del proyecto, por
lo que no se traducen en este documento. Si no estas familiarizado con el
texto de las licencias, tal vez deberías leerlas. Encontrarás las versiones
originales en http://www.gnu.org/licenses/licenses.es.html
y las traducciones en http://www.gnu.org/licenses/translations.es.html
.
Muchas personas utilizan un nombre de distribución erróneo como UNRELEASED para prevenir que el paquete sea transferido al repositorio accidentalmente al actualizar un sistema VCS compartido.
Este objetivo es utilizado por dpkg-buildpackage como en Reconstrucción completa, Sección 6.1.
Este objetivo es utilizado por dpkg-buildpackage -B como en Autobuilder, Sección 6.2.
Este objetivo es utilizado por dpkg-buildpackage -A.
Aquí se utilizan las nuevas funciones V7 de debhelper
que se
explican en Not Your
Grandpa's Debhelper
presentadas en la Debconf9 por el autor de
debhelper
. En lenny, dh_make
construía
un archivo rules
más complejo con el listado de todas las
órdenes dh_*
necesarias para cada objetivo y los mantenía en el
estado del empaquetado inicial. La nueva orden dh
es simple y nos
libera de esta restricción. Aún así, es posible personalizar el archivo con
objetivos override_dh_*. Véase Personalización del archivo rules
, Sección
4.4.3. Se basa únicamente en el paquete debhelper
y no se
debe confundir con la construcción de paquetes ligada al paquete
cdbs
.
Puedes comprobar las secuencias de órdenes dh_*
invocadas por
cada objetivo ejecutando dh --no-act
objetivo o bien debian/rules -- '--no-act
objetivo' sin que se ejecuten realmente.
Se asume que el paquete python-support
está instalado en el
sistema.
Para una descripción completa de la función de cada dh_*
y de
sus opciones, lee los manuales respectivos así como la documentación de
debhelper
.
La orden permite otros sistemas de compilación como setup.py
y
que pueden listarse con la ejecución de dh_auto_build --list
desde el directorio de las fuentes del paquete.
En realidad busca el primero de los objetivos test o
check en el archivo Makefile
y lo ejecuta.
Si un paquete instala el archivo
/usr/share/perl5/Debian/Debhelper/Sequence/nombre_archivo.pm
puedes activar la función adaptada con dh --with
nombre_archivo $@.
Es preferible el uso de la orden dh_pysupport
respecto a la orden
dh_pycentral
. No uses la orden dh_python
.
N. de t.:«Dynamic Kernel Module Support» es un entorno que permite la compilación de módulos del núcleo («kernel») de Linux
En lenny, cuando querías cambiar el comportamiento de un programa
dh_*
tenías que encontrar la línea adecuada en el archivo
rules
y cambiarla.
El paquete gentoo
utiliza el sistema de compilación GNU, también
conocido por «Autotools». Véase http://es.wikipedia.org/wiki/GNU_build_system
.
dh_auto_build
sin argumentos ejecutará el primer objetivo del
archivo Makefile
.
Los archivos debian/changelog
y debian/NEWS
siempre
se instalan automáticamente. También se busca el archivo de cambios del
autor para cambiar el nombre a minúsculas y por su coincidencia con
changelog
, changes
, changelog.txt
, y
changes.txt
.
Esto reemplaza la orden obsoleta dh_movefiles(1)
que se
configuraba con el archivo files
.
Si el programa no tiene página info
pero contiene archivos de
documentación en el directorio /usr/share/package
,
deberás editar manualmente la página de manual construida por
help2man
.
Aunque aquí he utilizado la expresión «Bash» abreviada
{post|pre}{inst|rm}
para referirme a estos archivos, te recomiendo
que uses la forma POSIX («non-Bash») pura para estos guiones del
desarrollador de forma que conserven el mayor grado de compatibilidad.
Pista de t.: conéctate a Internet, e intenta ejecutar el programa «uscan» en el directorio donde has creado el fichero. Consulta la página de manual para más detalles.
Véase DebSrc3.0
para un
resumen informativo sobre los formatos 3.0 (quilt) y 3.0
(native).
Actualmente, este nuevo formato también permite trabajar con múltiples archivos «tar» fuente y otros sistemas de compresión. Estas funciones están fuera del objetivo de este documento.
Se han propuesto y se están utilizando otros métodos de aplicación de los
parches en Debian. El sistema quilt
es el preferido. Otros
sistemas son dpatch
, dbs
, cdbs
, etc. La
mayoría de ellos conservan los parches en archivos en el directorio
debian/patches
.
Si has solicitado a un patrocinador que transfiera el paquete al repositorio, este sistema de separación y documentación de los cambios es muy importante para facilitar la revisión del paquete por el que patrocina el paquete.
Puedes evitar la aplicación automática de las modificaciones por
quilt
en los paquetes con formato 3.0 (quilt) al
final de la extracción con la opción --skip-patches. También
puedes deshacer las modificaciones al finalizar la extracción con la
ejecución de quilt pop -a.
El funcionamiento del sistema actual de compilación automática es más complicado que lo expuesto en este documento. Muchos detalles quedan fuera de los objetivos de este documento.
Contrariamente a modo de funcionamiento del paquete pbuilder
(que
se tratará más adelante), el entorno chroot
del paquete
sbuild
utilizado por el sistema automático no tiene una
instalación mínima de paquetes del sistema y puede dejar muchos paquetes
instalados.
Dado que el paquete pbuilder
está evolucionando, debería
comprobar la situación de la configuración consultando la última
documentación oficial disponible.
Se supone que la variable de entorno
HOOKDIR="/var/cache/pbuilder/hooks" ya está
configurada. Puedes consultar otros ejemplos en
/usr/share/doc/pbuilder/examples
.
Hay algunas restricciones para estas actualizaciones de tu paquete stable.
Aquí tienes algunos recursos disponibles en la red, dirigidos a usuarios expertos:
Construcción de paquetes Debian con git-buildpackage
en
/usr/share/doc/git-buildpackage/manual-html/gbp.html
.
«Usando
TpGit para generar series de parches quilt en el empaquetado
Debian»
N.de t.: los títulos están traducidos pero los documentos están en inglés.
No es necesario añadir la opción -i -I --show-overrides si la
has incluido en la configuración en /etc/devscripts.conf
o
~/.devscripts
según se explicó en La orden debuild
, Sección
6.4.
Tal vez el paquete dput
tenga más funcionalidades y sea más
popular. Utiliza el archivo /etc/dput
para la configuración
global y el archivo ~/.dput.cf
para la configuración del usuario.
También incorpora la asistencia para Ubuntu.
Véase ftp://ftp.upload.debian.org/pub/UploadQueue/README
.
Como alternativa, puedes usar la orden dcut
del paquete
dput
.
Para escribir la fecha y hora en el formato requerido, debes utilizar LANG=C date -R.
Si la versión anterior del paquete está empaquetado en el antiguo formato 1.0, puedes hacer lo mismo ejecutando zcat /ruta/a/nombre_paquete_versión_anterior.diff.gz|patch -p1 desde el directorio de las fuentes de la nueva versión.
Si la orden uscan
descargar las fuentes pero no ejecuta la orden
uupdate
, debes corregir el archivo debian/watch
añadiendo debian uupdate al final de la URL del archivo.
Si quien patrocina tu paquete u otros desarrolladores hacen objeciones a la actualización del formato del paquete, no vale la pena empeñarse en argumentar a favor. Hay otras cosas más importantes que atender.
En el paquete cdbs
(versión 0.4.74), hay algunos comentarios
negativos sobre el archivo rules
construido por la orden
dh_make
al utilizar sistemas distintos a cdbs
. No te
preocupes. Esto solo afecta a la versión en lenny: entonces se
generaban objetivos con una larga lista de órdenes dh_*
.
Puedes fragmentar el archivo nombre_paquete.diff
en varios
archivos de parches utilizando la orden splitdiff
.
Guía del nuevo desarrollador de Debian
versión 1.2.25, 2010-12-22 12:44:34 UTCjoy-mg@debian.org
jfs@debian.org
ender@debian.org
ana@debian.org
fcocuadrado@gmail.com
tangram.peces@gmail.com