guia del nuevo desarrollador de debian

59
Guía del nuevo desarrollador de Debian Josip Rodin <[email protected]> Traducido por: Javier Fernández-Sanguino Peña <[email protected]> Traducido por: David Martínez <[email protected]> Traducido por: Ana Beatriz Guerrero López <[email protected]> version 1.2.11, 12 de enero de 2007.

Upload: hervymay-monsalve

Post on 03-Oct-2015

223 views

Category:

Documents


0 download

DESCRIPTION

Software Libre

TRANSCRIPT

  • Gua del nuevo desarrollador de DebianJosip Rodin

    Traducido por: Javier Fernndez-Sanguino Pea Traducido por: David Martnez

    Traducido por: Ana Beatriz Guerrero Lpez

    version 1.2.11, 12 de enero de 2007.

  • Nota de Copyright

    Copyright 1998-2002 Josip Rodin.

    Copyright 2005-2007 Osamu Aoki.Translation Copyright 1999, 2000, 2001, 2007 Javier Fernndez-Sanguino Pea, DavidMartnez y Ana Guerrero Lpez.

    Este documento puede utilizarse en los trminos descritos en la Licencia Pblica GNU versin2 o posterior.

    Este documento se ha escrito usando estos dos documentos como ejemplo:

    Making a Debian Package (AKA the Debmake Manual), copyright 1997 Jaldhar Vyas.

    The New-Maintainers Debian Packaging Howto, copyright 1997 Will Lowe.

  • Indice general

    1. Empezando de la forma correcta. 1

    1.1. Programas que necesitas para el desarrollo . . . . . . . . . . . . . . . . . . . . . . 1

    1.2. Desarrollador oficial de Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.3. Ms informacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2. Primeros pasos 5

    2.1. Elige el programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    2.2. Obtn el programa y prubalo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2.3. Nombre del paquete y versin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2.4. Debianizacin inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    3. Modificar las fuentes 9

    3.1. Instalacin en un subdirectorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    3.2. Bibliotecas diferentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    4. Las cosas necesarias bajo debian/ 13

    4.1. El fichero control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    4.2. El fichero copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    4.3. El fichero changelog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    4.4. El fichero rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    5. Otros ficheros en el directorio debian/. 25

    5.1. README.debian (LEME.debian, N. del T.) . . . . . . . . . . . . . . . . . . . . . 25

    5.2. conffiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    5.3. cron.d.ex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

  • NDICE GENERAL II

    5.4. dirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    5.5. docs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    5.6. emacsen-*.ex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    5.7. init.d.ex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    5.8. manpage.1.ex, manpage.sgml.es . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    5.9. menu.ex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    5.10. watch.ex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    5.11. ex.package.doc-base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    5.12. postinst.ex, preinst.ex, postrm.ex y prerm.ex . . . . . . . . . . . . . . . . . . . . . 30

    6. Construir el paquete 31

    6.1. Reconstruccin completa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    6.2. Reconstruccin rpida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    6.3. La orden debuild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    6.4. Los sistemas dpatch y quilt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    6.5. Incluir orig.tar.gz para subir . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    7. Cmo comprobar tu paquete para encontrar fallos 35

    7.1. Los paquetes lintian y linda . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    7.2. La orden mc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    7.3. La orden debdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    7.4. La orden interdiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    7.5. La orden debi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    7.6. El paquete pbuilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    8. Enviar el paquete 39

    8.1. Enviar al archivo de Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    8.2. Enviar a un archivo privado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    9. Actualizar el paquete 43

    9.1. Nueva revisin Debian del paquete . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

    9.2. Nueva versin del programa fuente (bsico) . . . . . . . . . . . . . . . . . . . . . 43

    9.3. Nueva versin de las fuentes (realista) . . . . . . . . . . . . . . . . . . . . . . . . . 44

  • NDICE GENERAL III

    9.4. El archivo orig.tar.gz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

    9.5. La orden cvs-buildpackage y similares . . . . . . . . . . . . . . . . . . . . . . 46

    9.6. Verificar actualizaciones del paquete . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    10. Dnde pedir ayuda 49

    A. Ejemplos. 51

    A.1. Ejemplo de empaquetado sencillo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    A.2. Ejemplo de empaquetado con dpatch y pbuilder . . . . . . . . . . . . . . . . . 51

  • NDICE GENERAL IV

  • 1Captulo 1

    Empezando de la forma correcta.

    Este documento tratar de describir cmo se construye un paquete Debian GNU/Linux para elusuario comn de Debian y para futuros desarrolladores en un lenguaje informal, y con mul-titud de ejemplos. Hay un antiguo dicho romano que dice, Longum iter est per preaecepta, breveet efficax per exempla! (Es un largo camino con las reglas, pero corto y eficiente con ejemplos!)

    Una de las cosas que hace a Debian una de las distribuciones ms importantes del mercado essu sistema de paquetes. Aunque hay una gran cantidad de programas disponibles en formade paquetes de Debian, algunas veces necesitars instalar programas que no estn disponibleen este formato. Puede que te preguntes cmo hacer tus propios paquetes y que pienses quequizs sta es una tarea demasiado difcil. Bueno, si eres un principiante en Linux, s es duro,pero si eres un novato, no deberas estar leyendo esto ahora mismo. :-) Necesitas saber algosobre programacin en Unix, pero, desde luego, no tienes que ser un maestro.

    Sin embargo, hay una cosa que es verdad: para crear y mantener paquetes Debian adecuada-mente, necesitars muchas horas. Para que nuestro sistema trabaje sin errores, nuestros desa-rrolladores necesitan ser tcnicamente competentes y concienzudos.

    Este documento explicar cada pequeo paso (al principio quizs irrelevantes), te ayudar acrear tu primer paquete, ganar alguna experiencia en construir prximas versiones de l, yquizs otros paquetes despus.

    Se pueden obtener versiones nuevas de este documento en lnea en http://www.debian.org/doc/maint-guide/ y en el paquete maint-guide-es.

    1.1. Programas que necesitas para el desarrollo

    Antes de empezar nada, deberas asegurarte de que tienes instalados algunos paquetes adicio-nales necesarios para el desarrollo. Observa que en la lista no estn incluidos paquetes cuyasprioridades son esencial o requerido, que se suponen ya instalados.

    En la revisin de este documento se han actualizado los paquetes para Debian 2.2 (potato) y3.0 (woody).

  • Captulo 1. Empezando de la forma correcta. 2

    Los siguientes paquetes vienen en una instalacin estndar de Debian, as que probablementeya los tengas (junto con los paquetes de los que dependen). An as, deberas comprobarlo condpkg -s .

    dpkg-dev - este paquete contiene las herramientas necesarias para desempaquetar,construir y enviar paquetes fuente de Debian (vase dpkg-source(1)).

    file - este til programa puede determinar de qu tipo es un fichero (vase file(1)).

    gcc - el compilador de C de GNU, necesario si el programa, como la gran mayora, estescrito en el lenguaje de programacin C (vase gcc(1)). Este paquete tambin vendrcon otros paquetes como binutils que incluye programas para ensamblar y enlazarficheros objeto (vase info binutils en el paquete binutils-doc) y el preprocesadorde C en el paquete cpp (vase cpp(1)).

    libc6-dev - las bibliotecas y archivos de cabecera de C que gcc necesita para enlazar ycrear ficheros objeto (vase info libc en el paquete glibc-doc).

    make - habitualmente la creacin de un programa consta de varios pasos. En lugar de eje-cutar las mismas rdenes una y otra vez, puedes utilizar este programa para automatizarel proceso, creando ficheros Makefile (vase info make).

    patch - esta utilidad es muy prctica, ya que permite tomar un fichero que contiene unlistado de diferencias (producido por el programa diff) y aplicrselas al fichero original,produciendo una versin parcheada. (vase patch(1))

    perl - Perl es uno de los lenguajes interpretados para hacer guiones (o scripts) msusados en los sistemas Un*x de hoy en dia, comnmente se refiere a l como la navajasuiza de Unix (vase perl(1)).

    Probablemente, necesitars instalar adems los siguientes paquetes:

    autoconf y automake - muchos programas nuevos usan ficheros de configuracin yficheros Makefile que se procesan con la ayuda de programas como stos (vase infoautoconf, info automake).

    dh-make y debhelper - dh-make es necesario para crear el esqueleto de nuestro paque-te ejemplo, y se usarn algunas de las herramientas de debhelper para crear los paquetes.Aunque no son imprescindibles para la creacin de paquetes se recomiendan encareci-damente para nuevos desarrolladores. Hacen el proceso mucho ms fcil al principio,y ms fcil de controlar tambin ms adelante (vase dh_make(1), debhelper(1),/usr/share/doc/debhelper/README).

    devscripts - este paquete contiene algunos guiones tiles para losdesarrolladores, pero no son necesarios para crear paquetes (vase/usr/share/doc/devscripts/README.gz).

  • Captulo 1. Empezando de la forma correcta. 3

    fakeroot - esta utilidad te permite emular al usuario administrador (o root, N.del T.), lo cual es necesario para ciertas partes del proceso de construccin (vasefakeroot(1)).

    gnupg - herramienta que te permite firmar digitalmente los paquetes. Esto es especial-mente importante si quieres distribuir tu paquete a otras personas, y ciertamente, ten-drs que hacerlo cuando tu trabajo vaya a incluirse en la distribucin de Debian (vasegpg(1)).

    g77 - el compilador GNU de Fortran 77, necesario si el programa est escrito en Fortran(vase g77(1)).

    gpc - el compilador GNU de Pascal, necesario si el programa est escrito en Pascal. Me-rece la pena mencionar aqu fp-compiler, un compilador libre de Pascal, que tambines bueno en esta tarea (vase gpc(1), ppc386(1)).

    xutils - algunos programas, normalmente aquellos hechos para X11, tambin usan pro-gramas para generar Makefiles de un conjunto de funciones de macro (vase imake(1),xmkmf(1)).

    lintian - este es el comprobador de paquetes de Debian, que te indica muchos de loserrores comunes despus de construir un paquete, y explica los errores encontrados (va-se lintian(1), /usr/share/doc/lintian/lintian.html/index.html).

    linda - este es un comprobador de paquetes de Debian alternativo (vase linda(1)).

    pbuilder - este paquete contiene programas para crear y mantener entornos chroot. Alconstruir paquetes Debian en estos entornos chroot se verifica que las dependencias sonlas adecuadas y se evitan fallos al construir desde el cdigo fuente (vase pbuilder(8)y pdebuild(1)).

    Por ltimo, la documentacin que se indica a continuacin es de gran importancia y deberaleerse junto con este documento:

    debian-policy - incluye la estructura y contenidos del archivo, ciertas notas sobre eldiseo del sistema operativo, el estndar de la jerarqua del sistema de ficheros (Fi-lesystem Hierarchy Standard, N. del T.), y, lo ms importante para ti, describe los re-quisitos que debe satisfacer cada paquete para ser incluido en la distribucin (vase/usr/share/doc/debian-policy/policy.html/index.html).

    developers-reference - para todos los temas no especficamente relacionados conlos detalles tcnicos de cmo empaquetar, tales como la estructura del archivo, cmo re-nombrar, abandonar, adoptar paquetes, cmo hacer NMUs (Non-Maintainer Uploads,o envos por personas distintas del desarrollador, N. del T.), como gestionar los erroresque los usuarios envan, buenas prcticas de empaquetado, cmo y cuando enviar los pa-quetes, etc. (vase /usr/share/doc/developers-reference/index.en-us.iso-8859-1.html).

  • Captulo 1. Empezando de la forma correcta. 4

    Las breves descripciones dadas anteriormente slo sirven para introducirte a lo que hace cadapaquete. Antes de continuar, por favor, lee la documentacin de cada programa, al menos parasu uso normal. Puede parecerte algo duro ahora, pero ms adelante estars muy contento dehaberla ledo.

    Nota: debmake es un paquete que incluye otros programas con funciones similares a dh-make,pero su uso especfico no est cubierto en este documento porque se trata de una herramientaobsoleta.

    1.2. Desarrollador oficial de Debian

    Puede que quieras convertir en un desarrollador oficial de Debian una vez hayas construido tupaquete (o incluso mientras lo ests haciendo) para que el paquete se introduzca en la nuevadistribucin (si el programa es til, por qu no?).

    No puedes convertirte en desarrollador oficial de Debian de la noche a la maana porquehace falta ms que slo habilidades tcnicas. No te sientas desilusionado por esto. An pue-des subir tu paquete, si es til a otras personas, como su mantenedor a travs de un pa-trocinador mientras tu entras en el proceso de nuevos desarrolladores de Debian (http://nm.debian.org/). En este caso el patrocinador es un desarrollador oficial de Debian queayuda a la persona que mantiene el paquete a subirlo al archivo de Debian. Encontrars msinformacin de este procedimiento en el documento preguntas frecuentes de debian-mentors(http://people.debian.org/~mpalmer/debian-mentors_FAQ.html).

    Ten en cuenta que no tienes que crear un paquete nuevo para poder convertirte en desarrolla-dor oficial de Debian. Un camino posible para ser desarrollador oficial es contribuir al mante-nimiento de los paquetes ya existentes en la distribucin.

    1.3. Ms informacin

    Puedes construir dos tipos de paquetes: fuentes y binarios. Un paquete fuente contiene el c-digo que puedes compilar en un programa. Un paquete binario contiene slo el programaterminado. No mezcles los trminos como fuentes de un programa y el paquete fuente deun programa! Por favor, lee los otros manuales si necesitas ms detalles sobre terminologa.

    Debian usa el trmino desarrollador (maintainer, N. del T.) para la persona que hace pa-quetes, autor original (upstream author, N. del T.) para la persona que hizo el programa,y desarrollador original (upstream maintainer, N. del T.) para la persona que actualmentemantiene el programa fuera de Debian. Generalmente el autor y el desarrollador fuente son lamisma persona - y algunas veces incluso el desarrollador es el mismo. Si haces un programa,y quieres incluirlo en Debian, tienes total libertad para solicitar convertirte en desarrollador.

  • 5Captulo 2

    Primeros pasos

    2.1. Elige el programa

    Probablemente hayas escogido ya el paquete que deseas construir. Lo primero que debes haceres comprobar si el paquete est ya en el archivo de la distribucin utilizando aptitude. Siusas la distribucin estable, quizs sea mejor que vayas a la pgina de bsqueda de paquetes(http://www.debian.org/distrib/packages).

    Si el paquete ya existe, instlalo! :-) Si te encuentras con que el paquete es un paquete hurfano(cuando su desarrollador es el Debian QA Group, es decir, el grupo de calidad de Debian),entonces podras adoptarlo.

    Consulta la lista de paquetes en prospeccin y que necesitan trabajo (http://www.debian.org/devel/wnpp/) as como las pginas enlazadas a sta para verificar si el paquete esthurfano o est siendo adoptado.

    Si puedes adoptar el paquete, descarga las fuentes (con algo como apt-get sourcepackagename) y examnalas. Este documento, desafortunadamente, no incluye an informa-cin exhaustiva sobre la adopcin de paquetes. No debera ser dficil entender cmo funcionael paquete ya que alguien ha hecho el trabajo inicial por ti. An as es mejor que sigas leyendo,muchos de los consejos que se dan a continuacin sern tambin aplicables para tu caso.

    Si el paquete es nuevo y decides que te gustara verlo en Debian debes seguir los pasos indica-dos a continuacin:

    Comprueba que no hay nadie ms trabajando ya en el paquete consultando la lista depaquetes en los que se est trabajando (http://www.de.debian.org/devel/wnpp/being_packaged). Si ya hay alguien trabajando en l, contacta con esa persona. Si no,intenta encontrar otro programa interesante que nadie mantenga.

    El programa debe tener una licencia. Preferiblemente la licencia deber ser libre en elsentido marcado por las Directrices de Debian para el software libre (http://www.debian.org/social_contract.html#guidelines) y no puede depender de un

  • Captulo 2. Primeros pasos 6

    paquete que no est dentro de main para compilarse o para poder utilizarse. Si la li-cencia no sigue alguna de estas reglas an puede incluirse en las secciones contrib onon-free de Debian dependiendo de su situacin. Si no ests seguro sobre en qu lugardebera ir, enva el texto de la licencia y pide consejo con un correo (en ingls) dirigido a.

    El programa no debera ejecutarse con setuid root, o anmejor: no debera ser setuidni setgid.

    El programa no debera ser un demonio, o algo que vaya en los directorios */sbin, o abrirun puerto como usuario administrador.

    El programa debera estar compuesto por binarios ejecutables, no intentes empaquetaran con bibliotecas.

    El programa debera tener una buena documentacin, o al menos un cdigo fuente legi-ble y no ofuscado.

    Deberas contactar con el autor o autores del programa para comprobar si est/n deacuerdo con que se empaquete. Es importante que el autor o autores sigan manteniendoel programa para que puedas en el futuro consultarle/s en caso de que haya problemasespecficos. No deberas intentar empaquetar programas que no estn mantenidos.

    Y por ltimo, pero no menos importante, deberas saber cmo funciona, y haberlo utili-zado durante algn tiempo.

    Por supuesto, esta lista es para tomar medidas de seguridad, y con la intencin de salvartede usuarios enfurecidos si haces algo mal con algn demonio setuid. . . Cuando tengas msexperiencia en empaquetar, podrs hacer este tipo de paquetes, incluso los desarrolladores msexperimentados preguntan en la lista de correo de debian-devel cuando tienen dudas. La genteall te ayudar gustosamente.

    Para ms ayuda sobre esto, lee la Referencia del desarrollador.

    2.2. Obtn el programa y prubalo

    Lo primero que debes hacer es encontrar y descargar el paquete original. A partir de este pun-to se da por supuesto que ya tienes el cdigo fuente que obtuviste de la pgina del autor. Lasfuentes de los programas libres de Linux generalmente vienen en formato tar/gzip, con exten-sin .tar.gz, y generalmente contienen un subdirectorio llamado programa-versin con todaslas fuentes en l. Si tu programa viene en otro tipo de archivo (por ejemplo, el fichero terminaen .Z o .zip), descomprmelo con las herramientas adecuadas, o pregunta en la lista decorreo debian-mentors si tienes dudas de cmo se puede desempaquetar correctamente (pista:prueba file archivo.extensin).

    Como ejemplo, usar el programa conocido como gentoo, un gestor de ficheros de X11 enGTK+. Observa que el programa ya ha sido empaquetado previamente pero ha cambiado sus-tancialmente de versin desde que este texto se escribi.

  • Captulo 2. Primeros pasos 7

    Crea un subdirectorio bajo tu directorio personal llamado debian o deb o lo que creasapropiado (por ejemplo ~/gentoo/ estara bien en este caso). Mueve a l el archivo que hasdescargado, y descomprmelo de la siguiente forma: tar xzf gentoo-0.9.12.tar.gz. Asegra-te de que no hay errores, incluso errores irrelevantes, porque es muy probable que hayaproblemas al desempaquetarlo en sistemas de otras personas, cuyas herramientas de desem-paquetado puede que no ignoren estas anomalas.

    Ahora tienes otro subdirectorio, llamado gentoo-0.9.12. Muvete a ese directorio y lee enprofundidad la documentacin que encuentres. Generalmente se encuentra en ficheros que sellaman README*, INSTALL*, *.lsm o *.html. All encontrars instrucciones de cmo compilare instalar el programa (muy probablemente asumirn que lo quieres instalar en el directorio/usr/local/bin, no hars esto, pero eso lo veremos ms adelante en Instalacin en un subdi-rectorio en la pgina 9).

    El proceso vara de un programa a otro, pero gran parte de los programas modernos vienencon un guin configure que configura las fuentes para tu sistema y se asegura de que elsistema est en condiciones de compilarlo. Despus de configurarlo (con ./configure), losprogramas generalmente se compilan con make. Algunos de ellos soportan make checkpara ejecutarse incluyendo comprobaciones automticas. Generalmente se instalarn en susdirectorios de destino ejecutando make install.

    Ahora intenta compilar, y ejecutar el programa, para asegurarte de que funciona bien y de queno rompe nada mientras est instalndose o ejecutndose.

    Tambin, generalmente, puedes ejecutar make clean (o mejor make distclean) para limpiarel directorio donde se genera el programa. A veces hay incluso un make uninstall que sepuede utilizar para borrar todos los archivos instalados.

    2.3. Nombre del paquete y versin

    Deberas empezar a construir tu paquete en un directorio de fuentes completamente limpio, osimplemente con las fuentes recin desempaquetadas.

    Para construir correctamente el paquete, debes cambiar el nombre original del programaa letras minsculas (si no lo est ya), y deberas renombrar el directorio de fuentes a-.

    Si el nombre del programa est formado por varias palabras, contrelas a una palabra o haz unaabreviatura. Por ejemplo, el paquete del programa el editor para X de Javi se podra llamarjaviedx o jle4x, o lo que decidas, siempre y cuando no se exceda de unos lmites razonables,como 20 caracteres.

    Comprueba tambin la versin exacta del programa (la que se incluye en la versin del paque-te). Si el programa no est numerado con versiones del estilo de X.Y.Z, pero s con fecha depublicacin, eres libre de utilizar la fecha como nmero de versin, precedida por 0.0 (slopor si los desarrolladores originales deciden sacar una versin nueva como 1.0). As, si la fe-cha de las fuentes es el 19 de diciembre de 1998, puedes utilizar la cadena 0 0.0.19981219 (queutiliza el formato de fecha norteamericano, N. del T.) como nmero de versin.

  • Captulo 2. Primeros pasos 8

    An as habr algunos programas que ni siquiera estn numerados, en cuyo caso debers con-tactar con el desarrollador original para ver si tienen algn otro sistema de seguimiento derevisiones.

    2.4. Debianizacin inicial

    Asegrate que te encuentras en el directorio donde estn las fuentes del programa y ejecuta losiguiente:

    dh_make -e [email protected] -f ../gentoo-0.9.12.tar.gz

    Por supuesto, cambia la cadena [email protected] por tu direccin de correoelectrnico para que se incluya en la entrada del fichero de cambios as como en otros ficheros,y el nombre de fichero de tu archivo fuente original. Lee dh_make(1) para ms detalles.

    Saldr alguna informacin. Te preguntar qu tipo de paquete deseas crear. Gentoo es un slopaquete de binarios - crea slo un binario, y, por tanto, slo un fichero .deb - as que selec-cionaremos la primera opcin, con la tecla s. Comprueba la informacin que aparece en lapantalla y confirma pulsando la tecla .

    Tras ejecutar dh_make, se crea una copia del cdigo original con el nombregentoo_0.9.12.orig.tar.gz en el directorio raz para facilitar la creacin del pa-quete de fuentes no nativo de Debian con el diff.gz. Observa que hay dos cambios clave eneste nombre de fichero:

    El nombre del paquete y la versin estn separados por _.Hay un orig. antes de tar.gz.

    Como nuevo desarrollador, se desaconseja crear paquetes complicados, por ejemplo:mltiples paquetes binariospaquetes de bibliotecaspaquetes en los que el formato del archivo fuente no es en tar.gz. ni en tar.bz2, opaquetes cuyas fuentes contienen partes que no se pueden distribuir.

    Estos casos no son extremadamente difciles, pero s necesita algunos conocimientos ms, asque aqu no se describir el proceso de empaquetado para este tipo de paquetes.

    Ten en cuenta que deberas ejecutar dh_make slo una vez, y que no se comportar correcta-mente si lo haces otra vez en el mismo directorio ya debianizado. Esto tambin significa queusars un mtodo distinto para crear una nueva revisin o una nueva versin de tu paqueteen el futuro. Lee ms sobre esto ms adelante, en Actualizar el paquete en la pgina 43.

  • 9Captulo 3

    Modificar las fuentes

    Por lo general, los programas se instalan a s mismos en el subdirectorio /usr/local. Perolos paquetes Debian no pueden utilizar este directorio ya que est reservado para el uso pri-vado del administrador (o de los usuarios). Esto significa que tienes que mirar el sistema deconstruccin de tu programa, generalmente empezando por el fichero Makefile. ste es elguin make(1) que se usar para automatizar la creacin de este programa. Para ms detallessobre los ficheros Makefiles, consulta El fichero rules en la pgina 20.

    Observa que si tu programa usa GNU automake(1) y/o autoconf(1), lo que quiere decirque las fuentes incluyen ficheros Makefile.am y Makefile.in, respectivamente, ya que nece-sitars modificar esos ficheros, porque cada invocacin de automake reescribir los ficherosMakefile.in con informacin generada a partir de los ficheros Makefile.am, y cada lla-mada a ./configure har lo mismo con los ficheros Makefile, con informacin de losficheros Makefile.in. Editar los ficheros Makefile.am requiere algunos conocimientos deautomake, que puedes obtener leyendo la entrada de info para automake, mientras que edi-tar los ficheros Makefile.in es casi lo mismo que editar ficheros Makefile, simplementebasta con poner atencin en las variables, es decir, cualquier cadena que empiece y acabe conel caracter @, como por ejemplo @CFLAGS@ o @LN_S@, que se sustituyen por otros valorescada vez que se ejecute ./configure. Por favor, lee /usr/share/doc/autotools-dev/README.Debian.gz antes de empezar.

    Ten en cuenta que no hay espacio aqu para entrar en todos los detalles respecto a los arreglosque deben hacerse en las fuentes originales. Sin embargo, a continuacin se detallan algunosde los problemas ms frecuentes.

    3.1. Instalacin en un subdirectorio

    La mayor parte de los programas tienen alguna manera de instalarse en la estructura de di-rectorios existente en tu sistema, para que los binarios sean incluidos en tu $PATH, y para queencuentre la documentacin y pginas de manual en los lugares habituales. Sin embargo, silo instalas de esta forma, el programa se instalar con los dems binarios que ya estn en tu

  • Captulo 3. Modificar las fuentes 10

    sistema. Esto dificultar a las herramientas de paquetes averiguar qu archivos pertenecen atu paquete y cuales no.

    Por lo tanto, necesitas hacer algo ms: instalar el programa en un subdirectorio temporal desdeel cual las herramientas de desarrollo construirn el paquete .deb que se pueda instalar. Todolo que se incluye en este directorio ser instalado en el sistema del usuario cuando instale supaquete, la nica diferencia es que dpkg instalar los ficheros en el directorio raz.

    Este directorio temporal se crear bajo el directorio debian/ que est dentro del rbol del cdi-go descomprimido, generalmente con el nombre debian/nombre_de_paquete.

    Ten en cuenta que, aunque necesitas que el programa se instale en debian/nombre_de_paquete, tambin necesitas que se comporte correctamente cuan-do se instale en el directorio raz, es decir, cuando se instale desde el paquete.deb. As que no deberas permitir que al construirse lo haga con cadenas como/home/me/deb/gentoo-0.9.12/usr/share/gentoo dentro de los archivos del pa-quete a distribuir.

    Esto ser sencillo con los de programas que utilicen la herramienta GNU autoconf. La ma-yora de estos programas tienen ficheros Makefile por omisin que permiten configurar lainstalacin en un subdirectorio cualquiera, aunque recordando que, por ejemplo, /usr es elprefijo normal. Cuando detecte que tu programa usa autoconf, dh_make fijar las opcionesnecesarias para hacer esto automticamente, as que puedes dejar de leer esta seccin. Pero conotros programas puede ser necesario que examines y edites los ficheros Makefile.

    Esta es la parte importante del Makefile de gentoo:

    # Dnde poner el binario en make install?BIN = /usr/local/bin

    # Dnde poner los iconos en make install?ICONS = /usr/local/share/gentoo/

    Vemos que los ficheros estn configurados para instalarse bajo /usr/local. Cambia estasrutas a:

    # Dnde poner el binario en make install?BIN = $(DESTDIR)/usr/bin

    # Dnde poner los iconos en make install?ICONS = $(DESTDIR)/usr/share/gentoo

    Pero: por qu en este directorio y no en otro? Porque los paquetes de Debian nunca se instalanbajo /usr/local, este rbol de directorio, est reservado para el uso del administrador delsistema. As que estos ficheros deben instalarse en /usr.

    La localizacin correcta de los binarios, iconos, documentacin, etc, est especificada en elEstndar de la jerarqua del sistema de ficheros (vase /usr/share/doc/debian-policy/fhs).Te recomiendo que leas las secciones que podran aplicar a tu paquete.

  • Captulo 3. Modificar las fuentes 11

    As pues, deberamos instalar el binario en /usr/bin en lugar de /usr/local/bin y la p-gina de manual en /usr/share/man/man1 en lugar de /usr/local/man/man1. No hemosmencionado ninguna pgina de manual en el Makefile de gentoo, pero en Debian se requie-re que cada programa debe tener una, as que haremos una ms tarde y la instalaremos en/usr/share/man/man1.

    Algunos programas no usan variables en el makefile para definir rutas como stas. Esto signi-fica que tendrs que editar algunos de los ficheros de cdigo C para arreglarlos y que usen lasrutas correctas. Pero, dnde buscar?, y exactamente, el qu? Puedes probar a encontrarlosusando:

    grep -nr -e usr/local/lib --include=*.[c|h] .

    (En cada subdirectorio que contenga ficheros .c y .h, grep nos indicar el nombre del fichero yla lnea cuando encuentre una ocurrencia.

    Ahora edita esos ficheros y cambia en esas lneas usr/local/lib con usr/share y ya est. Slotienes que reemplazar usr/local/lib por tu localizacin, pero debes ser muy cuidadoso para nomodificar el resto del cdigo, especialmente si no sabes mucho sobre cmo programar en C. :-)

    Despus de esto deberas encontrar el objetivo install (busca una lnea que comience porinstall:) y renombra todas las referencias a directorios distintos de los definidos al comienzodel Makefile. Anteriormente el objetivo install deca:

    install: gentooinstall ./gentoo $(BIN)install icons $(ICONS)install gentoorc-example $(HOME)/.gentoorc

    Despus del cambio dice:

    install: gentoo-targetinstall -d $(BIN) $(ICONS) $(DESTDIR)/etcinstall ./gentoo $(BIN)install -m644 icons/* $(ICONS)install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc

    Seguramente has notado que ahora hay una orden install -d antes de las dems rdenes dela regla. El makefile original no lo tena porque normalmente /usr/local/bin y otros directoriosya existen en el sistema donde se ejecuta make install. Sin embargo, dado que lo instalaremosen un directorio vaco (o incluso inexistente), tendremos que crear cada uno de estos directorios

    Tambin podemos aadir otras cosas al final de la regla, como la instalacin de documentacinadicional que los desarrolladores originales a veces omiten:

    install -d $(DESTDIR)/usr/share/doc/gentoo/htmlcp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html

  • Captulo 3. Modificar las fuentes 12

    Un lector atento se dar cuenta de que he cambiado gentoo a gentoo-target en la lneainstall:. A eso se le llama arreglar un fallo en el programa. :-)

    Siempre que hagas cambios que no estn especficamente relacionados con el paquete Debian,asegrate de que los envas al desarrollador original para que ste los pueda incluir en laprxima revisin del programa y as le puedan ser tiles a alguien ms. Adems, recuerdahacer que tus cambios no sean especficos para Debian o Linux (ni siquiera para Unix!) antesde enviarlos, hazlo portable. Esto har que tus arreglos sean ms fciles de aplicar.

    Ten en cuenta que no tienes que enviar ninguno de los ficheros debian/* al desarrollador ori-ginal.

    3.2. Bibliotecas diferentes

    Hay otro problema comn: las bibliotecas son generalmente diferentes de plataforma a plata-forma. Por ejemplo, un Makefile puede contener una referencia a una biblioteca que no existaen Debian o ni siquiera en Linux. En este caso, se necesita cambiarla a una biblioteca que sexista en Debian y sirva para el mismo propsito.

    As, si hay una lnea en el Makefile (o Makefile.in) de tu programa que dice algo como losiguiente (y tu programa no compila):

    LIBS = -lcurses -lcosas -lmscosas

    Entonces cmbiala a lo siguiente, y funcionar casi con seguridad:

    LIBS = -lncurses -lcosas -lmscosas

    (El autor se ha dado cuenta de que ste no es el mejor ejemplo ya que ahora el paquetelibncurses incluye un enlace simblico a libcurses.so, pero no puedo pensar uno mejor.Cualquier sugerencia sera muy bien recibida :-)

  • 13

    Captulo 4

    Las cosas necesarias bajo debian/

    Ahora hay un nuevo subdirectorio bajo el directorio principal del programa (gentoo-0.9.12),que se llama debian. Hay algunos ficheros en este directorio que debemos editar para adap-tar el comportamiento del paquete. La partems importante esmodificar los ficheros control,rules, changelog, y copyright que son necesarios en todos los paquetes.

    4.1. El fichero control

    Este fichero contiene varios valores que dpkg, dselect y otras herramientas de gestin depaquetes usarn para gestionar el paquete.

    Aqu est el fichero de control que dh_make crea para nosotros:

    1 Source: gentoo2 Section: unknown3 Priority: optional4 Maintainer: Josip Rodin 5 Build-Depends: debhelper ( 3.0.0)6 Standards-Version: 3.6.278 Package: gentoo9 Architecture: any10 Depends: ${shlibs:Depends}11 Description: 12

    (He aadido los nmeros de lnea).

    Las lneas 1 a 6 son la informacin de control para el paquete fuente.

    La lnea 1 es el nombre del paquete fuente.

  • Captulo 4. Las cosas necesarias bajo debian/ 14

    La lnea 2 es la seccin de la distribucin dentro de la que estar este paquete.

    Como puede que hayas notado, Debian est dividida en secciones: main (principal, N. delT.) (el software libre), non-free (no libre, N. del T.) (el software que realmente no es libre)y contrib (software libre que depende de software no libre). Bajo ellas hay subdivisioneslgicas que describen en una palabra qu paquetes hay dentro. As que tenemos admin paraprogramas que slo usa un administrador, base para las herramientas bsicas, devel paralas herramientas de programacin, doc para la documentacin, libs para las bibliotecas,mail para lectores y demonios de correo-e, net para aplicaciones y demonios de red, x11para programas especficos de X11, y muchos ms.

    Vamos a cambiarla para que ponga x11. El prefijo main/ ya va implcito, as que podemosomitirlo.

    La lnea 3 describe cmo de importante es para el usuario la instalacin de este paquete. Podrsconsultar en el manual de normas de Debian (Debian Policy, N. del T.) la gua de los valoresque deberan tener estos campos. La prioridad optional suele ser lo mejor para los paquetesnuevos.

    Section y Priority se usan en las interfaces como dselect cuando ordenan los paquetes.Una vez que envies el paquete a Debian, el valor de estos dos campos puede no ser aceptadopor los responsables del archivo, en cuyo caso te lo notificarn por correo electrnico.

    Como es un paquete de prioridad normal y no tiene conflictos con ningn otro, lo dejaremoscon prioridad optional (opcional, N. del T.).

    La lnea 4 es el nombre y correo electrnico del desarrollador. Asegrate de que este campoincluye una cabecera vlida To: , para una direccin de correo electrnico, porque despuede que enves el paquete, el sistema de seguimiento de errores (Bug Tracking System, N. delT.) utilizar esta direccin para enviarte los mensajes de los bugs. Evita usar comas, el signo& y parntesis.

    La lnea 5 incluye la lista de paquetes requeridos para construir tu paquete. Algunos paquetescomo gcc y make estn implcitos, consulta el paquete build-essential para ms detalles.Si se necesita algn compilador no estndar u otra herramienta para construir tu paquete,deberas aadirla en la lnea Build-Depends. Las entradas mltiples se separan con comas,lee la explicacin de las dependencias binarias para averiguar ms sobre la sintaxis de estecampo.

    Tambin tienes los campos Build-Depends-Indep y Build-Conflicts entre otros. Estos da-tos los usarn los programas de construccin automtica de paquetes de Debian para crearpaquetes binarios para el resto de arquitecturas. Consulta las normas de Debian para ms in-formacin sobre las dependencias de construccin y la Referencia del Desarrollador para msinformacin sobre las otras arquitecturas y sobre cmo migrar los programas a ellas.

    Aqu tienes un truco que puedes usar para averiguar qu paquetes necesitar tu paquete en suconstruccin:

    strace -f -o /tmp/log ./configure# o make en lugar de ./configure, si el paquete no usa autoconf

  • Captulo 4. Las cosas necesarias bajo debian/ 15

    for x in dpkg -S $(grep open /tmp/log|\perl -pe s!.* open\(\"([^\"]*).*!$1! |\grep "^/"| sort | uniq|\grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|\cut -f1 -d":"| sort | uniq; \

    do \echo -n "$x (>=" dpkg -s $x|grep ^Version|cut -f2 -d":" "), "; \

    done

    Para encontrar manualmente las dependencias exactas de /usr/bin/foo, ejecuta

    objdump -p /usr/bin/foo | grep NEEDED

    y para cada biblioteca, por ejemplo, libfoo.so.6, ejecuta

    dpkg -S libfoo.so.6

    Debes utilizar la versin -dev de cada uno de los paquetes dentro de la entrada Build-deps. Si usas ldd para este propsito, tambin te informar de las dependencias de bibliotecasindirectas, lo que puede llevar a que se introduzcan demasiadas dependencias de construccin.

    Gentoo tambin requiere xlibs-dev, libgtk1.2-dev y libglib1.2-dev para su cons-truccin, as que lo aadiremos junto a debhelper.

    La lnea 6 es la versin de los estndares definidos en las normas de Debian que sigue estepaquete, es decir, la versin del manual de normas que has ledo mientras haces tu paquete.

    La lnea 8 es el nombre del paquete binario. Este suele ser el mismo que el del paquete fuente,pero no tiene que ser necesariamente as siempre.

    La lnea 9 describe la arquitectura de CPU para la que el paquete binario puede ser compilado.Dejaremos puesto any (cualquiera, N. del T.), porque dpkg-gencontrol(1) la rellenarcon el valor apropiado cuando se compile este paquete en cualquier arquitectura para la cualpueda ser compilado.

    Si tu paquete es independiente de la arquitectura (por ejemplo, un documento, un guin escritoen Perl o para el intrprete de rdenes), cambia esto a all, y consulta ms adelante El ficherorules en la pgina 20 sobre cmo usar la regla binary-indep en lugar de binary-archpara construir el paquete.

    La lnea 10muestra una de las ms poderosas posibilidades del sistema de paquetes de Debian.Los paquetes se pueden relacionar unos con otros de diversas formas. Aparte de Depends:(depende de, N. del T.) otros campos de relacin son Recommends: (recomienda, N. del T.),Suggests: (sugiere, N. del T.), Pre-Depends: (predepende de, N. del T.), Conflicts: (entraen conflicto con, N. del T.), Provides: (provee, N. del T.), Replaces: (reemplaza a, N. del T.).

  • Captulo 4. Las cosas necesarias bajo debian/ 16

    Las herramientas de gestin de paquetes se comportan habitualmente de la misma forma cuan-do tratan con esas relaciones entre paquetes; si no es as, se explicar en cada caso. (vasedpkg(8), dselect(8), apt(8), aptitude(1), etc.)

    A continuacin se detalla el significado de las dependencias:

    Depends:

    No se instalar el programa a menos que los paquetes de los que depende estn ya insta-lados. Usa esto si tu programa no funcionar de ninguna forma (o se romper fcilmente)a no ser que se haya instalado un paquete determinado.

    Recommends:

    Programas como dselect o aptitude informarn en la instalacin de los paquetes reco-mendados por tu paquete, dselect incluso insistir. dpkg y apt-get ignorarn este campo.Usa esto para paquetes que no son estrictamente necesarios pero que se usan habitual-mente con tu programa.

    Suggests:

    Cuando un usuario instale el paquete, todos los programas le informarn de que puedeinstalar los paquetes sugeridos. Salvo dpkg y apt, que ignorarn estas dependencias.Utiliza esto para paquetes que funcionarn bien con tu programa pero que no son nece-sarios en absoluto.

    Pre-Depends:

    Esto es ms fuerte que Depends. El paquete no se instalar a menos que los paque-tes de los que pre-dependa est instalados y correctamente configurados. Utiliza esto muypoco y slo despus de haberlo discutido en la lista de distribucin de debian-devel. Enresumidas cuentas: no lo utilices en absoluto :-)

    Conflicts:

    El paquete no se instalar hasta que todos los paquetes con los que entra en conflictohayan sido eliminados. Utiliza esto si tu programa no funcionar en absoluto (o fallarfcilmente) si un paquete en concreto est instalado.

    Provides:

    Se han definido nombres virtuales para algunos tipos determinados de paquetes queofrecen mltiples alternativas para la misma funcin. Puedes obtener la lista completa enel fichero /usr/share/doc/debian-policy/virtual-package-names-list.text.gz. Usa esto situ programa ofrece las funciones de un paquete virtual que ya exista.

    Replaces:

    Usa esto si tu programa reemplaza ficheros de otro paquete o reemplaza totalmente otropaquete (generalmente se usa conjuntamente con Conflicts:). Se eliminarn los ficherosde los paquetes indicados antes de instalar el tuyo.

  • Captulo 4. Las cosas necesarias bajo debian/ 17

    Todos estos campos tienen una sintaxis uniforme: se trata de una lista de nombres de paque-tes separados por comas. Estos nombres de paquetes tambin puede ser listas de paquetesalternativos, separados por los smbolos de barra vertical | (smbolos tubera).Los campos pueden restringir su aplicacin a versiones determinadas de cada paquete nom-brado. Esto se hace listando despus de cada nombre de paquete individual las versiones entreparntesis, e indicando antes del nmero de versin una relacin de la siguiente lista. Lasrelaciones permitidas son: para estrictamente anterior, anterior o igual,exactamente igual, posterior o igual o estrictamente posterior, respectivamente. Por ejemplo:

    Depends: foo (>= 1.2), libbar1 (= 1.3.4)Conflicts: bazRecommends: libbaz4 ( 4.0.7)Suggests: quuxReplaces: quux ( 5), quux-foo (

  • Captulo 4. Las cosas necesarias bajo debian/ 18

    9 Architecture: any10 Depends: ${shlibs:Depends}11 Suggests: file12 Description: fully GUI configurable X file manager using GTK+13 gentoo is a file manager for Linux written from scratch in pure C. It14 uses the GTK+ toolkit for all of its interface needs. gentoo provides15 100% GUI configurability; no need to edit config files by hand and re-16 start the program. gentoo supports identifying the type of various17 files (using extension, regular expressions, or the file command),18 and can display files of different types with different colors and icons.19 .20 gentoo borrows some of its look and feel from the classic Amiga file21 manager "Directory OPUS" (written by Jonathan Potter).

    (He aadido los nmeros de lnea).

    4.2. El fichero copyright

    Este fichero contiene la informacin sobre la licencia y copyright de las fuentes originales delpaquete. El formato no est definido en las normas, pero s en sus contenidos (seccin 12.6Copyright information).

    dh_make crea por omisin un fichero como este:

    1 This package was debianized by Josip Rodin on2 Wed, 11 Nov 1998 21:02:14 +0100.34 It was downloaded from 56 Upstream Author(s): 78 Copyright:910

    (He aadido los nmeros de lnea).

    Las cosas importantes que se deben aadir a este fichero son el lugar de donde obtuviste elpaquete junto con la nota de copyright y licencia originales. Debes incluir la licencia comple-ta, a menos que sea una licencia comn en el mundo del software libre como GNU GPL oLGPL, BSD o la Licencia artstica, donde basta referirse al fichero apropiado en el directorio/usr/share/common-licenses/ que existe en todo sistema Debian.

    Gentoo est publicado bajo la Licencia Pblica General GNU, as que cambiaremos el fichero aesto:

  • Captulo 4. Las cosas necesarias bajo debian/ 19

    1 This package was debianized by Josip Rodin on2 Wed, 11 Nov 1998 21:02:14 +0100.34 It was downloaded from: ftp://ftp.obsession.se/gentoo/56 Upstream author: Emil Brink 78 This software is copyright (c) 1998-99 by Emil Brink, Obsession9 Development.1011 You are free to distribute this software under the terms of12 the GNU General Public License either version 2 of the License,13 or (at your option) any later version.14 On Debian systems, the complete text of the GNU General Public15 License can be found in the file /usr/share/common-licenses/GPL-2.

    (He aadido los nmeros de lnea).

    Por favor, sigue el COMO de debian-devel-announce: http://lists.debian.org/debian-devel-announce/2006/03/msg00023.html .

    (Nota del T.: las normas actuales de Debian actuales indican que los documentos aqu citadosestn escritos en ingls, al ser el idioma oficial del proyecto, por lo que no se traducen en estedocumento).

    4.3. El fichero changelog

    Este es un fichero requerido, que tiene un formato especial descrito en las normas, seccin4.4 debian/changelog. Este es el formato que usan dpkg y otros programas para obtener elnmero de versin, revisin, distribucin y urgencia de tu paquete.

    Para ti es tambin importante, ya que es bueno tener documentados todos los cambios quehayas hecho. Esto ayudar a las personas que se descarguen tu paquete para ver si hay te-mas pendientes en el paquete que deberan conocer de forma inmediata. Se guardar como/usr/share/doc/gentoo/changelog.Debian.gz en el paquete binario.

    dh_make crea uno por omisin, el cual es como sigue:

    1 gentoo (0.9.12-1) unstable; urgency=low23 * Initial Release.45 -- Josip Rodin Wed, 11 Nov 1998 21:02:14 +01006

    (He aadido los nmeros de lnea).

  • Captulo 4. Las cosas necesarias bajo debian/ 20

    La lnea 1 es el nombre del paquete, versin, distribucin y urgencia. El nombre debe coincidircon el nombre del paquete fuente, la distribucin debera ser, por ahora, unstable (o inclusoexperimental) y la urgencia no debera cambiarse a algo mayor que low. :-)

    Las lnea 3-5 son una entrada de registro, donde se documentan los cambios hechos enesta revisin del paquete (no los cambios en las fuentes originales - hay un fichero es-pecial para este propsito, creado por los autores originales y que instalars luego como/usr/share/doc/gentoo/changelog.gz). Las nuevas lneas deben insertarse justo antes de lalnea que hay ms arriba que comienza por un asterisco (*). Puede hacerlo con dch(1), omanualmente con cualquier editor de texto.

    Terminars con algo as:

    1 gentoo (0.9.12-1) unstable; urgency=low23 * Initial Release.4 * This is my first Debian package.5 * Adjusted the Makefile to fix $DESTDIR problems.67 -- Josip Rodin Wed, 11 Nov 1998 21:02:14 +01008

    (He aadido los nmeros de lnea).

    Puedes leer ms sobre cmo actualizar el fichero changelog ms adelante en Actualizar elpaquete en la pgina 43.

    4.4. El fichero rules

    Ahora necesitamos mirar las reglas exactas que dpkg-buildpackage(1) utilizar para crearel paquete. Este fichero es en realidad otro Makefile, pero diferente al que viene en las fuentesoriginales. A diferencia de otros ficheros en debian/, ste necesita ser un fichero ejecutable.

    Cada fichero rules (de reglas, N. del T.), comomuchos otros Makefiles, se compone de variasreglas que especifican cmo tratar las fuentes. Cada regla se compone de objetivos, ficheros onombres de acciones que se deben llevar a cabo (por ejemplo, build: o install:). Las reglasque quieras ejecutar deberan llamarse como argumentos de la lnea de rdenes (por ejemplo,./debian/rules build o make -f rules install). Despus del nombre del objetivo, puedesnombrar las dependencias, programas o ficheros de los que la regla dependa. Despus de es-to, hay un nmero cualquiera de instrucciones (indentado con !), hasta que se llega auna lnea en blanco. Ah empieza otra regla. Las lneas mltiples en blanco, y las lneas queempiezan por almohadillas (#) se tratan como comentarios y se ignoran.

    Probablemente ya te hayas perdido, pero todo quedar ms claro despus de ver el ficherorules que dh_make pone por omisin. Deberas leer tambin la entrada de make en infopara ms informacin.

  • Captulo 4. Las cosas necesarias bajo debian/ 21

    La parte importante que debes conocer sobre el fichero de reglas creado por dh_make, es queslo es una sugerencia. Funcionar para paquetes simples pero para ms complicados, no teasustes y aade o quita cosas de ste para ajustarlo a tus necesidades. Una cosa que no debescambiar son los nombres de las reglas, porque todas las herramientas utilizan estos nombres,como se describe en las normas.

    ste es, ms o menos, el contenido del fichero debian/rules que dh_make genera por omisin:

    1 #!/usr/bin/make -f2 # Fichero debian/rules de ejemplo que utiliza debhelper.3 # GNU copyright 1997 to 1999 by Joey Hess.45 # Qutele el comentario para activar el modo de depuracin6 #export DH_VERBOSE=178 # Esta es la versin de compatibilidad con debhelper que usaremos.9 export DH_COMPAT=41011 CFLAGS = -g12 ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))13 CFLAGS += -O014 else15 CFLAGS += -O216 endif1718 build: build-stamp18 build: build-stamp19 build-stamp:20 dh_testdir2122 # Aada aqu las rdenes para compilar el paquete.23 $(MAKE)24 #docbook-to-man debian/gentoo.sgml > gentoo.12526 touch build-stamp2728 clean:29 dh_testdir30 dh_testroot31 rm -f build-stamp3233 # Aada aqu las rdenes para limpiar despus del proceso de creacin.34 -$(MAKE) clean3536 dh_clean37

  • Captulo 4. Las cosas necesarias bajo debian/ 22

    38 install: build39 dh_testdir40 dh_testroot41 dh_clean -k42 dh_installdirs4344 # Aada aqu las rdenes para instalar el paquete en debian/gentoo.45 $(MAKE) install DESTDIR=$(CURDIR)/debian/gentoo4647 # Aqu van los ficheros que se compilan para todas las arquitecturas48 binary-indep: build install49 # Por omisin no se hace nada.5051 # Construir los ficheros dependientes de arquitectura aqu.52 binary-arch: build install53 dh_testdir54 dh_testroot55 # dh_installdebconf56 dh_installdocs57 dh_installexamples58 dh_installmenu59 # dh_installlogrotate60 # dh_installemacsen61 # dh_installpam62 # dh_installmime63 # dh_installinit64 dh_installcron65 dh_installman66 dh_installinfo67 # dh_undocumented68 dh_installchangelogs ChangeLog69 dh_link70 dh_strip71 dh_compress72 dh_fixperms73 # dh_makeshlibs74 dh_installdeb75 # dh_perl76 dh_shlibdeps77 dh_gencontrol78 dh_md5sums79 dh_builddeb8081 binary: binary-indep binary-arch82 .PHONY: build clean binary-indep binary-arch binary install

  • Captulo 4. Las cosas necesarias bajo debian/ 23

    (He aadido los nmeros de lnea. En el fichero debian/rules los espacios iniciales de laslneas son cdigos de tabulacin)

    (N. del T.: se han traducido los comentarios del fichero de reglas, pero en el fichero generadopor dh_make estarn en ingls)

    Probablemente ests familiarizado con lneas como la primera de guiones escritos en shell oPerl. Esta lnea indica que el fichero debe ejecutarse con /usr/bin/make.

    El significado de las variables DH_* que semencionan en las lneas 6 y 9 debera ser evidente dela descripcin corta. Para ms informacin sobre DH_COMPAT consulte la seccin Debhelpercompatibility levels del manual de debhelper(1).

    Las lneas de la 11 a la 16 son el esqueleto de apoyo para los parmetros deDEB_BUILD_OPTIONS, descritos en las normas seccin 10.1 Binarios. Basicamente, estascosas controlan si los binarios se construyen con los smbolos del depurador y si deberan eli-minarse tras la instalacin. De nuevo, es slo un esqueleto, una pista de lo que deberas hacer.Deberas comprobar cmo el sistema de construccin de las fuentes maneja la inclusin de lossmbolos del depurador y su eliminacin en la instalacin e implementarlo por ti mismo.

    Habitualmente puedes decirle a gcc que compile con -g usando la variable CFLAGS. Si estees el caso de tu paquete, pon la variable aadiendo CFLAGS=$(CFLAGS) a la invocacin de$(MAKE) en la regla de construccin (ver ms abajo). Alternativamente, si tu paquete usa unguin de configuracin de autoconf puedes definir la cadena arriba mostrada anteponindola ala llamada a ./configure en la regla de construccin.

    Los programas a los que se le quitan los smbolos del depurador con strip se configuran nor-malmente para instalarse sin pasar por strip, y a menudo sin una opcin para cambiar esto.Afortunadamente, tienes dh_strip(1) que detectar cuando la bandera (N. del T., flag)DEB_BUILD_OPTIONS=nostrip est activada y finalizar silenciosamente.

    Las lneas 18 a la 26 describen la regla build (y su hija build-stamp), que ejecuta make conel propio Makefile de la aplicacin para compilar el programa. Si el programa utiliza las utili-dades de configuracin de GNU para construir los binarios, por favor, asegrate de leer /usr/share/doc/autotools-dev/README.Debian.gz. Hablaremos sobre el ejemplo comen-tado docbook-to-man ms adelante en manpage.1.ex, manpage.sgml.es en la pgina 28.

    La regla clean (limpiar, N. del T.), como se especifica en las lneas 28 a la 36, limpia cualquierbinario innecesario o cosas generadas automticamente, dejadas despus de la construccindel paquete. Esta regla debe funcionar en todo momento (incluso cuando el rbol de fuentesest limpio!), as que, por favor, usa las opciones que fuercen a hacer cosas (por ejemplo pararm, sera -f), o ignora los valores devueltos (con un - al principio de la orden).

    El proceso de instalacin, la regla install, comienza en la lnea 38. Bsicamente eje-cuta la regla install del Makefile del programa, pero lo instala en el directorio$(CURDIR)/debian/gentoo. Esta es la razn por la que especificamos $(DESTDIR) comoel directorio raz de instalacin del Makefile de gentoo.

    Como sugiere el comentario, la regla binary-indep, en la lnea 48, se usa para construir pa-quetes independientes de arquitectura. Como no tenemos ninguno, aqu no se har nada.

  • Captulo 4. Las cosas necesarias bajo debian/ 24

    Lo siguiente es la regla binary-arch, en las lneas 52 a 79, en la que ejecutamos varias peque-as utilidades del paquete debhelper que nos permiten hacer diversas operaciones en nuestropaquete para que cumpla las normas de Debian.

    Si tu paquete es del tipo Architecture: all necesitars incluir todas las rdenes para crear elpaquete bajo esta regla, y dejar la siguiente regla (binary-arch) vaca en su lugar.

    Los nombres comienzan con dh_ y el resto del nombre es la descripcin de lo que la utilidaden particular realmente hace. Es todo ms o menos auto-explicativo, pero a continuacin tienesalgunos aadidos a las explicaciones:

    dh_testdir(1) comprueba que ests en el directorio correcto (esto es, el directorio razde la distribucin de las fuentes),

    dh_testroot(1) comprueba que tienes permisos de superusuario que son necesariospara las reglas binary-arch, binary-indep and clean,

    dh_installman(1) copiar todas las pginas de manual que encuentre en el paquetefuente en el paquete, slo has de indicarle donde estn de forma relativa, desde el nivelms alto del directorio de codigo.

    dh_strip(1) elimina las cabeceras de depuracin de los ficheros ejecutables para ha-cerlos ms pequeos,

    dh_compress(1) comprime las pginas de manual y los ficheros de documentacinque sean ms grandes de 4 kB con gzip(1),

    dh_installdeb(1) copia los ficheros relativos al paquete (es decir, los guiones deldesarrollador que mantiene el paquete) bajo el directorio debian/gentoo/DEBIAN,

    dh_shlibdeps(1) calcula las dependencias de los ejecutables y bibliotecas con las bi-bliotecas compartidas,

    dh_gencontrol(1) genera e instala el fichero de control en debian/gentoo/DEBIAN,

    dh_md5sums(1) genera las sumas de comprobacin MD5 para todos los ficheros delpaquete.

    Para informacin ms completa de lo que hacen cada uno de estos guiones dh_* , y qu otrasopciones tienen, por favor lee sus pginas de manual respectivas. Hay otros guiones con lamisma nomenclatura (dh_*) que no se han mencionado aqu, pero pueden serte tiles. Si losnecesitas, lee la documentacin de debhelper.

    La seccin binary-arch es en una de las que deberas comentar o eliminar las lneas que lla-men a funciones que no necesites. Para gentoo, comentar de ejemplos, cron, init, man e info,simplemente porque gentoo no las necesita. Tan slo, en la lnea 68, reemplazar ChangeLogcon FIXES, porque este es el nombre del fichero de cambios de las fuentes.

    Las ltimas dos lneas (junto con otras que no se explican) son cosas ms o menos necesarias,sobre las que puedes leer en el manual de make, y las normas. Por ahora no es importante quesepas nada de ellas.

  • 25

    Captulo 5

    Otros ficheros en el directorio debian/.

    Vers que existen otros ficheros en el subdirectorio debian/, muchas de los cuales tendrn elsufijo .ex, que indica que son ejemplos. Echale un vistazo a todos. Si lo deseas o necesitasusar alguna de estas caractersticas:

    revisa todo la documentacin relacionada (sugerencia: las normas de Debian),

    si es necesario, modifica los ficheros para ajustarlos a tus necesidades,

    renmbralos para eliminar el sufijo ex., si lo tiene,

    renmbralos para eliminar el prefijo .ex, si lo tiene,

    modifica el fichero rules si fuera necesario.

    Algunos de los ficheros que se usan habitualmente se detallan en las secciones que siguen.

    5.1. README.debian (LEME.debian, N. del T.)

    Cualquier detalle extra o discrepancias entre el programa original y su versin debianizadadebera documentarse aqu.

    dh_make crea una por omisin, y ste es su aspecto:

    gentoo for Debian-----------------

    -- Josip Rodin , Wed, 11 Nov 1998 21:02:14 +0100

    Dado que no tenemos que poner nada aqu - est permitido borrarlo.

  • Captulo 5. Otros ficheros en el directorio debian/. 26

    5.2. conffiles

    Una de las cosas ms molestas de los programas es cuando pasas mucho tiempo y esfuerzoadaptando un programa y una actualizacin destroza todos tus cambios. Debian resuelve esteproblema marcando los ficheros de configuracin de forma que cuando actualizas un paquetese te pregunta si deseas mantener la nueva configuracin o no.

    Eso se consigue poniendo la ruta completa a cada fichero de configuracin (se encuentran ge-neralmente en /etc), una por lnea, en un fichero llamado conffiles (abreviatura de ficherosde confguracin, N. del T.). Gentoo tiene un fichero de configuracin, /etc/gentoorc, y mete-remos ste en el fichero conffiles.

    En el caso de que tu programa utilice ficheros de configuracin pero tambin los reescriba lmismo es mejor no marcarlos como conffiles. Si lo haces, dpkg informar a los usuarios queverifiquen los cambios de estos ficheros cada vez que lo actualicen.

    Tambin deberas considerar no marcar el fichero como un conffile si el programa que estsempaquetando requiere que cada usuario modifique su fichero de configuracin para podertrabajar.

    Puedes tomar ejemplos de ficheros de configuracin de los guiones ya existentes de desarro-lladores, para ms informacin consulta postinst.ex, preinst.ex, postrm.ex y prerm.ex en lapgina 30.

    Puedes eliminar el fichero conffiles del directorio debian/ si tu programa no tiene conffi-les.

    5.3. cron.d.ex

    Si tu paquete requiere tareas peridicas para funcionar adecuadamente, puedes usar este fi-chero como patrn.

    Ten en cuenta que sto no incluye la rotacin de archivos de registro, para hacer eso consultadh_installlogrotate(1) y logrotate(8).

    Elimina el fichero si el paquete no utiliza dichas tareas.

    5.4. dirs

    Este fichero especifica los directorios que se necesitan pero que por alguna razn no se creanen un proceso de instalacin normal (make install).

    Por omisin, tiene este aspecto:

    1 usr/bin2 usr/sbin

  • Captulo 5. Otros ficheros en el directorio debian/. 27

    Observa que la barra precedente no est incluida. Normalmente lo cambiaramos a algo as:

    1 usr/bin2 usr/man/man1

    pero estos directorios ya se crean en el Makefile, as que no necesitaremos este fichero y lopodremos borrar.

    5.5. docs

    Este fichero especifica los nombres de los ficheros de documentacin que dh_installdocs insta-lar en el directorio temporal.

    Por omisin, se incluirn todos los ficheros existentes en los directorios de ms alto nivel delcdigo que se llamen BUGS, README*, TODO etc.

    Tambin incluir algunos otros para gentoo:

    BUGSCONFIG-CHANGESCREDITSONEWSREADMEREADME.gtkrcTODO

    Tambin podemos eliminar este fichero y en su lugar listar estos ficheros en la lnea de rdenesde dh_installdocs en el fichero rules, de esta forma:

    dh_installdocs BUGS CONFIG-CHANGES CREDITS ONEWS README \README.gtkrc TODO

    Es posible que no tengas ninguno de estos ficheros en las fuentes de tu paquete. Puedes eli-minar este fichero si este es t caso. Pero no elimines la llamada a dh_installdocs desde elfichero rules porque tambin se usa para instalar el fichero copyright entre otras cosas.

    5.6. emacsen-*.ex

    Si tu paquete proporciona ficheros Emacs que pueden ser compilados a bytes en el momentode la instalacin, puede usar estos ficheros.

    dh_installemacsen(1) los instala en el directorio temporal, as que no olvides descomen-tar esta lnea en el fichero rules si los usas.

    Elimnalos si no los necesitas.

  • Captulo 5. Otros ficheros en el directorio debian/. 28

    5.7. init.d.ex

    Si tu paquete es un demonio que necesita ejecutarse en el arranque del sistema, obviamentehas desatendido mi recomendacin inicial, o no? :-)

    Este fichero es prcticamente un esqueleto genrico para un fichero de guiones en /etc/init.d/, as que probablemente tendrs que editarlo y mucho. dh_installinit(1) loinstalar en el directorio temporal.

    Elimina el fichero si no lo necesitas.

    5.8. manpage.1.ex, manpage.sgml.es

    El programa debera tener una pgina de manual. Cada uno de estos ficheros es una plantillaque puedes rellenar en el caso de que no tengas una.

    Las pginas de manual se escriben normalmente con nroff(1). El ejemplo manpage.1.exest tambin escrito con nroff. Consulta la pgina de manual man(7) para una breve descrip-cin de como editar el fichero.

    Por otro lado, puede que prefieras escribir usando SGML en lugar de nroff. En este caso, puedesusar la plantilla manpage.sgml.ex. Si haces esto, tendrs que:

    instalar el paquete docbook-to-man

    aadir docbook-to-man a la lnea de Build-Depends en el fichero de control

    eliminar el comentario de la llamada a docbook-to-man en la regla build de tu ficherorules

    Y recuerda renombrar el fichero a algo como gentoo.sgml!

    La pgina final del nombre debera incluir el nombre del programa que est documentando,asi que lo renombraremos de manpage a gentoo. El nombre del fichero incluye tambin.1 como primer sufijo, lo que significa que es una pgina de manual para una programa deusuario. Asegurate de verificar que esa seccin es la correcta. Aqu tienes una pequea lista delas secciones de las pginas de manual.

    Seccin | Descripcin | Notas1 Ordenes de Usuario Programas o guiones ejecutables.2 Llamadas al Sistema Funciones que ofrece el ncleo.3 Llamadas a Bibliotecas Funciones dadas por las bibliotecas del sistema.4 Ficheros Especiales Generalmente se encuentran en /dev.5 Formatos de Fichero Por ejemplo, el formato del /etc/passwd.6 Juegos U otros programas frvolos.7 Paquetes de Macros Como las macros de man.8 Administracin del Sist. Programas que slo suele ejecutar el superusuario.9 Rutinas del Ncleo Llamadas al sistema no estndar.

  • Captulo 5. Otros ficheros en el directorio debian/. 29

    As que la pgina de manual de gentoo debera llamarse gentoo.1. Para los programas de Xpuedes aadir una x a la seccin, por ejemplo, gentoo.1x. No haba una pgina de manualgentoo.1 en el paquete fuente asi que la escrib usando la informacin del ejemplo y de losdocumentos del programador original.

    5.9. menu.ex

    Los usuarios de X Windows suelen tener un gestor de ventanas con mens que pueden adap-tarse para lanzar programas. Si tienen instalado el paquete menu de Debian, se crear un con-junto de mens para cada programa del sistema para ellos.

    ste es el fichero menu.ex que dh_make crea por omisin:

    ?package(gentoo):needs="X11|text|vc|wm" section="Apps/lea-manual-menu"\title="gentoo" command="/usr/bin/gentoo"

    El primer campo tras la coma (needs) son las necesidades, y especifica qu tipo de interfaznecesita el programa. Cambia sta a una de las alternativas que se listan, como por ejemplotext o X11.

    Lo siguiente (section) es la seccin donde deberan aparecer la entrada del men ydel submen. La lista actual de secciones est en: /usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1

    El campo title es el nombre del programa. Puedes comenzar este en maysculas si lo quieres,pero hazlo lo ms corto que puedas.

    Finalmente, el campo command es la orden que ejecuta el programa.

    Ahora cambiaremos la entrada del men por sta:

    ?package(gentoo): needs="X11" section="Apps/Tools" title="Gentoo" command="gentoo"

    Tambin puedes aadir otros campos como son longtitle (ttulo largo), icon (icono),hints (pistas), etc. Para ms informacin consulta menufile(5), update-menus(1) y/usr/share/doc/debian-policy/menu-policy.html/.

    5.10. watch.ex

    Este fichero se usa para configurar los programas uscan(1) y uupdate(1) (en el paquetedevscripts), que se usan para vigilar el servidor de donde obtuviste las fuentes originales.

    Esto es lo que he puesto yo:

  • Captulo 5. Otros ficheros en el directorio debian/. 30

    # watch control file for uscan# Site Directory Pattern Version Scriptftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate

    Pista: conctate a Internet, e intenta ejecutar el programa uscan en el directorio donde hascreado el fichero. Consulta la pgina de manual para ms detalles.

    5.11. ex.package.doc-base

    Si tu paquete tiene documentacin aparte de las pginas de manual y documentos info,deberas usar el fichero doc-base para registrarla, as el usuario puede encontrarlos condhelp(1), dwww(1) o doccentral(1).

    Esto incluye generalmente ficheros HTML, PS y PDF que se instalen en /usr/share/doc/nombre_de_paquete/.

    As es como el fichero doc-base de gentoo gentoo.doc-base debe ser:

    Document: gentooTitle: Gentoo ManualAuthor: Emil BrinkAbstract: This manual describes what Gentoo is, and how it can be used.Section: Apps/Tools

    Format: HTMLIndex: /usr/share/doc/gentoo/html/index.htmlFiles: /usr/share/doc/gentoo/html/*.html

    Para informacin sobre el formato del fichero revisa install-docs(8) y el manual dedoc-base en /usr/share/doc/doc-base/doc-base.html/index.html.

    Encontrar ms detalles de la instalacin de documentacin adicional en Instalacin en unsubdirectorio en la pgina 9.

    5.12. postinst.ex, preinst.ex, postrm.ex y prerm.ex

    Estos ficheros se llaman guiones del desarrollador (maintainer scripts, N. del T.), y son guio-nes que se colocan en el rea de control del paquete y que dpkg ejecuta cuando tu paquete seinstala, se actualiza o se elimina.

    Por ahora, deberas intentar evitar editar manualmente estos guiones si puedes porque suelenhacerse muy complejos. Para ms informacin lee el manual de normas, captulo 6, y echa unvistazo a los ejemplos dados por dh_make.

  • 31

    Captulo 6

    Construir el paquete

    Deberamos estar preparados para construir el paquete.

    6.1. Reconstruccin completa

    Entra en el directorio principal del programa y ejecuta la siguiente orden:

    dpkg-buildpackage -rfakeroot

    Esto lo har todo por t:

    limpia el rbol del cdigo (debian/rules clean), usando fakeroot

    construye el paquete de cdigo (dpkg-source -b)

    construye el programa (debian/rules build)

    construye el paquete binario (debian/rules binary), usando fakeroot

    firma el fichero fuente .dsc, usando gnupg

    crea y firma el fichero de subida .changes, usando dpkg-genchanges y gnupg

    Lo nico que se te pedir es que escribas tu contrasea secreta de la clave GPG, dos veces.

    Despus de hacer todo esto, vers las siguientes lneas en el directorio encima del que est (~/gentoo/):

    gentoo_0.9.12.orig.tar.gz

    Este es el cdigo fuente original comprimido, simplemente se ha renombrado para seguirlos estndares de Debian. Ntese que ha sido creado usando la opcin -f de dh_makecuando lo ejecutamos en el inicio.

  • Captulo 6. Construir el paquete 32

    gentoo_0.9.12-1.dsc

    Este es un sumario de los contenidos del cdigo fuente. Este fichero se genera apartir del fichero de control y se usa cuando se descomprimen las fuentes condpkg-source(1). Este fichero est firmado con GPG de forma que cualquiera puedaestar seguro de que es realmente suyo.

    gentoo_0.9.12-1.diff.gz

    Este fichero comprimido contiene todos y cada uno de los cambios que hizo al cdigofuente original, en un formato conocido como diff unificado. El programa que lo hacey lo usa es dpkg-source(1). Precaucin: si no renombras el archivo comprimido origi-nal nombre_de_paquete_versin.orig.tar.gz dpkg-source fallar al generar el fichero.diff.gz!

    Si alguien quiere volver a crear tu paquete desde cero, puede hacerlo fcilmente usandolos tres ficheros de arriba. El proceso de extraccin es trivial: slo se debe copiar los tresficheros en algn lado y ejecutar dpkg-source -x gentoo_0.9.12-1.dsc.

    gentoo_0.9.12-1_i386.deb

    Este es el paquete binario completo. Puedes usar dpkg para instalar o eliminar tanto estepaquete como cualquier otro.

    gentoo_0.9.12-1_i386.changes

    Este fichero describe todos los cambios hechos en la revisin actual del paquete, y seusa por los programas de gestin del archivo FTP para instalar los paquetes binarios yfuentes en l. Se genera parcialmente a partir del fichero changelog y el fichero .dsc.Este fichero est firmado con GPG, de forma que cualquiera puede estar an ms segurode que es realmente tuyo.

    Mientras sigues trabajando en el paquete, ste cambiar su comportamiento y se le aadi-rn nuevas funciones. Las personas que descarguen tu paquete pueden leer este fichero yver qu ha cambiado. Los programas de mantenimiento del archivo de Debian, tambinenviarn el contenido de este fichero a la lista de correo debian-devel-changes.

    Las largas listas de nmeros en los ficheros .dsc y .changes son las sumasMD5 para los ficheros.Las personas que descarguen estos ficheros pueden comprobarlos con md5sum(1) y si losnmeros no coinciden, sabrn que el fichero est corrupto o ha sido modificado.

    6.2. Reconstruccin rpida

    Con un paquete grande, puede que no quieras recompilar desde cero cada vez que tocas undetalle en el fichero debian/rules. Para propsitos de prueba, puedes hacer un fichero .debsin necesidad de recompilar las fuentes originales de esta forma:

    fakeroot debian/rules binary

  • Captulo 6. Construir el paquete 33

    Una vez que has terminado la puesta a punto, recuerda reconstruir el paquete siguiendo elprocedimiento adecuado que est arriba. Puede que no seas capaz de enviar correctamente elpaquete si intentas enviar los archivos .deb construidos de esta forma.

    6.3. La orden debuild

    Puedes automatizar an ms el proceso de construccin de paquetes con la orden debuild.Vese debuild(1).

    La personalizacin de la orden debuild puede hacerse a travs de /etc/devscripts.confo ~/.devscripts. Te sugiero al menos los siguientes valores:

    DEBSIGN_KEYID="Tu_ID_clave_GPG"DEBUILD_DPKG_BUILDPACKAGE_OPTS="-i -ICVS -I.svn"

    Con estos valores, puedes construir paquetes siempre con tu clave GPG y evitar incluir com-ponentes no deseados. (Esto tambin es bueno para patrocinar). Por ejemplo, limpiar el cdigoy reconstruir el paquete desde una cuenta de usuario es tan simple como:

    debuild cleandebuild

    6.4. Los sistemas dpatch y quilt

    El uso de las rdenes dh_make y dpkg-buildpackage crear un gran fichero diff.gz quecontendr los archivos de mantenimiento del paquete en debian/ as como los parches de losficheros fuente. Este tipo de paquetes es un poco engorroso de inspeccionar y entender paracada una de las modificaciones de cdigo posteriores. Esto no es muy bueno. 1

    Se han propuesto y se utilizan distintos mtodos para la gestin de conjuntos de parches enDebian. Los sistemas dpatch y quilt son los dos ms simples de todos los propuestos. Otrosson dbs, cdbs, etc.

    Un paquete que haya sido empaquetado correctamente con el sistema dpatch o quilt tie-ne las modificaciones al cdigo fuente claramente documentadas como un conjunto de fiche-ros parche de tipo -p1 en debian/patches/ y el rbol de cdigo permanece ms alldeldirectorio debian/. Si ests pidiendo a un patrocinador que suba tu paquete, este clara se-paracin y documentacin de los cambios son muy importantes para acelerar la revisin delpaquete por parte del patrocinador. El modo de empleo de dpatch y quilt se explica endpatch(1), dpatch-edit-patch(1) y quilt(1). Ambos programas ofrecen ficheros que

    1Si no eres todava un Desarrollador de Debian y le pides a tu patrocinador que te suba un paquete tras revi-sarlo, deberas hacer el paquete lo ms fcil posible para que l pueda revisarlo.

  • Captulo 6. Construir el paquete 34

    se pueden incluir en debian/rules: /usr/share/dpatch/dpatch.make y /usr/share/quilt/quilt.make.

    Cuando alguien (incluyndote a ti) proporciona un parche para las fuentes, modificar el pa-quete con es muy sencillo:

    Edita el parche para crear un parche -p1 sobre el rbol el cdigo fuente.En el caso de dpatch, aade una cabecera empleando la orden dpatchpatch-template.Pon ese fichero en debian/patchesAade el nombre de fichero de este parche a debian/patches/00list (en dpatch) odebian/patches/series (en quilt).

    Adems, dpatch puede crear parches dependientes de la arquitectura usando macros CPP.

    6.5. Incluir orig.tar.gz para subir

    Cuando subes por primera vez un paquete al archivo, necesitas incluir las fuentes originalesorig.tar.gz. Si la versin del paquete no es una revisin de Debian -0 o -1, debes pro-porcionarle la opcin -sa a la orden dpkg-buildpackage. Por otro lado, la opcin -sdforzar la exclusin del cdigo original orig.tar.gz.

  • 35

    Captulo 7

    Cmo comprobar tu paquete paraencontrar fallos

    7.1. Los paquetes lintian y linda

    Ejecuta lintian(1) y linda(1) sobre tu fichero de cambios .changes. Estos programas com-probarn muchos errores comunes al empaquetar. Las rdenes es:

    lintian -i gentoo_0.9.12-1_i386.changeslinda -i gentoo_0.9.12-1_i386.changes

    Por supuesto, cambia el nombre de fichero con el nombre del fichero de cambios generado portu paquete. Si parece que hay algunos errores (lneas que comienzan por E:), lee la explicacin(lneas N:), corrige errores, y reconstruye como se describe en Reconstruccin completa enla pgina 31. Las lneas que comienzan con W: son slo avisos (warnings, N. del T.), as queafina el paquete o verifica que los avisos son falsos (y haz que lintian los acepte, consulta ladocumentacin para ms detalles).

    Observa que puedes construir el paquete con dpkg-buildpackage y ejecutar lintian ylinda todo con slo una orden si utilizas debuild(1).

    7.2. La orden mc

    Puedes descomprimir el contenido del paquete *.deb con la orden dpkg-deb(1). Puedeslistar el contenido de un paquete Debian con debc(1).

    Este proceso puede ser muy intuitivo si empleamos un gestor de ficheros como mc(1), quepermite visionar tanto el contenido del paquete *.deb, como el de los ficheros *.diff.gz y*.tar.gz.

  • Captulo 7. Cmo comprobar tu paquete para encontrar fallos 36

    Vigila que no haya ficheros innecesarios extra o de tamao cero, tanto en el binario como enel paquete fuente. A veces, hay cosas que no se limpiaron adecuadamente, debes ajustar tufichero rules para arreglar esto.

    Pista: zgrep ^+++ ../gentoo_0.9.12-1.diff.gz te dar una lista de tus cambioso contribuciones a las fuentes, y dpkg-deb -c gentoo_0.9.12-1_i386.deb o debcgentoo_0.9.12-1_i386.changes listar los ficheros en el paquete binario.

    7.3. La orden debdiff

    Puedes comparar la lista de ficheros de dos paquetes binarios de Debian con la ordendebdiff(1). Este programa es til para verificar que no hay ficheros que se hayan cambiadode sitio o eliminado por error, y que no se ha realizado ningn otro cambio no deseado al actua-lizar el paquete. Puedes comprobar un grupo de ficheros *.deb simplemente con debdiffpaquete-viejo.change paquete-nuevo.change.

    7.4. La orden interdiff

    Puedes comparar dos ficheros diff.gz con la orden interdiff(1). Esto es muy til paraverificar que no se han realizado cambios inadvertidos por el mantenedor al actualizar el pa-quete. Ejecuta interdiff -z paquete-viejo.diff.gz paquete-nuevo.diff.gz.

    7.5. La orden debi

    Instala el paquete para probarlo t mismo, por ejemplo, usando la orden debi(1) como supe-rusuario. Intenta instalarlo y ejecutarlo en otras mquinas distintas de la tuya, y presta atencinpara detectar errores o avisos tanto en la instalacin como en la ejecucin del programa.

    7.6. El paquete pbuilder

    El paquete pbuilder es muy til para conseguir un entorno limpio (chroot) donde verifi-car las dependencias. Esto asegura una construccin limpia desde el cdigo en los programasque realizan la compilacin automtica de paquetes para diferentes arquitecturas y evita fallosserios del tipo FTBFS (Fallo al construir desde la fuente o Fail to Build From Source), queson siempre del tipo RC (fallos criticos o release critical). Para ms informacon del paquetedebian auto-builder vase http://buildd.debian.org/.

    El uso ms bsico del paquete pbuilder es la ejecucin directa de la orden pbuilder comoadministrador. Por ejemplo, puedes construir un paquete si escribes las siguientes rdenes enel directorio donde se encuentran los ficheros .orig.tar.gz, .diff.gz y .dsc.

  • Captulo 7. Cmo comprobar tu paquete para encontrar fallos 37

    root # pbuilder create # si se ejecuta por segunda vez, pbuilder updateroot # pbuilder build foo.dsc

    Los paquetes recin construidos se pueden encontrar en /var/cache/pbuilder/result/y el propietario ser el usuario administrador.

    La orden pdebuild te ayuda a usar las funciones del paquete pbuilder como usuariosin permisos de administracin. Desde el directorio raz del cdigo fuente, con el archivoorig.tar.gz en el directorio padre, escribe las siguientes rdenes:

    $ sudo pbuilder create # si se ejecuta por segunda vez, sudo pbuilder update$ pdebuild

    Los paquetes construidos se pueden encontrar en /var/cache/pbuilder/result/ y elpropietario no ser el administrador. 1

    Si deseas aadir fuentes de apt para que las utilice el paquete pbuilder, configuraOTHERMIRROR en ~/.pbuilderrc o /etc/pbuilderrc y ejecuta (para sarge):

    $ sudo pbuilder update --distribution sarge --override-config

    Es necesario el uso de --override-config para actualizar las fuentes de apt dentro delentorno chroot.

    Vase http://www.netfort.gr.jp/~dancer/software/pbuilder.html,pdebuild(1), pbuilderrc(5), y pbuilder(8) .

    1Actualmente, te sugiero configurar el sistema dando al directorio /var/cache/pbuilder/result/ permi-sos de escritura a los usuarios, y editando ~/.pbuilderrc o /etc/pbuilderrc para incluir:

    AUTO_DEBSIGN=yes

    Esto te permitir firmar los paquetes generados con la clave secreta GPG que tienes en ~/.gnupg/. Puesto que elpaquete pbuilder est aun en desarrollo, tendrs que comprobar como funciona la configuracin consultando laltima documentacin oficial.

  • Captulo 7. Cmo comprobar tu paquete para encontrar fallos 38

  • 39

    Captulo 8

    Enviar el paquete

    Ahora que has probado tu nuevo paquete en profundidad, estars preparado para comenzar elproceso de nuevo desarrollador de Debian tal y como se describe en: http://www.debian.org/devel/join/newmaint

    8.1. Enviar al archivo de Debian

    Tendrs subir el paquete al archivo deDebian una vez que llegues a ser un desarrollador oficial.Puedes hacer esto manualmente, pero es ms fcil hacerlo con las herramientas automticas yadisponibles como dupload(1) o dput(1). A continuacin describiremos como hacerlo condupload.

    En primer lugar, tienes que crear un fichero de configuracin de dupload. Puedes hacerloeditando el fichero general del sistema /etc/dupload.conf, o creando tu propio fichero~/.dupload.conf con lo que tu quieras cambiar. Pon algo como esto en el fichero:

    package config;

    $default_host = "anonymous-ftp-master";

    $cfg{anonymous-ftp-master} = {fqdn => "ftp-master.debian.org",method => "ftp",incoming => "/pub/UploadQueue/",# files pass on to dinstall on ftp-master which sends emails itselfdinstall_runs => 1,

    };

    1;

    Por supuesto, cambia el nombre por el tuyo y lee la pgina de manual dupload.conf(5)para comprender qu significa cada una de estas opciones.

  • Captulo 8. Enviar el paquete 40

    La opcin $default_host es la ms problemtica, determina cual de las colas de enviosse usar por defecto. anonymous-ftp-master es la primaria, pero es posible que quierasusar otra ms rpida. Para ms informacin sobre las colas de envo, consulta la Referen-cia del desarrollador, en concreto la seccin Uploading a package, en /usr/share/doc/developers-reference/ch-pkgs.en-us.iso-8859-1.html#s-upload

    Ahora conecta con tu proveedor de Internet, y ejecuta la orden:

    dupload gentoo_0.9.12-1_i386.changes

    dupload comprueba que las sumas md5 coinciden con aquellas en el fichero .changes, y teavisar de rehacer el paquete como se describe en Reconstruccin completa en la pgina 31para poder enviarlo correctamente.

    Si encuentras algn problema con la subida del paquete a ftp://ftp-master.debian.org/pub/UploadQueue/, puedes arreglarlo subiendo manualmente aftp://ftp-master.debian.org/pub/UploadQueue/ a travs de ftp un fichero*.commands firmado con gnupg. 1. Por ejemplo, usando hello.commands:

    -----BEGIN PGP SIGNED MESSAGE-----

    Uploader: Roman Hodek Commands:rm hello_1.0-1_i386.debmv hello_1.0-1.dsx hello_1.0-1.dsc

    -----BEGIN PGP SIGNATURE-----Version: 2.6.3ia

    iQCVAwUBNFiQSXVhJ0HiWnvJAQG58AP+IDJVeSWmDvzMUphScg1EK0mvChgnuD7hBRiVQubXkB2DphLJW5UUSRnjw1iuFcYwH/lFpNpl7XP95LkLX3iFza9qItw4k2/qtvylZkmIA9jxCyv/YB6zZCbHmbvUnL473eLRoxlnYZd3JFaCZMJ86B0Ph4GFNPAfZ4jxNrgh7Bc==pH94-----END PGP SIGNATURE-----

    8.2. Enviar a un archivo privado

    Puedes crear un repositorio personal de paquetes en URL=http://people.debian.org/~nombre_de_cuenta(si eres desarrollador oficial) con una simple llamada a dupload -tnombre_de_objetivo. Para hacerlo deberas aadir lo siguiente al fichero /etc/dupload.conf:

    1Vase ftp://ftp-master.debian.org/pub/UploadQueue/README. Como alternativa, puedes usar laorden dcut de el paquete dput.

  • Captulo 8. Enviar el paquete 41

    # Cuenta de desarrollador$cfg{nombre_de_objetivo} = {

    fqdn => "people.debian.org",method => "scpb",incoming => "/home/nombre_de_cuenta/public_html/package/",# No necesitas anunciarlodinstall_runs => 1,

    };$cfg{nombre_de_objetivo}{preupload}{changes} = "

    echo mkdir -p public_html/package | ssh people.debian.org 2>/dev/null ;echo Directorio de paquetes creado!";

    $cfg{nombre_de_objetivo}{postupload}{changes} = "echo cd public_html/package ;dpkg-scanpackages . /dev/null >Packages || true ;dpkg-scansources . /dev/null >Sources || true ;gzip -c Packages >Packages.gz ;gzip -c Sources >Sources.gz | ssh people.debian.org 2>/dev/null ;echo Archivo de paquetes creado!";

    Aqu, el repositorio APT se construye mediante una simple ejecucin remota con SSH. Losficheros de sobreescritura que necesitan dpkg-scanpackages y dpkg-scansources seespecifican como /dev/null. Esta tcnica la puede emplear alguien que no es desarrolla-dor de Debian para almacenar sus paquetes en su pgina personal. Tambin se pueden usarapt-ftparchive o otros programas para crear un repositorio APT.

  • Captulo 8. Enviar el paquete 42

  • 43

    Captulo 9

    Actualizar el paquete

    9.1. Nueva revisin Debian del paquete

    Supongamos que se ha creado un informe de fallo en tu paquete con el nmero #54321, yque describe un problema que puedes solucionar. Para crear una nueva revisin del paquete,necesitas:

    Corregir, por supuesto, el problema en las fuentes del paquete.

    Aadir una nueva revisin en el fichero de cambios (changelog, N. del T.) de Debian,con dch -i, o explcitamente con dch -v - y entoncesinsertar los comentarios con tu editor favorito.

    Sugerencia: Como obtener la fecha fcilmente en el formato requerido? Usa822-date, o date -R.

    Incluir una breve descripcin del error y su solucin en la entrada del fichero de cambios,seguido por: Closes: #54321. De esta forma, el informe del error ser automgicamentecerrado por los programas de gestin del archivo en el momento en que tu paquete seacepte en el archivo de Debian.

    Repite lo que hiciste en Reconstruccin completa en la pgina 31, Cmo comprobar tupaquete para encontrar fallos en la pgina 35, y Enviar el paquete en la pgina 39. Ladiferencia es que esta vez, las fuentes originales del archivo no se incluirn, dado que nohan cambiado y ya existen en el archivo de Debian.

    9.2. Nueva versin del programa fuente (bsico)

    Ahora consideremos una situacin diferente y algo ms complicada: ha salido una versinnueva de las fuentes originales, y, por supuesto, deseas empaquetarla. Debes hacer lo siguiente:

  • Captulo 9. Actualizar el paquete 44

    Descarga las nuevas fuentes y pon el archivo tar (pongamos que se llamagentoo-0.9.13.tar.gz) un directorio por encima del antiguo rbol de fuentes (porejemplo ~/gentoo/).

    Entra en el antiguo directorio de las fuentes y ejecuta:

    uupdate -u gentoo-0.9.13.tar.gz

    Por supuesto, reemplaza este nombre de fichero con el nombre de las fuentes de tuprograma. uupdate(1) renombrar apropiadamente este fichero tar, intentar apli-car los cambios de tu fichero .diff.gz previo y actualizar el nuevo fichero debian/changelog.

    Cambia al directorio ../gentoo-0.9.13, el nuevo directorio fuente del paquete, yrepite la operacin que hiciste en Reconstruccin completa en la pgina 31, Cmo com-probar tu paquete para encontrar fallos en la pgina 35, y Enviar el paquete en la pgi-na 39.

    Observa que si has puesto el fichero debian/watch como se describe en watch.ex en lapgina 29, puedes ejecutar uscan(1) para buscar automticamente fuentes revisadas, descar-garlas, y ejecutar uupdate

    9.3. Nueva versin de las fuentes (realista)

    Cuando prepares paquetes para el archivo de Debian, debes comprobar los paquetes resultan-tes en detalle. A continuacin, tienes un ejemplo ms realista de este procedimiento.

    1 Verificar los cambios en las fuentes.De las fuentes, lee los ficheros changelog, NEWS, y cualquier otra documentacinque se haya publicado con la nueva versin.Ejecuta diff -urN entre las fuentes viejas y las nuevas para obtener una visindel alcance de los cambios, donde se ha trabajado ms activamente (y por tantodonde podran aparecer nuevas erratas), y tambin busca cualquier cosa que pudie-ra parecer sospe