Tabla de contenidos
The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.
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!).
This document is made available for the Debian Buster
release since this offers many translations. This document will be dropped
in the following releases since contents are getting outdated. [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.
If you need some help with packaging, please read 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.
The following packages come with the standard Debian installation, so you
probably have them already (along with any additional packages they depend
on). Still, you should check them with aptitude show
or with package
dpkg -s
.
package
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 en formato HTML con ejemplos para la construcció de
paquetes en debmake-doc
.
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
- this utility lets you
emulate being root, which is necessary for some parts of the build process.
(See 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
- a tool that enables you to
digitally sign packages. This is especially important
if you want to distribute packages to other people, and you will certainly
be doing that when your work gets included in the Debian distribution. (See
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
- this is the Debian package
checker, which lets you know of any common mistakes after you build the
package and explains the errors found. (See lintian(1), Lintian User's Manual.)
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
- this package contains
programs which are used for creating and maintaining a
chroot environment. Building a Debian package in this
chroot environment verifies the proper build dependency
and avoids FTBFS (Fails To Build From Source) bugs. (see pbuilder(8) and 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-3.0.pdf.gz
).
developers-reference
- the Debian Developer's Reference describes
all matters not specifically about the technical details of packaging, like
the structure of the archive, how to rename, orphan, or adopt packages, how
to do NMUs, how to manage bugs, best packaging practices, when and where to
upload, etc. (See the local copy of
/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:
Autotools Tutorial provides a very good tutorial for the GNU Build System known as the GNU Autotools, whose most important components are Autoconf, Automake, Libtool, and 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.
The following is an alternative tutorial document that you may read along with this document:
Before you decide to ask your question in some public place, please read this fine documentation:
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 [email protected] archivo de la lista de correo
contenidos de [email protected] 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:
[email protected] mailing list. (Esta lista de correo es para los principiantes.)
[email protected] 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 [email protected]. (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»).
Even if it all worked well, it's time to start praying. Why? Because in just a few hours (or days) users from all around the world will start to use your package, and if you made some critical error you'll get mailbombed by numerous angry Debian users… Just kidding. :-)
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.