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

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

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.

## 1.1. Dinamismo social en Debian

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)

## 1.2. Programas necesarios para el desarrollo

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:

- `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.

## 1.3. Documentos necesarios para el desarrollo

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:

- Debian Packaging Tutorial

## 1.4. Dónde pedir ayuda

Before you decide to ask your question in some public place, please read this fine documentation:

- archivos en `/usr/share/doc/`package`` para cada uno de los paquetes

- contenidos de `man `command`` para todos los comandos pertinentes

- contenidos de `info `command`` para todos los comandos pertinentes

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

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.

Guía del nuevo desarrollador de Debian |  | Capítulo 2. Primeros pasos