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

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.

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 nombre_del_paquete o con 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].

    The new debmake may be used as the alternative to the standard dh-make. It does more and comes with HTML documentation with extensive packaging examples.

  • 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 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 - 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:

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.

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»).

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.