Ubuntu logo

Packaging Guide

4. Empaquetando nuevo software

A pesar de que hay miles de paquetes en el repositorio de Ubuntu, todavía hay muchos que nadie ha conseguido. Si hay una nueva y excitante porción de software que siente que necesita una exposición más amplia, quizá quiera intentar crear un paquete para Ubuntu o un PPA. Esta guía le acompañará a través de los pasos del empaquetado de nuevo software.

Probablemente quiera leer el artículo Getting Set Up antes para preparar su entorno de desarrollo.

4.1. Comprobar el programa

La primera fase del empaquetado es obtener el archivo tar liberado aguas arriba (llamamos a los autores de las aplicación aguas arriba, «upstream») y comprobar que compila y se ejecuta.

Esta guía le llevará a través del empaquetado de una aplicación sencilla llamada GNU Hello, la cual ha sido publicada en GNU.org.

Download GNU Hello:

$ wget -O hello-2.10.tar.gz "http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz"

Now uncompress it:

$ tar xf hello-2.7.tar.gz
$ cd hello-2.7

Esta aplicación usa el sistema de compilación autoconf, así que debemos ejecutar «./configure» para preparar la compilación.

Esto comprobará las dependencias de compilación necesarias. Como hello es un ejemplo sencillo, build-essential debería proporcionar todo lo que necesitamos. Para programas más complejos, la orden fallará si no tiene las bibliotecas y archivos de desarrollo necesarios. Instale los paquetes necesarios y repita hasta que la orden se ejecute correctamente.:

$ ./configure

Ahora puede compilar el fuente:

$ make

Si la compilación finaliza con éxito puede instalar y ejecutar el programa:

$ sudo make install
$ hello

4.2. Iniciar un paquete

bzr-builddeb includes a plugin to create a new package from a template. The plugin is a wrapper around the dh_make command. Run the command providing the package name, version number, and path to the upstream tarball:

$ sudo apt-get install dh-make bzr-builddeb
$ cd ..
$ bzr dh-make hello 2.7 hello-2.7.tar.gz

Cuando pregunte por el tipo de paquete escriba s para binario simple. Esto importará el código en u n rama y añadirá el directorio de empaquetado debian/. Eche un vistazo al contenido. La mayoría de los archivos que añade son sólo necesarios para paquetes especialistas (como los módulos de Emacs) así que puede comenzar por eliminar los archivos de ejemplo opcionales:

$ cd hello/debian
$ rm *ex *EX

Ahora debería personalizar cada uno de los archivos.

In debian/changelog change the version number to an Ubuntu version: 2.7-0ubuntu1 (upstream version 2.7, Debian version 0, Ubuntu version 1). Also change unstable to the current development Ubuntu release such as trusty.

Mucho del trabajo de compilación de paquetes se hace mediante una serie de scripts llamados debhelper. El comportamiento exacto de debhelper cambia con las nuevas versiones mayores y el archivo de compatibilidad instruye a debhelper sobre la versión como la que debe comportarse. Generalmente querrá establecerla a la versión más reciente, que es la 9.

control contiene todos los metadatos del paquete. El primer párrafo describe el paquete fuente. El segundo y siguientes describen los paquetes binarios a construir. Necesitaremos añadir los paquetes necesarios para compilar la aplicación a Build-Depends:. Para hello, asegúrese de que incluye al menos:

Build-Depends: debhelper (>= 9)

También necesitará rellenar la descripción del programa en el campo Description:.

Debe rellenar copyright para que siga la licencia de los fuentes aguas arriba. Según el archivo hello/COPYING es GNU GPL 3 o superior.

docs contiene cualquier archivo de documentación de aguas arriba que piense que debería ser incluido en el paquete final.

README.source y README.Debian solo son necesarios si su paquete tiene características no estándar. No las tiene, así que se pueden borrar.

source/format se puede dejar como está. Describe el formato de la versión del paquete fuente y debería ser 3.0 (quilt).

rules es el archivo más complejo. Es un Makefile que compila el código y lo convierte en un paquete binario. Afortunadamente la mayor parte del trabajo hoy en día se realiza automáticamente por debhelper 7 así que el objetivo Makefile % universal simplemente ejecuta el script dh que a su vez ejecutará todo lo que haga falta.

Todos estos archivos se explican con más detalle en el artículo resumen del directorio debian.

Finalmente confirme el código en su rama de empaquetado:

$ bzr add debian/source/format
$ bzr commit -m "Initial commit of Debian packaging."

4.3. Construir el paquete

Ahora necesitamos comprobar que el empaquetado compila con éxito el paquete y genera el paquete binario .deb:

$ bzr builddeb -- -us -uc
$ cd ../../

bzr builddeb es una orden para compilar el paquete en su ubicación actual. Los parámetros -us -uc le indicarán que no es necesario firmar con GPG el paquete. El resultado se dejará en ...

Puede ver el contenido del paquete con:

$ lesspipe hello_2.7-0ubuntu1_amd64.deb

Install the package and check it works (later you will be able to uninstall it using sudo apt-get remove hello if you want):

$ sudo dpkg --install hello_2.7-0ubuntu1_amd64.deb

You can also install all packages at once using:

$ sudo debi

4.4. Siguientes pasos

Even if it builds the .deb binary package, your packaging may have bugs. Many errors can be automatically detected by our tool lintian which can be run on the source .dsc metadata file, .deb binary packages or .changes file:

$ lintian hello_2.7-0ubuntu1.dsc
$ lintian hello_2.7-0ubuntu1_amd64.deb

To see verbose description of the problems use --info lintian flag or lintian-info command.

For Python packages, there is also a lintian4python tool that provides some additional lintian checks.

Después de realizar una corrección al empaquetado puede reconstruirlo usando la opción -nc («no clean», sin limpiar) para no tener que compilarlo desde el principio:

$ bzr builddeb -- -nc -us -uc

Después de comprobar que el paquete se compila en local debería asegurarse de que lo hace también en un sistema limpio usando pbuilder. Puesto que se va a subir en breve a un PPA (archivo de paquetes personal), esta proceso de subida deberá ser firmado para permitir a Launchpad que verifique que la carga proviene de usted (puede saber que la carga se firmará porque no se pasan los marcadores -us y -uc a bzr builddeb como se hizo antes). Para firmar su trabajo necesita haber configurado GPG. Si no ha configurado todavía pbuilder-dist o GPG todavía, do so now:

$ bzr builddeb -S
$ cd ../build-area
$ pbuilder-dist trusty build hello_2.7-0ubuntu1.dsc

Cuando esté satisfecho con su paquete deseará que otros lo revisen. Puede subirlo la rama a Launchpad para su revisión:

$ bzr push lp:~<lp-username>/+junk/hello-package

Al subirlo a un PPA se asegurará de que compila y le proporcionará una manera fácil de probar los paquetes binarios para usted y para otros. Necesitará configurar un PPA en Launchpad y luego cargarlo con dput:

$ dput ppa:<lp-username>/<ppa-name> hello_2.7-0ubuntu1.changes

Véase subir para más información.

You can ask for reviews in #ubuntu-motu IRC channel, or on the MOTU mailing list. There might also be a more specific team you could ask such as the GNU team for more specific questions.

4.5. Enviar para su inclusión

Existe varios caminos por los que un paquete puede entrar en Ubuntu. En la mayoría de los casos, ir antes por Debian puede ser la mejor alternativa. De esta forma se asegura de que su paquete llegará al mayor número de usuarios, ya que también estará disponible no solo para Debian y Ubuntu, sino para todos sus derivados también. Estos son algunos enlaces útiles para enviar nuevos paquetes a Debian:

  • Debian Mentors FAQ - debian-mentors is for the mentoring of new and prospective Debian Developers. It is where you can find a sponsor to upload your package to the archive.
  • Work-Needing and Prospective Packages - Information on how to file “Intent to Package” and “Request for Package” bugs as well as list of open ITPs and RFPs.
  • Debian Developer’s Reference, 5.1. New packages - The entire document is invaluable for both Ubuntu and Debian packagers. This section documents processes for submitting new packages.

In some cases, it might make sense to go directly into Ubuntu first. For instance, Debian might be in a freeze making it unlikely that your package will make it into Ubuntu in time for the next release. This process is documented on the “New Packages” section of the Ubuntu wiki.

4.6. Screenshots

Una vez que se ha cargado el paquete a Debian, se recomienda añadir capturas de pantalla para que el usuario pueda ver el aspecto del programa. Estas imágenes pueden cargarse en http://screenshots.debian.net/upload .