Tabla de contenidos
Este documento tratará de describir cómo se construye un paquete Debian GNU/Linux para el usuario común de Debian y para futuros desarrolladores en un lenguaje informal, y con multitud de ejemplos. Hay un antiguo dicho romano que dice, «Longum iter est per preaecepta, breve et efficax per exempla!» (¡Es un largo camino con las reglas, pero corto y eficiente con ejemplos!).
Este documento está actualizado a la versión
jessie
de Debian [1].
Una de las cosas que hace a Debian una de las distribuciones más importantes del mercado es su sistema de paquetes. Aunque hay una gran cantidad de programas disponibles en forma de paquetes de Debian, algunas veces necesitarás instalar programas que no están disponible en este formato. Puede que te preguntes cómo hacer tus propios paquetes y que pienses que quizás ésta es una tarea demasiado difícil. Bueno, si eres un principiante en GNU/Linux, sí es duro, pero si eres un novato, no deberías estar leyendo esto ahora mismo. :-) Necesitas saber algo sobre programación en Unix, pero, desde luego, no tienes que ser un maestro [2].
Sin embargo, hay una cosa que es verdad: para construir y mantener paquetes Debian adecuadamente, necesitarás muchas horas. Para que nuestro sistema trabaje sin errores, nuestros desarrolladores necesitan ser técnicamente competentes y concienzudos.
Si quieres información complementaria sobre cómo construir paquetes lee Sección 1.4, “Dónde pedir ayuda”.
Las nuevas versiones de este documento están en http://www.debian.org/doc/maint-guide/
y en el paquete maint-guide
. Las
traducciones pueden obtenerse en paquetes como maint-guide-es
. Debe tenerse presente que las
traducciones pueden estar desactualizadas.
Como se trata de un tutorial, he optado por explicar cada paso detalladamente en algunos temas importantes. Algunas explicaciones pueden parecerte irrelevantes. Te ruego que seas paciente. También he omitido intencionalmente algunos casos extremos y algunos aspectos sólo se mencionan con la intención de que el documento sea sencillo.
Aquí explico mis observaciones sobre la dinámica social en Debian. Espero que esto te preparará para la interacción con Debian:
Todos somos voluntarios.
No puedes imponer a los demás lo que debe hacerse.
Debes estar motivado para hacer las cosas por ti mismo.
La cooperación amistosa es la fuerza motriz.
Tu contribución no debe estresar a los demás.
Tu contribución es valiosa sólo cuando los demás te lo agradecen..
Debian no es la escuela donde recibir atención automática de los profesores.
Debes ser capaz de aprender muchas cosas por ti mismo.
La atención por parte de otros voluntarios es un recurso muy escaso.
Debian está mejorando constantemente.
Se espera que generes paquetes de alta calidad.
Debes adaptarte al cambio.
Se utilizan distintos nombres para referirse a los roles dentro de Debian:
autor original («upstream author»): para referirse a la persona que ha escrito el código original del programa (o la documentación original en el caso de paquetes de documentación).
desarrollador original («upstream maintainer»): la persona que se encarga de mantener el programa (el código fuente) en la actualidad.
empaquetador (desarrollador) («maintainer»): la persona que se encarga de construir y mantener actualizados paquetes para Debian (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).
patrocinador («sponsor»): la persona (que debe ser un DD o DM, véase más adelante) que transfiere los paquetes elaborados por el desarrollador al archivo de paquetes de Debian (al repositorio de Debian) después de comprobar que el paquete cumple los requisitos exigidos.
mentor: la persona que ayuda a los desarrolladores principiantes a iniciarse en la construcción y mantenimiento de paquetes.
desarrollador de Debian (DD) («Debian Developer»): la persona que es miembro de Debian. Tiene permiso total para transferir paquetes al repositorio oficial de Debian.
empaquetador de Debian (DM) («Debian Maintainer»): la persona que tiene permiso limitado para transferir paquetes al repositorio oficial de Debian.
No puedes convertirte en desarrollador oficial de Debian (DD) de la noche a la mañana porque hace falta algo más que habilidades técnicas. No te sientas desilusionado por esto. Aún puedes subir tu paquete, si es útil a otras personas, como empaquetador a través de un patrocinador o un empaquetador de Debian.
Ten en cuenta que no es necesario construir un paquete nuevo para poder convertirte en desarrollador oficial de Debian. Una opción para ser desarrollador oficial es contribuir al mantenimiento de los paquetes ya existentes en la distribución. Hay muchos paquetes esperando un buen responsable (véase Sección 2.2, “Elige el programa” ).
Dado que nos concentramos sólo en los aspectos técnicos del mantenimiento de paquetes en este documento, consulta las siguientes referencias para aprender cómo funciona Debian y cómo puedes participar:
Debian: 17 años de software libre, "meritocracia" y democracia (diapositivas de introducción en inglés)
¿Cómo puedo ayudar a Debian? (documentación oficial)
Las Preguntas Frecuentes de Debian GNU/Linux FAQ, capítulo 13 - 'Contribuir al proyecto Debian' (documentación semi-oficial)
Debian Wiki, HelpDebian (documentación complementaria)
Sitio web de nuevos miembros de Debian (documentación oficial)
PUF de mentores en Debian (documentación complementaria)
Antes de empezar, debes asegurarte que tienes instalados algunos paquetes
adicionales necesarios para el desarrollo. Observa que la lista no contiene
paquetes marcados como esencial
o
requerido
- al dar por supuesto que ya los tienes
instalados.
Los siguientes paquetes vienen en una instalación estándar de Debian, así
que probablemente ya los tengas (junto con los paquetes de los que
dependen). Aún así, deberías comprobarlo ejecutando aptitude show
o con nombre_del_paquete
dpkg
-s
.
nombre_del_paquete
El paquete imprescindible para el desarrollo es build-essential
. Al instalarlo,
también se instalaran otros paquetes requeridos,
consiguiendo una instalación básica para la construcción de paquetes.
Para la construcción de algunos paquetes esto seria suficiente, pero hay otros paquetes que, no siendo esenciales en general para la construcción de nuevos paquetes, puede ser útil tener instalados o, incluso, necesarios para el paquete que estás construyendo:
autoconf
, automake
y autotools-dev
- muchos programas nuevos usan
ficheros de configuración y ficheros Makefile
que se
procesan con la ayuda de programas como éstos (véase info
autoconf
, info automake
). El paquete
autotools-dev
permite mantener
versiones actualizadas de los archivos autoconf y automake y tiene
documentación para usar eficientemente ese tipo de archivos.
dh-make
y debhelper
- dh-make
es necesario para construir el esqueleto
de nuestro paquete ejemplo, y se usarán algunas de las herramientas de
debhelper
para construir los
paquetes. Aunque no son imprescindibles para la construcción de paquetes se
recomiendan encarecidamente para nuevos
desarrolladores. Hacen el proceso mucho más fácil al principio, y más fácil
de controlar en el futuro (véase dh_make(8), debhelper(1)) [3].
El nuevo debmake
puede utilizarse
como alternativa al sistema estándar dh-make
. Tiene más funcionalidades y una
extensa documentación con ejemplos en formato HMTL.
devscripts
- este paquete contiene
algunos guiones útiles para los desarrolladores, pero no son necesarios para
construir paquetes. Vale la pena mirar los paquetes recomendados y
sugeridos por este paquete (véase /usr/share/doc/devscripts/README.gz
).
fakeroot
- esta utilidad te permite
emular al usuario administrador («root»), lo cual es necesario para ciertas
partes del proceso de construcción (véase fakeroot(1)).
file
- este útil programa puede
determinar de qué tipo es un fichero (véase file(1)).
gfortran
- el compilador GNU de
Fortran 95, necesario si el programa está escrito en Fortran (véase
gfortran(1)).
git
- este paquete instala el
popular sistema de control de versiones, diseñado para hacer el seguimiento
de proyectos grandes con eficacia y rapidez; se utiliza para proyectos de
código libre importantes como es el caso del núcleo («kernel») de Linux
(véase git(1) y git Manual
(/usr/share/doc/git-doc/index.html
)).
gnupg
- herramienta que te permite
firmar digitalmente los paquetes. Esto es
especialmente importante si quieres distribuir tu paquete a otras personas,
y ciertamente, tendrás que hacerlo cuando tu trabajo vaya a incluirse en la
distribución de Debian (véase gpg(1)).
gpc
- el compilador GNU de Pascal,
necesario si el programa está escrito en Pascal. Merece la pena mencionar
aquí fp-compiler
, un compilador
libre de Pascal, que también es bueno en esta tarea (véase gpc(1),
ppc386(1)).
lintian
- este es el programa que
comprueba los paquetes de Debian, puede indicarte muchos de los errores
comunes después de construir un paquete, y explica los errores encontrados
(véase lintian(1) y Manual
de usuario de Lintian)
patch
- esta utilidad es muy
práctica para modificar el original de un archivo a partir de un archivo de
diferencias (elaborado por el programa diff) produciendo
un archivo parcheado (véase patch(1)).
patchutils
- este paquete contiene
programas para trabajar con los «parches» como lsdiff,
interdiff y filterdiff.
pbuilder
- este paquete contiene
programas para generar y mantener entornos chroot. Al
construir paquetes Debian en estos entornos chroot se
verifica que las dependencias son las adecuadas y se evitan fallos al
construir desde el código fuente (FTBFS de «Fails To Build From Source»).
Véase pbuilder(8) y pdebuild(1).
perl
- Perl es uno de los lenguajes
interpretados para hacer guiones (o «scripts») más usados en los sistemas
Un*x de hoy en día, comúnmente se refiere a él como la «navaja suiza de
Unix» (véase perl(1)).
python
- Python es otro de los
lenguajes interpretados para hacer guiones (o «scripts») en Debian debido a
la combinación de su poder y sintaxis clara (véase python(1)).
quilt
- este paquete ayuda a aplicar
modificaciones («parches») y hacer el seguimiento de los cambios
realizados. Aplica las modificaciones ordenadamente en pila, y es posible
aplicar, deshacer y actualizar las modificaciones fácilmente recorriendo la
pila (véase quilt(1) y
/usr/share/doc/quilt/quilt.pdf.gz
.)
xutils-dev
- algunos programas,
normalmente aquellos hechos para X11, también usan programas para generar
Makefile
ejecutando un conjunto de funciones de macro
(véase imake(1), xmkmf(1)).
Las breves descripciones dadas anteriormente sólo sirven para introducirte a lo que hace cada paquete. Antes de continuar, por favor, lee la documentación de cada programa, al menos para su uso normal. Puede parecerte algo duro ahora, pero más adelante estarás muy contento de haberla leído.
Por último, la documentación que se indica a continuación es de gran importancia y debería leerse junto con este documento:
debian-policy
- el manual de normas de Debian incluye la
descripción de la estructura y contenidos del archivo, ciertas notas sobre
el diseño del sistema operativo, el Filesystem Hierarchy
Standard («FHS», que explica dónde deberían estar cada fichero y
directorio), y, lo más importante para ti, describe los requisitos que debe
satisfacer cada paquete para ser incluido en la distribución (véase la
copias locales en /usr/share/doc/debian-policy/policy.pdf.gz
y
/usr/share/doc/debian-policy/fhs/fhs-2.3.pdf.gz
).
developers-reference
- la referencia del desarrollador de Debian
para todos los temas no específicamente relacionados con los detalles
técnicos de cómo empaquetar, tales como la estructura del archivo (o
repositorio de Debian), cómo renombrar, abandonar, adoptar paquetes, cómo
hacer NMU («Non-Maintainer Uploads», o envíos por personas distintas del
desarrollador), como gestionar los errores que los usuarios envían, buenas
prácticas de empaquetado, cómo y cuando enviar los paquetes, etc. (véase la
copia local en /usr/share/doc/developers-reference/developers-reference.pdf
).
Por último, la documentación que se indica a continuación es de gran importancia y debería leerse junto con este documento:
Tutorial de «Autotools» contiene un tutorial muy bueno sobre el sistema de compilación GNU conocido como «GNU Autotools» cuyos componentes más importantes son «Autoconf», «Automake», «Libtool», y «gettext»
gnu-standards
- este paquete
contiene dos documentos del proyecto GNU: «GNU
Coding Standards», y «Information for
Maintainers of GNU Software». Aunque no se exige su cumplimiento en
Debian, son útiles como orientación y sentido común (véase las copias
locales en /usr/share/doc/gnu-standards/standards.pdf.gz
y
/usr/share/doc/gnu-standards/maintain.pdf.gz
).
Si este documento contradice en algún aspecto a los documentos mencionados
anteriormente, prevalecen estos últimos. Por favor, envía un informe de
error del paquete maint-guide
utilizando la orden reportbug.
El siguiente documento es un tutorial alternativo que puedes leer a la vez que el presente documento.
Antes de decidirte a plantear alguna cuestión en algún lugar público, lee la documentación:
archivos en
/usr/share/doc/
para
cada uno de los paquetes
package
contenidos de man
para todos los comandos
pertinentes
command
contenidos de info
para todos los comandos
pertinentes
command
contenidos de debian-mentors@lists.debian.org archivo de la lista de correo
contenidos de debian-devel@lists.debian.org mailing list archive
Considera el uso eficaz de los motores de búsqueda en la web incluyendo
site:lists.debian.org
en la cadena de búsqueda, para
limitar el dominio.
Construir un paquete pequeño es una buena forma de aprender los detalles del mantenimiento de paquetes. Inspeccionar paquetes bien mantenidos es la mejor forma de aprender cómo otros mantienen paquetes.
Si todavía tienes preguntas acerca de la construcción de paquetes a las que no puedes encontrar respuesta en la documentación disponible y los recursos web, puedes formularlas interactivamente:
debian-mentors@lists.debian.org mailing list. (Esta lista de correo es para los principiantes.)
debian-devel@lists.debian.org mailing list. (Esta lista de correo es para expertos.)
IRC tal como
#debian-mentors
.
Los equipos se centran en un conjunto específico de paquetes.(La lista completa está en https://wiki.debian.org/Teams)
Listas de correo en un idioma concreto como debian-devel-{french,italian,portuguese,spanish}@lists.debian.org o bien debian-devel@debian.or.jp. (La lista completa está disponible en https://lists.debian.org/devel.html and https://lists.debian.org/users.html)
Los desarrolladores de Debian con más experiencia te ayudaran con gusto, si haces las preguntas después realizar el esfuerzo requerido.
Cuando recibas un aviso de fallo (sí, avisos de fallos, ¡de verdad!) sabrás que es el momento de indagar en el Sistema de seguimiento de fallos de Debian y leer su documentación para poder tratar los informes de forma eficiente. Te recomiendo la lectura de la Referencia del Desarrollador, en particular el capítulo de «Referencia del desarrollador sección 5.8 - Manejo de fallos» («Handling Bugs»).
Aunque todo funcione bien, es el momento de cruzar los dedos. ¿Por qué? Por que en sólo unas horas (o días) usuarios de todo el mundo empezarán a usar tu paquete, y si cometiste algún error crítico centenares de usuarios furiosos de Debian te bombardearán con correos... sólo bromeaba :-)
Relájate y prepárate para recibir informes de fallos, porque hay mucho más trabajo que realizar antes de que tu paquete cumpla las Normas de Debian (una vez más lee la documentación real para más detalles). ¡Buena suerte!
[1] El documento asume que estás utilizando la versión
jessie
. Si quieres utilizar este documento con
una versión anterior (incluidas versiones anteriores de Ubuntu u otras)
debes instalar (como mínimo) la versión «backport» de los paquetes
dpkg
y debhelper
.
[2] Puedes aprender las operaciones básicas del sistema Debian en Debian Reference. Ese documento también trata algunos aspectos sobre programación en UNIX.
[3] Hay varios paquetes similares pero más específicos como dh-make-perl
, dh-make-php
, etc.