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.
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.
Si no tiene las herramientas de compilación asegúrese de obtenerlas antes. Si tampoco tiene instaladas todas las dependencias necesarias, instálelas igualmente.
Instalar herramientas de compilación:
$ sudo apt-get install build-essential
Descargar el paquete «main»:
$ wget -O hello-2.7.tar.gz "http://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz"
Descomprimir el paquete «main»:
$ 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
Iniciar un paquete¶
bzr-builddeb incluye un complemento para crear nuevos paquetes a partir de una plantilla. El complemento es un envoltorio alrededor de la orden dh_make. Ya debería tenerlos instalados si instaló packaging-dev. Ejecute la orden indicando el nombre del paquete, número de versión y la ruta al archivo tar de aguas arriba:
$ sudo apt-get install dh-make
$ 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.
En debian/changelog cambie el número de versión a una versión de Ubuntu: 2.7-0ubuntu1 (versión aguas arriba 2.7, versión Debian 0, versión Ubuntu 1). Cambie también unstable a la versión de desarrollo de Ubuntu actual, como precise
Mucho del trabajo de construcción de paquetes se realiza por una serie de scripts llamados debhelper. El comportamiento exacto de debhelper cambia con cada nueva versión mayor, el archivo «compat» indica a debhelper como qué versión actuar. Generalmente querrá establecerlo a la versión más reciente que es la 8.
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 (>= 8.0.0)
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 commit -m "Initial commit of Debian packaging."
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
Instale el paquete y compruebe que funcione:
$ sudo dpkg --install hello_2.7-0ubuntu1_amd64.deb
Siguientes pasos¶
Incluso si genera el paquete binario .deb, el empaquetado puede contener errores. Muchos errores se pueden detectar automáticamente mediante la herramienta lintian que se puede ejecutar tanto sobre el archivo fuente .dsc de metadatos como sobre el paquete binario .deb:
$ lintian hello_2.7-0ubuntu1.dsc
$ lintian hello_2.7-0ubuntu1_amd64.deb
Se puede encontrar una descripción de los problemas que reporta en el sitio web de lintian lintian website.
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 precise 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> hello_2.7-0ubuntu1.changes
Véase subir para más información.
Puede pedir que se revise en el canal de IRC #ubuntu-motu, o en la lista de correo de MOTU mailing list. También podría existir un equipo más específico al que se lo podría solicitar como el equipo GNU para temas más concretos.
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 está para la tutoría de nuevos y futuros desarrolladores de Debian. Es el lugar en el que puede encontrar un patrocinador que suba su paquete al repositorio.
- Work-Needing and Prospective Packages - Información sobre cómo presentar errores «Intención de empaquetar» y «Petición para empaquetar» así como una lista de ITPs y RFPs abiertos.
- Debian Developer’s Reference, 5.1. New packages- El documento completo es una fuente inestimable para empaquetadores tanto de Ubuntu como de Debian. Esta sección documenta el proceso de envío de nuevos paquetes.
En algunos casos, podría tener sentido ir directamente a Ubuntu antes. Por ejemplo, Debían podría encontrarse en congelación haciendo que sea improbable que su paquete llegue a Ubuntu a tiempo para la próxima emisión. Este proceso está documentado en la sección “New Packages” de la wiki de Ubuntu.