Capítulo 1. Empezando «de la forma correcta».

Tabla de contenidos

1.1. Dinamismo social en Debian
1.2. Programas necesarios para el desarrollo
1.3. Documentos necesarios para el desarrollo
1.4. Dónde pedir ayuda

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://iwawocd.cewmufwd.tk/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:

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 package or with 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:

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:

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:

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:

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.