[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [maint-guide] Actualización - para revisión



Hola!

Aquí está el documento para revisión.
Tiene un par de traducciones un poco forzadas, pero están comentadas junto con 
lo que dice en ingles,  a ver que se os ocurre que quede mejor.

Un saludo,
Ana

El Miércoles, 15 de Diciembre de 2004 00:01, Javier Fernández-Sanguino Peña 
escribió:
> On Tue, Dec 14, 2004 at 01:18:07AM +0100, Anja wrote:
> > Igualmente, ya mandaré el archivo a la lista por si alguien más le quiere
> > hechar un ojo.
>
> En realidad, la revisión de los documentos dentro de la lista es "condición
> sine qua non" para que los documentos se publiquen :-)
>
> Saludos
>
> Javier
<!doctype debiandoc system>
<!-- comentarios:
* URL's a package manual?
* por qué a veces usa tt y otras no para los programas ?
-->

<debiandoc>

 <book>

  <titlepag>

   <title>Guía del Nuevo Desarrollador de Debian</title>

   <author>Josip Rodin <email/joy-mg@debian.org/
   </author>

   <author>Traducido por: 
   Javier Fernández-Sanguino Peña <email/jfs@computer.org/
   </author>

   <author>Traducido por: 
   David Martinez <email/david.martinez@rediris.es/
   </author>

   <!--
   <author>Traducido por: 
   Ana Beatriz Guerrero López <email/anja_isbilia@yahoo.es/
   </author>
  -->

   <version>versión 1.2, 6 de Abril 2001.</version>

   <copyright>
   <copyrightsummary>Copyright &copy; 1998-2002 Josip Rodin.
   Translation Copyright &copy; 1999, 2000, 2001 Javier Fernández-Sanguino Peña.</copyrightsummary>

   <p>Este documento puede ser usado en los términos descritos en 
   la Licencia Pública GNU versión 2 o posterior.

   <p>Este documento se ha hecho usando estos dos documentos como
   ejemplo:

   <p>Making a Debian Package (AKA the Debmake Manual), copyright &copy;
   1997 Jaldhar Vyas.

   <p>The New-Maintainer's Debian Packaging Howto, copyright &copy; 1997
   Will Lowe.
   </copyright>

  </titlepag>

  <toc sect>

  <chapt id="start">Empezando "de la Forma Correcta".

  <p>Este documento tratará de describir cómo se construye un paquete
  Debian GNU/Linux para el usuario común de Debian (y futuros
  desarrolladores) en un lenguaje informal, y con multitud de
  ejemplos. Hay un antiguo dicho romano que dice, <em>¡Longum iter est
  per preaecepta, breve et efficax per exempla!</em> (¡Es un largo
  camino con las reglas, pero corto y eficiente con ejemplos!)

  <p>Una de las cosas que hace a Debian una de las distribuciones más
  importantes del mercado, es su sistema de paquetes. Aunque hay una
  gran cantidad de programas disponibles en forma de paquetes de
  Debian, algunas veces, necesitarás instalar programas que no estén
  disponible en este formato. Puedes que te preguntes cómo harás
  tus propios paquetes y que pienses que 
  quizás ésta sea una tarea demasiada difícil. Bueno, si eres un
  principiante en Linux, sí es duro, pero si eres un novato, no
  deberías estar leyendo esto ahora mismo. :-) Necesitas saber algo
  sobre programación en Unix, pero desde luego no tienes que ser un
  maestro.

  <p>Sin embargo, hay una cosa que es verdad: para crear y mantener
  paquetes Debian adecuadamente, necesitarás muchas horas. 
  Para que nuestro sistema trabaje sin errores, nuestros mantenedores
  necesitan ser técnicamente competentes y concienzudos.

  <p>Este documento explicará cada pequeño paso (al principio quizás
  irrelevantes), y te ayudará a crear tu primer paquete, ganar
  alguna experiencia en construir próximas versiones de él, y quizás
  otros paquetes después.
  
  <p>Se pueden obtener versiones nuevas de este documento en línea
  en <url name="http://www.debian.org/doc/maint-guide/";
  id="http://www.debian.org/doc/maint-guide/";> y en el paquete
  'maint-guide-es'.

  <sect id="needprogs">Programas que necesitas para el desarrollo.

  <p>Antes de empezar nada, deberías asegurarte que tienes instalados
  algunos paquetes adicionales necesarios para el desarrollo. Observa
  que en la lista no están incluidos paquetes cuyas prioridades son `esencial' o
  `requerido' que se suponen ya instalados.

  <p>En la revisión de este documento se han actualizado los paquetes
  para Debian 2.2 (`potato') y 3.0 (`woody').

  <p>Los siguientes paquetes vienen en una instalación estándar de
  Debian, así que probablemente ya los tengas (junto con los
  paquetes de los que dependen). Aún así, deberías comprobarlo con
  `dpkg -s &lt;paquete&gt;`.

  
  <list>
  <item><package/dpkg-dev/ - este paquete contiene las herramientas
  necesarias para desempaquetar, construir y enviar paquetes fuente de
  Debian. (vease <manref name="dpkg-source" section="1">)
 
  <item><package/file/ - este útil programa puede determinar de qué
  tipo es un fichero. (vease <manref name="file" section="1">)

  <item><package/gcc/ - el compilador de C de GNU, necesario si tu 
  programa como la gran mayoría, está escrito en el lenguaje de
  programación C. (vease <manref name="gcc" section="1">,
  Este paquete también vendrá con otros paquetes como
  <package/binutils/ que incluye programas para ensamblar y enlazar
  ficheros ficheros objeto
  (vease `info binutils` en el paquete <package/binutils-doc/)
  y el preprocesador de C en el paquete <package/cpp/. 
  (vease <manref name="cpp" section="1">)

  <item><package/libc6-dev/ - las librerías y archivos de cabecera de C
  que gcc necesita para enlazar y crear ficheros objeto. 
  (vease `info libc` en el paquete <package/glibc-doc/)
  
  <item><package/make/ - habitualmente la creación de un programa consta de
  varios pasos. En lugar de ejecutar los mismos comandos una y otra
  vez, puedes utilizar este programa para automatizar el proceso,
  creando `Makefile's. (vease `info make`)

  <item><package/patch/ - esta utilidad es muy práctica, ya que permite
  tomar un fichero que contiene un listado de diferencias (producido
  por el programa diff) y aplicárselas al fichero original,
  produciendo una versión "parcheada". (vease <manref name="patch"
  section="1">)

  <item><package/perl/ - Perl es uno de los lenguajes interpretados
  para hacer guiones (scripts) más usados en los sistemas Un*x de hoy
  en dia, comúnmente se refiere a él como la "Navaja Suiza de Unix". 
  (vease <manref name="perl" section="1">)
  </list>


  <p>Probablemente, necesitarás instalar además los siguientes paquetes:

  <list>
  <item><package/autoconf/ y <package/automake/ - muchos programas
  nuevos usan guiones de configuración y Makefiles procesados con la
  ayuda de programas como estos.
  (vease `info autoconf`, `info automake`)

  <item><package/dh-make/ y <package/debhelper/ - dh-make es necesario
  para crear el esqueleto de nuestro paquete ejemplo, y se usarán
  algunas de las herramientas de debhelper para crear paquetes. No son
  imprescindibles para la creación de paquetes, pero se recomiendan 
  <strong>encarecidamente</strong> para nuevos desarrolladores. Hace
  el proceso mucho más fácil al principio, y más fácil de controlar
  también más adelante. (vease <manref name="dh_make" section="1">,
  <manref name="debhelper" section="1">,
  /usr/share/doc/debhelper/README)
  
  <item><package/devscripts/ - este paquete contiene algunos guiones
  útiles para los desarrolladores, pero no son necesarios para crear
  paquetes. (vease /usr/share/doc/devscripts/README.gz)
    
  <item><package/fakeroot/ - esta utilidad te permite emular ser root
  (superusuario, n. del t.), lo cual es necesario para ciertas partes
  del proceso de construcción. (vease <manref name="fakeroot"
  section="1">)

 <item><package/gnupg/ - herramienta que te permite <em>firmar</em> 
  digitalmente los paquetes.
  Esto es especialmente importante si quieres distribuir tu paquete
  a otras personas, y ciertamente, harás esto cuando tu trabajo sea
  incluido en la distribución de Debian.
  (vease <manref name="gpg" section="1">)

  <item><package/g77/ - el compilador GNU de Fortran 77, 
  necesario si tu paquete está escrito en Fortran.
  (vease <manref name="g77" section="1">)

  <item><package/gpc/ - el compilador GNU de Pascal, 
  necesario si tu paquete está escrito en Pascal.
  Merece la pena mencionar aquí <package/fp-compiler/,
  un compilador libre de Pascal, que también es bueno en esta tarea.
  (vease <manref name="gpc" section="1">, <manref name="ppc386" section="1">)

  <item><package/imake/ and <package/xmkmf/ - algunos programas,
  normalmente aquellos hechos para X11, también usan programas para
  generar Makefiles de un conjunto de macrofunciones.
  (vease <manref name="imake" section="1">, <manref name="xmkmf" section="1">)

  <item><package/lintian/ - este es el comprobador de paquetes de Debian,
  que te indica muchos de los errores comunes después de construir un
  paquete, y explica los errores encontrados. 
  (vease <manref name="lintian" section="1">, 
  /usr/share/doc/lintian/lintian.html/index.html)
  </list>

  <p>Por último, esta documentación es de <em>gran importancia</em> 
  y debería leerse junto con este documento:

  <list>
  <item><package/debian-policy/ - incluye la estructura y contenidos
  del archivo, ciertas notas sobre diseño del SO, el Estándar de la
  Jerarquía del Sistema de Ficheros (Filesystem Hierarchy Standard,
  n. del t.), y, lo más importante para ti, es que describe los
  requisitos que debe satisfacer cada paquete para ser incluido en la
  distribución. (vease
  /usr/share/doc/debian-policy/policy.html/index.html)

  <item><package/developers-reference/ - para todos los temas no
  específicamente relacionados con los detalles técnicos de cómo
  empaquetar, tales como la estructura del archivo, cómo renombrar,
  abandonar, coger paquetes, cómo hacer NMUs (Non-Maintainer Uploads,
  o envíos por personas distintas del desarrollador, n. del t.), como
  gestionar los errores que los usuarios envíen, y cómo y cuando
  enviar los paquetes, etc.
<!-- traduzco upload por "enviar" pero no me gusta mucho - jfs -->
  (vease
  /usr/share/doc/developers-reference/developers-reference.html/index.html)
  </list>

  <p>Las breves descripciones, dadas anteriormente, sólo sirven para
  introducirte a lo que hace cada paquete. Antes de continuar, por
  favor, lee la documentación de cada programa, al menos para su uso
  normal. Puede parecerte algo duro ahora, pero más adelante estarás
  <em>muy</em> contento/a de haberla leído.

  <p>Nota: <package/debmake/ es una paquete que incluye otros programas
  con funciones similares a dh-make, pero su uso específico
  <strong>no</strong> está cubierto en este documento porque
  está desaprobado su uso.  Lee el <url
  name="manual de Debmake" id="http://www.debian.org/~jaldhar/";> para
  más información.
  

  <sect id="otherinfo">Más información.

  <p>Puedes construir dos tipos de paquetes, fuentes y binarios. Un
  paquete fuente contiene el código que puede compilar en un programa.
  Un paquete binario contiene sólo el programa terminado. ¡No mezcles
  los términos como 'fuentes de un programa' y el 'paquete fuente de
  un programa'! Por favor, lee los otros manuales si necesitas más
  detalles sobre terminología.

  <p>Debian usa el término `desarrollador' para la persona que hace
  paquetes, `autor fuente' (`upstream author, n. del t.) para la
  persona que hizo el programa, y `desarrollador fuente' (`upstream
  maintainer', n. del t.) para la persona que actualmente mantiene el
  programa fuera de Debian. Generalmente el autor y el desarrollador
  fuente son la misma 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.

  <p>Después de construir tu paquete (o mientras lo haces), deberás
  convertirte en un desarrollador oficial de Debian si deseas que tu
  programa entre en la próxima distribución (si el programa es útil,
  ¿por qué no?). Este proceso se explica en la Referencia del
  Desarrollador, por favor, léela.

  <chapt id="first">Primeros pasos.

  <sect id="choose">Elige tu programa.

  <p>Probablemente hayas escogido ya el paquete que deseas construir.
  Lo primero que necesitas hacer es comprobar si el paquete está ya
  en la distribución.
  
  Si usas la distribución `estable', quizás sea mejor que vayas a la <url
  name="página de búsqueda de paquetes"
  id="http://www.debian.org/distrib/packages";>. Si usas la <strong>actual</strong> 
  distribución `inestable', compruebalo con los comandos:
  <example>
  dpkg -s programa
  dpkg -l '*programa*'
  </example>

  <p>Si el paquete ya existe, instalalo! :-) Si te encuentras con que
  el paquete es huérfano (cuando su desarrollador es el "Debian QA Group"),
  podrías adoptarlo.
  Consulta
  <url name="la lista de paquets huérfanos" id="http://www.debian.org/devel/wnpp/orphaned";>
  y
  <url name="la lista de paquetes en espera de adopción" id="http://www.debian.org/devel/wnpp/rfa_bypackage";>
  para verificar que el paquete está libre.

  <p>Si eres capaz de adoptar el paquete, bajate las fuentes (con algo como
  <tt/apt-get source packagename/) y examínalas. 
  Este documento, desafortunadamente, no incluye información exhaustiva
  sobre la adopción de paquete.
  Afortunadamente no debería ser díficil entender como funciona el paquete
  ya que alguien ha hecho el trabajo inicial por tí.
  Aunque, sigue leyendo, muchos de los consejos de abajo serán aplicables
  para tu caso.
  
  <p>Si el paquete es nuevo, y decides que te gustaría verlo en Debian,
  haz lo siguiente:

  <list>
  <item>comprueba que no hay nadie más ya trabajando en el paquete en 
  <url name="la lists de paquetes en los que se está trabajando" id="http://www.de.debian.org/devel/wnpp/being_packaged";>.
  Si ya hay alguien trabajando en el paquete, contacta con esa persona
  si lo crees conveniente.
  Si no, intenta encontrar otro programa interesante que nadie mantenga.
  </item>
  
  <item>el programa <strong>debe</strong> tener una licencia, si es
  posible, libre en el sentido marcado por las
  <url name="Directrices de Debian para el software libre"
  id="http://www.debian.org/social_contract.html#guidelines";>.
  Si no sigue una de estas reglas, aún puede incluirse en las
  secciones `contrib' o `non-free' de Debian. Si no estás seguro/a sobre
  en qué lugar debería ir, envia el texto de la licencia a
  <email/debian-legal@lists.debian.org/ y pide consejo.
  </item>


  <item>el programa <strong>no</strong> debería ejecutarse con setuid
  root, o aún mejor: no debería tener ningún programa 'setuid' ni
  'setgid'.</item>

  <item>el programa no debería ser un demonio, o algo que vaya en los
  directorios */sbin, o abrir un puerto como root.</item>

  <item>el programa debería estar compuesto por binarios ejecutables,
  no lo intentes aún con librerías.</item>

  <item>debería tener una buena documentación, o al menos un código 
  legible, no ofuscado.
  </item>

  <item>deberías contactar con los autores del programa para
  comprobar si están de acuerdo con que se empaquete. Esto es
  importante para poder consultar estos autores sobre el programa 
  en caso de que haya problemas específicos, así que no intentes 
  empaquetar programas que no estén mantenidos.</item>

  <item>y por último pero no menos importante, deberías saber cómo
  funciona, y haberlo utilizado durante algún tiempo.</item>
  </list>

  <p>Por supuesto, esta lista es para tomar medidas de seguridad, y
  con la intención de salvarte de usuarios enfurecidos si haces algo
  mal con algún demonio setuid... Pero cuando tengas más experiencia
  en empaquetar cosas, podrás hacer este tipo de paquetes,
  incluso los desarrolladores más experimentados preguntan en la
  lista de distribución de debian-devel cuando tienen dudas. La
  gente allí te ayudará gustosamente.

  <p>Para más ayuda sobre esto, lee la Referencia del Desarrollador.

  <sect id="getit">Obtén el programa, y pruébalo.

  <p>La primera cosa a hacer es encontrar y descargar el paquete
  original. Supongo que ya tienes el código fuente que obtuviste de la
  página del autor. Las fuentes de los programas gratuitos de Linux
  generalmente vienen en formato tar/gzip, con extensión .tar.gz, y
  generalmente contienen un subdirectorio llamado programa-versión
  con todas las fuentes en él. Si tu programa viene en otro tipo de
  archivo (por ejemplo, el fichero termina en ".Z" o ".zip"),
  descomprímelo con las herramientas adecuadas, o pregunta en
  debian-mentors si no estás seguro de cómo se puede desempaquetar
  correctamente (pista: prueba `file archivo.extensión`).

  <p>Como ejemplo, usaré el programa conocido como `gentoo', un gestor
  de ficheros de X11 en GTK+. Observa que el programa ya ha sido
  empaquetado previamente pero ha cambiado sustancialmente de versión
  desde que este texto se escribió.

  <p>Crea un subdirectorio bajo tu directorio personal llamado
  'debian' o 'deb' o lo que creas apropiado (por ejemplo ~/gentoo/
  estaría bien en este caso) Y mueve a él el archivo que has
  descargado, y descomprímelo de la siguiente forma: `tar xzf
  gentoo-0.9.12.tar.gz`. Asegúrate de que no hay errores, incluso
  errores "irrelevantes", porque es muy probable que haya problemas
  desempaquetando en sistemas de otras personas, cuyas herramientas de
  desempaquetado puede que no ignoren estas anomalías.

  <p>Ahora tienes otro subdirectorio, llamado 'gentoo-0.9.12'.
  Muévete a ese directorio y lee <strong>en profundidad</strong> la
  documentación que encuentres. Está generalmente en ficheros que se
  llaman README*, INSTALL*, *.lsm o *.html. Allí encontrarás
  instrucciones de cómo compilar e instalar el programa (muy
  probablemente asumirán que lo quieres instalar en el directorio
  /usr/local/bin: no harás esto, pero eso lo veremos más adelante en
  <ref id="destdir">).

  <p>El proceso varía de programa a programa, pero gran parte de los
  programas modernos vienen con un guión 'configure' que configura
  las fuentes para tu sistema y se asegura de que tu sistema está en
  condiciones de compilarlo. Después de configurarlo (con
  `./configure`), los programas generalmente se compilan con `make`.
  Algunos de ellos soportan `make check` para ejecutarse incluyendo
  comprobaciones automáticas. Generalmente se instalarán en sus
  directorios de destino ejecutando `make install`.
  
  <p>Ahora intenta compilar, y ejecutar el programa, para asegurarte
  de que funciona bien y que no rompe nada más mientras está
  instalándose o ejecutándose.

  <P>También, generalmente, puedes escribir `make uninstall` para
  eliminar todos los programas instalados, y `make clean` (o mejor
  `make distclean`) para limpiar el directorio donde se genera el
  programa.

  <sect id="namever">Nombre del paquete y versión

  <P>Deberías empezar a construir tu paquete en un directorio de
  fuentes completamente limpio, o simplemente con las fuentes recién
  desempaquetadas.

  <p>Para construir correctamente el paquete, debes cambiar el nombre
  original del programa en letras minúsculas (si no lo está ya), y
  deberías renombrar el directorio de fuentes a
  &lt;nombre_de_paquete&gt;-&lt;versión&gt;.

  <P> Si el nombre del programa son varias palabras, contraelas a una
  palabra o haz una abreviatura. Por ejemplo, el paquete del programa
  "el editor para X de Javi" se podría llamar javiedx o jle4x, o lo
  que decidas, siempre y cuando no se exceda de unos límites
  razonables, como 20 caracteres.

  <p>Comprueba también la versión exacta del programa (la que se
  incluye en la versión del paquete). Si el programa no está numerado
  con versiones del estilo de X.Y.Z, pero con fecha de lanzamiento,
  eres libre de utilizar la fecha como número de versión, precedida
  por "0.0" (sólo por si los desarrolladores originales deciden sacar
  una versión nueva como 1.0). Así, si la fecha de las fuentes es el
  19 de diciembre de 1998, puedes utilizar la abreviatura
  norteamericana 0.0.19981219 como número de versión. 
  
  <p>Aún así habrá
  algunos programas que ni siquiera estén numerados, en cuyo caso deberás
  contactar con el 'desarrollador fuente' para ver si tienen algún
  otro sistema de seguimiento de revisiones.

  <sect id="dh_make">'Debianización' inicial.
  <p>Asegúrate que estás en el directorio donde están las fuentes del
  programa, y ejecuta lo siguiente:

  <p><example>
  dh_make -e tu.dirección@de.desarrollador -f ../gentoo-0.9.12.tar.gz
  </example>

  <p>Por supuesto, cambia la cadena
  "tu.dirección@de.desarrollador" por tu dirección de correo
  electrónico 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 <manref name="dh_make" section="1"> para más
  detalles.

  <p>Saldrá alguna información. Te preguntará qué tipo de paquete
  deseas crear. Gentoo es un sólo paquete de binarios - crea sólo un
  binario, y, por tanto, sólo un fichero .deb - así que
  seleccionaremos la primera opción, con la tecla `s'. Comprueba la
  información que aparece en la pantalla y confirma pulsando la tecla
  &lt;intro&gt;. 
  
  <p>Como nuevo desarrollador, está desaconsejado crear
  paquetes multibinarios, o librerías, como se explicó antes. No es
  extremadamente difícil, pero sí necesita algunos conocimientos más,
  así que aquí no describiremos el proceso.

  <p>Ten en cuenta que deberías ejecutar dh_make <strong>sólo una
  vez</strong>, y que no se comportará correctamente si lo haces otra
  vez en el mismo directorio, ya "debianizado". Esto también significa
  que usarás un método distinto para crear una nueva revisión o una
  nueva versión de tu paquete en el futuro. Lee más sobre esto más
  adelante en <ref id="update">.

  <chapt id="modify">Modificando las fuentes.

  <p>Normalmente, los programas se instalan a sí mismos en el
  subdirectorio /usr/local. Pero los paquetes Debian no pueden
  utilizar este directorio ya que está reservado para el uso privado
  del administrador (o de los usuarios). Esto significa que tienes que
  mirar el sistema de construcción de tu programa, generalmente
  empezando por el Makefile. Éste es el guión que <manref name="make"
  section="1"> usará para automatizar la creación de este programa.
  Para más detalles sobre Makefiles, mira en <ref id="rules">.

  <p>Date cuenta que si tu programa usa GNU <manref name="automake"
  section="1"> y/o <manref name="autoconf" section="1">, lo que quiere
  decir que las fuentes incluyen ficheros Makefile.am y Makefile.in,
  respectivamente, necesitarás modificar esos ficheros, porque cada
  invocación de automake reescribirá los Makefile.in's con información
  generada a partir de los Makefile.am's, y cada llamada a ./configure
  hará lo mismo con los Makefile's, con información de los
  Makefile.in's. Editar los ficheros Makefile.am requiere algunos
  conocimientos de automake, sobre lo que puedes leer en la entrada
  de info para automake, mientras que editar Makefile.in's es casi
  lo mismo que editar ficheros Makefile, simplemente basta con poner
  atención en las variables, es decir, cualquier cadena que empiece y
  acabe por `@'s, como por ejemplo @CFLAGS@ o @LN_S@, que se rellenan
  con cada vez que se ejecute ./configure.

  <p>Ten en cuenta que no hay espacio aquí para entrar en
  <em>todos</em> los detalles respecto a los arreglos, pero a continuación,
  están algunos de los problemas frecuentes.

  <sect id="destdir">Instalación en un subdirectorio.

  <p>La mayor parte de los programas tienen alguna manera de
  instalarse en la estructura de directorios existente en tu sistema,
  para que los binarios sean incluidos en tu $PATH, y para que
  encuentre la documentación y páginas de manual en los lugares
  habituales. Sin embargo, si lo instalas de esta forma, el programa
  se instalará entre las cosas que ya están en tu sistema. 
  Esto dificultará a las herramientas de paquetes, averiguar que 
  archivos pertenecen a tu paquete y cuales no.
  
  <p>Por lo tanto, necesitas hacer algo más: instalar el programa en
  un subdirectorio temporal desde el cual las herramientas de desarrollo
  construirán el paquete .deb que se pueda instalar. Todo
  lo que se incluye en este directorio será instalado en el sistema
  del usuario cuando instale su paquete, la única diferencia es que
  dpkg instalará los ficheros en el directorio raíz.
  
  <p>Este directorio temporal se creará bajo el directorio debian/
  que está dentro del árbol del código descomprimido,
  generalmente con el nombre <file>debian/tmp</file> o
  <file>debian/packagename</file>.

  <p>Ten en cuenta que aunque necesitas que el programa se instale en
  debian/packagename, también necesitas que se comporte correctamente cuando se
  instale en el directrio raíz, es decir, cuando se instale desde el
  paquete .deb. Así que no deberías permitir que al construirse,
  lo haga con cadenas como 
  <tt>/home/me/deb/gentoo-0.9.12/usr/share/gentoo</tt> 
  dentro de los archivos del paquete.

  <p>Con programas que utilicen la herramienta GNU autoconf, ésto será bien
  sencillo. La mayoría de estos programas tienen makefiles que por defecto,
  permiten configurar la instalación en un subdirectorio cualquiera, aunque
  recordando que por ejemplo /usr, es el prefijo normal.
  Cuando detecte que tu programa usa autoconf, dh_make pondrá las opciones 
  necesarias para hacer esto automáticamente, así que puedes dejar 
  de leer esta sección.
  Pero con otros programas, puede ser necesario que examines y edites
  los Makefiles.

  <p>Esta es la parte importante del Makefile de gentoo:

  <p><example>
  # ¿Dónde poner el binario en 'make install'?
  BIN     = /usr/local/bin
  
  # ¿Dónde poner los iconos en 'make install'? 
  ICONS   = /usr/local/share/gentoo/
  </example>

  <p>Vemos que los ficheros está configurados para instalarse bajo
  <file>/usr/local</file>.
  Cambia estas rutas a:
  
  <p><example>
  # ¿Dónde poner el binario en 'make install'?
  BIN     = $(DESTDIR)/usr/bin

  # ¿Dónde poner los iconos en 'make install'? 
  ICONS   = $(DESTDIR)/usr/share/gentoo
  </example>

  <p>¿Pero por qué en este directorio y no en otro? Porque los paquetes
  de Debian nunca se instalan bajo <file>/usr/local</file>, este árbol
  de directorios, está reservado para el uso del administrador del sistema.
  Asi que estos ficheros van bajo /usr en su lugar.

  <p>La exacta localización de los binarios, iconos, documentación,
  etc, está especificada en el Estándar de la Jerarquía del
  Sistema de Ficheros (Filesystem Hierarchy Standard, n. del t.)
  (Vease /usr/share/doc/debian-policy/fhs).
  Te recomiendo que leas las secciones que podrían concernir a tu
  paquete.
  
  <p>Así, deberíamos 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 hemos mencionado ninguna página de manual en el Makefile de gentoo,
  pero en Debian se requiere que cada programa debe tener una, asi que
  haremos una más tarde y la instalaremos en /usr/share/man/man1.

  <p>Algunos programas no usan variables en el makefile para definir
  rutas como estas. Esto significa que tendrás que editar algunos de los
  ficheros de código C para arreglarlos y que usen las rutas correctas.
  Pero, ¿donde buscar?, y exactamente, ¿el qué?
  Puedes probar a encontrarlos usando:
  
  <p><example>
  grep -rn usr/local/lib *.[ch]
  </example>
  
  (en cada subdirectorio que contenga ficheros .c y .h). Grep nos indicará el
  nombre del fichero y la línea cuando encuentre una ocurrencia.
  
  <p>Ahora edita esos ficheros y cambia en esas líneas usr/local/lib con
  usr/share - y ya está. Simplemente reemplaza usr/local/lib por tu
  localización, y sé muy cuidadoso para no tocar el resto del código,
  si no sabes mucho sobre cómo programar en C. :-)

  <p>Después de esto deberías encontrar el objetivo 'install' (busca
  una línea que comience por 'install:') y renombra todas las
  referencias a directorios distintos de los definidos al comienzo del
  Makefile. Anteriormente el objetivo 'install' decía:

  <p><example>
  install:        gentoo
                  install ./gentoo $(BIN)
                  install icons $(ICONS)
                  install gentoorc-example $(HOME)/.gentoorc
  </example>

  <p>Después del cambio dice:
  <example>
  install:        gentoo-target
                  install -d $(BIN) $(ICONS) $(DESTDIR)/etc
                  install ./gentoo $(BIN)
                  install -m644 icons/* $(ICONS)
                  install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
  </example>
  
  <p>Seguramente has notado que ahora hay una orden <tt>install -d</tt>
  antes de las demás órdenes de la regla. El makefile original no lo tenía
  porque normalmente /usr/local/bin y otros directorios ya existen en el
  sistema donde se ejecuta `make install`. Sin embargo, dado que lo instalaremos
  en un directorio vacio (o incluso inexistente), tendremos que crear cada uno
  de estos directorios.
  
  <p>También podemos añadir otras cosas al final de la regla,
  como la instalación de documentación adicionar que los desarrolladores
  originales a veces omiten:

  <p><example>
                  install -d $(DESTDIR)/usr/share/doc/gentoo/html
                  cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
  </example>

  <p>Un lector atento se dará cuenta de que he cambiado `gentoo' a
  `gentoo-target' en la línea `install:'. A eso se le llama arreglar
  un fallo en el programa. :-)

  <p>Siempre que hagas cambios que no estén específicamente
  relacionados con el paquete Debian, asegúrate de que los envías al
  desarrollador original para que éste los pueda incluir en la próxima
  revisión del programa y asi le puedan ser útiles a alguien más.
  Además recuerda hacer que tus cambios no sean específicos para
  Debian o Linux (ni siquiera Unix!) antes de enviarlos, hazlo portable.
  Esto hará que tus arreglos sean más fáciles de aplicar.

  <p>Observa que no tienes que enviar ninguno de los ficheros debian/* 
  al desarrollador original.
  
  <sect id="difflibs">Librerías diferentes.

  <p>Hay otro problema común: las librerías son generalmente diferentes
  de plataforma a plataforma. Por ejemplo, un Makefile puede contener
  una referencia a una librería que no exista en Debian o ni siquiera
  en Linux. En este caso, se necesita cambiarla a una librería que sí
  exista en Debian y sirva para el mismo propósito. 

  <p>Así, si hay una línea en el Makefile (o Makefile.in) de tu
  programa que dice algo como lo siguiente (y tu programa no compila):

  <p><example>
  LIBS = -lcurses -lcosas -lmáscosas
  </example>

  <p>Entonces cámbiala a lo siguiente, y funcionará casi con
  seguridad:
  <p><example>
  LIBS = -lncurses -lcosas -lmáscosas
  </example>

  <chapt id="dreq">Las cosas necesarias bajo debian/.

  <p>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 adaptar
  el comportamiento del paquete. La parte más importante es modificar
  los ficheros `control', `rules' (reglas, n. del t.), `changelog', y
  `copyright' que son necesarios en todos los paquetes.

  <sect id="control">El fichero `control'.

  <p>Este fichero contiene varios valores que <prgn/dpkg/ y <prgn/dselect/
  usarán para gestionar el paquete. 
  
  <p>Aquí está el fichero de control que dh_make crea para nosotros:

  <p><example>
  1  Source: gentoo
  2  Section: unknown
  3  Priority: optional
  4  Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
  5  Build-Depends: debhelper (>> 3.0.0)
  6  Standards-Version: 3.5.2 
  7
  8  Package: gentoo
  9  Architecture: any
  10 Depends: ${shlibs:Depends}
  11 Description: &lt;insert up to 60 chars description&gt;
  12  &lt;insert long description, indented with spaces&gt;
  </example>
  (He añadido los números de línea).

  <p>Las líneas 1-6 son la información de control para el paquete
  fuente. 
  
  <p>La línea 1 es el nombre del paquete fuente.

  <p>La línea 2 es la sección de la distribución dentro de la que
  estará este paquete. 
  
  <p>Como puede que hayas notado, Debian está dividida
  en secciones: main (principal, n. del t.) (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 subdivisiones lógicas que describen en una palabra
  qué paquetes hay dentro. Así que tenemos `admin' para programas que
  sólo usa un administrador, `base' para las herramientas básicas,
  `devel' para las herramientas de programación, `doc' para la
  documentación, `libs' para las bibliotecas o librerías, `mail' para
  lectores y demonios de correo-e, `net' para aplicaciones y demonios
  de red, `x11' para programas específicos de X11, y muchos más.

  <p>Vamos a cambiarla para que ponga x11. (El prefijo "main/" ya va 
  implícito, así que podemos omitirlo.)

  <p>La línea 3 describe cómo de importante es para el usuario la
  instalación de este paquete.  Lee el manual de Política de
  Debian para una guía de qué valor deben tener estos campos.
  La prioridad 'optional' suele ser lo mejor para los paquetes nuevos. 
  
  <p>Section y Priority se usan en aplicaciones (frontends, n. del t.),
  como <prgn/dselect/ cuando ordenan los paquetes. Una vez que envies el
  paquete a Debian, el valor de estos dos campos puede ser no aceptado
  por los mantenedores del archivo, en cuyo caso te lo notificarán por
  correo electrónico.
  
  <p>Como es un paquete de prioridad normal y no tiene conflictos con
  ningún otro, lo dejaremos con prioridad `optional' (opcional, n. del t.).

  <p>La línea 4 es el nombre y correo electrónico del desarrollador.
  Asegurate de que este campo incluye una cabecera válida "To: ",
  para una dirección de correo electrónico, porque despues de que envies
  el paquete, el sistema de seguimiento de bugs (bug tracking system, n. del t.)  
  utilizará esta dirección para enviarte los mensajes de los bugs.
  Evita usar comas, ampersans y paréntesis. 
  
  <p>La línea 5 incluye la lista de paquetes requeridos para construir
  tu paquete. Algunos paquetes como gcc y make están implícitos,
  vease el paquete <package/build-essential/ para más detalles.
  Si algún compilador no estándar u otra herramienta, es necesaria
  para construir tu paquete, deberías añadirla en la línea `Build-Depends'.
  Las entradas multiples se separan con comas; lee la explicación de las 
  dependencias binarias para averiguar más sobre la sintaxis de este campo.

  <p>También tienes los campos Build-Depends-Indep, Build-Conflicts 
  entre otros. Estos datos los usarán los programas de construcción
  automática de paquetes de Debian para crear paquetes binarios para
  el resto de plataformas de computadoras. <!-- no quedaría mejor aquí poner
  arquitecturas? Ana -->
  Vease el manual de Política para más información sobre la dependencias
  de construcción y la Referencia del Desarrollador para más información
  sobre estas otras plataformas (arquitecturas) y como portar los programas
  a ellas.

  <p>Aquí tienes un truco que puedes usar para averiguar que paquetes
  necesitará tu paquete en su construcción:
  <example>
  strace -f -o /tmp/log ./configure
  # o make en lugar de ./configure, si el paquete no usa autoconf
  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
  </example>

  <p>Gentoo también requiere <package/xlibs-dev/,
  <package/libgtk1.2-dev/ y <package/libglib1.2-dev/ 
  para su construcción, asi que lo añadiremos junto a 
  <package/debhelper/.

  <p>La línea 6 es la versión de los estándares de la Política de
  Debian que sigue este paquete, la versión del manual de la Política
  que has leído mientras haces tu paquete.

  <p>La línea 8 es el nombre del paquete binario. Este suele ser el mismo
  que el del paquete fuente, pero no necesariamente tiene que ser así siempre.

  <p>La línea 9 describe la arquitectura de CPU para la que el paquete binario
  puede ser compilado. Dejaremos puesto 'any' (cualquiera, n. del t),
  porque <manref name="dpkg-gencontrol" section="1"> la rellenará con
  el valor apropiado cuando se compile este paquete en cualquier
  arquitectura para la cual pueda ser compilado.
 
  <p>Si tu paquete es independiente de la arquitectura (por ejemplo, un
  documento, un programa de shell o un guión en Perl), cambia esto a
  "all", y lee más adelante <ref id="rules"> sobre cómo usar la regla
  'binary-indep' en lugar de 'binary-arch' para construir el paquete.

  <p>La línea 10 muestra una de las más 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 relación son 'Recommends:' (recomienda,
  n. del t.), 'Suggests:' (sugiere, n. del t.), 'Pre-Depends:'
  (predepende de, n. del t.), 'Conflicts:' (entra en conflicto con,
  n. del t.), 'Provides:' (provee, n. del t.), 'Replaces:' (reemplaza
  a, n. del t.).

  <p>Las herramientas de gestión de paquetes normalmente se comportan 
  de la misma forma cuando tratan con esas relaciones entre paquetes;
  si no es así, se explicará en cada caso. 
  (vease <manref name="dpkg" section="8">, 
  <manref name="dselect" section="8">, 
  <manref name="apt" section="8">, 
  <manref name="aptitude" section="1"> etc)

  <p>Esto es lo que las dependencias significan:

  <list>
  <item>Depends:
  <p>No se instalará el programa a menos que los paquetes de los que
  depende estén instalados. Usa esto si tu programa no funcionará de
  ninguna forma (o causará daños) a menos que esté instalado un
  paquete determinado.</item>

  <item>Recommends:
  <p>Programas como dselect o aptitude informarán en la instalación
  de los paquetes recomendados con tu paquete, dselect incluso insistirá.
  dpkg y apt-get ignorarán este campo. Usa esto para paquetes que no 
  son estrictamente necesarios pero que tipicamente se usan con tu programa.
  </item>

  <item>Suggests:
  <p>Cuando un usuario instale el paquete, todos las programas le informarán
  de que puede instalar los paquetes sugeridos. dpkg y apt no le hacen
  caso a esto. Utiliza esto para paquetes que funcionarán bien con tu
  programa pero no son necesarios en absoluto.</item>

  
  <item>Pre-Depends:
  <p>Esto es más fuerte que 'Depends'. EL paquete no se instalará a menos 
  que los paquetes de los que pre-dependa esté instalados
  <em>y correctamente configurados</em>. Utiliza esto
  <strong>muy</strong> poco y sólo después de haberlo discutido en la
  lista de distribución de debian-devel. En resumidas cuentas: no lo
  utilices en absoluto. :-) </item>

  <item>Conflicts:
  <p>El paquete no será instalado hasta que todos los paquetes con los
  que entra en conflicto hayan sido eliminados. Utiliza esto si tu
  programa no funcionará en absoluto (o causará daños) si un paquete
  en particular está presente.
  </item>

  <item>Provides:
  <p>Para algunos tipos determinados de paquetes donde hay múltiples
  alternativas se han definido nombres virtuales. Puedes obtener la
  lista completa en el fichero
  /usr/share/doc/debian-policy/virtual-package-names-list.text.gz.
  Usa esto si tu programa ofrece las funciones de un paquete virtual
  existente.</item>

  <item>Replaces:
  <p>Usa esto si tu programa reemplaza ficheros de otro paquete, o
  reemplaza totalmente otro paquete (generalmente se usa conjuntamente
  con 'Conflicts':). Se eliminarán los ficheros de los paquetes
  indicados antes de instalar el tuyo.</item>
  </list>

  <p>Todos estos campos tienen una sintaxis uniforme. Son una lista
  de nombres de paquetes separados por comas. Estos nombres de
  paquetes también puede ser listas de paquetes alternativos,
  separados por los símbolos de barra vertical <tt>|</tt> (símbolos
  tubería). 
  
  <p>Los campos pueden restringir su aplicación a versiones
  determinadas de cada paquete nombrado. Esto se hace listando después
  de cada nombre de paquete individual las versiones entre paréntesis,
  e indicando antes del número de versión una relación de la siguiente
  lista. Las relaciones permitidas son: <tt>&lt;&lt;</tt>,
  <tt>&lt;=</tt>, <tt>=</tt>, <tt>&gt;=</tt> y <tt>&gt;&gt;</tt>
  para estrictamente anterior, anterior o igual, exactamente igual,
  posterior o igual o estrictamente posterior, respectivamente.
  Por ejemplo:
  
  <p><example>
  Depends: foo (>= 1.2), libbar1 (= 1.3.4)
  Conflicts: baz
  Recommends: libbaz4 (>> 4.0.7)
  Suggests: quux
  Replaces: quux (<< 5), quux-foo (<= 7.6)
  </example>
  
  <p>La última funcionalidad que necesitas conocer es
  $(shlibs:Depends). Despues de que tu paquete se compile y se
  instale en el directorio temporal, 
  <manref name="dh_shlibdeps" section="1"> lo escaneará en busca
  de binarios y bibliotecas, para determinar las dependencias
  de bibliotecas compartidas y en que paquetes están, tales como 
  como libc6 o xlib6g. Luego pasará la lista a
  <manref name="dh_gencontrol" section="1"> que rellenará estas 
  dependencias en el lugar adecuado, así que no tendrás que preocuparte
  por esto.
  
  <p>Despues de decir todo esto, podemos dejar la línea de Depends:
  exactamente como está ahora e insertar otra línea tras esta que diga
  <tt>Suggests: file</tt>, porque gentoo utiliza algunas funciones de 
  este paquete/programa.

  <p>La línea 11 es una descripción corta. La mayor parte de los
  monitores de la gente son de 80 columnas de ancho, así que no
  debería tener más de 60 caracteres. Cambiaré esto a "A fully GUI
  configurable GTK+ file manager" ("Un gestor de ficheros GTK+
  completamente configurable por GUI").

  <p>La línea 12 es donde va la descripción larga del paquete. Debería
  ser al menos un párrafo que dé más detalles del paquete. La primera 
  columna de cada línea debería estar vacía. No puede haber líneas en
  blanco, pero puede poner un . (punto) en una columna para simularlo.
  Tampoco debe haber más de una línea en blanco después de la
  descripción completa.


  <p>Aquí está el fichero de control actualizado:

  <p><example>
  1  Source: gentoo
  2  Section: x11
  3  Priority: optional
  4  Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
  5  Build-Depends: debhelper (>> 3.0.0), xlibs-dev, libgtk1.2-dev, libglib1.2-dev
  6  Standards-Version: 3.5.2
  7
  8  Package: gentoo
  9  Architecture: any
  10 Depends: ${shlibs:Depends}
  11 Suggests: file
  12 Description: A fully GUI configurable X file manager using GTK+
  13  gentoo is a file manager for Linux written from scratch in pure C. It
  14  uses the GTK+ toolkit for all of its interface needs. gentoo provides
  15  100% GUI configurability; no need to edit config files by hand and re-
  16  start the program. gentoo supports identifying the type of various
  17  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 file
  21  manager "Directory OPUS" (written by Jonathan Potter).
  </example>
  (He añadido los números de línea).

  <sect id="copyright">El fichero `copyright'.

  <p>Este fichero contiene la información sobre la licencia y copyright
  de las fuentes originales del paquete. El formato no está definido en
  la Política, pero sí sus contenidos (sección 6.5). 
  
  <p>dh_make crea un fichero por defecto que es así:

  <p><example>
  1  This package was debianized by Josip Rodin &lt;joy-mg@debian.org&gt; on
  2  Wed, 11 Nov 1998 21:02:14 +0100.
  3
  4  It was downloaded from &lt;fill in ftp site&gt;
  5
  6  Upstream Author(s): &lt;put author(s) name and email here&gt;
  7
  8  Copyright:
  9
  10 &lt;Must follow here&gt;
  </example>
  (He añadido los números de línea).

  <p>Las cosas importantes que se deben añadir a este fichero son el
  lugar de donde obtuviste el paquete junto con la nota de copyright y
  licencia originales. Debes incluir la licencia completa, a menos que
  sea una licencia común en el mundo del software libre como GNU GPL o
  LGPL, BSD o la 'Artistic license', donde basta referirse al fichero
  apropiado en el directorio /usr/share/common-licenses/ que existe en
  todo sistema Debian. 
  
  <p>Gentoo está gobernado bajo la Licencia Pública
  General GNU, así que cambiaremos el fichero a esto:

  <p><example>
  1  This package was debianized by Josip Rodin &lt;joy-mg@debian.org&gt; on
  2  Wed, 11 Nov 1998 21:02:14 +0100.
  3
  4  It was downloaded from: ftp://ftp.obsession.se/gentoo/
  5
  6  Upstream author: Emil Brink &lt;emil@obsession.se&gt;
  7
  8  This software is copyright (c) 1998-99 by Emil Brink, Obsession
  9  Development.
  10
  11 You are free to distribute this software under the terms of
  12 the GNU General Public License.
  13 On Debian systems, the complete text of the GNU General Public
  14 License can be found in the file `/usr/share/common-licenses/GPL'.
  </example>
  (He añadido los números de línea).

  <p>(Nota del T.: la política de Debian actual indica que los
  documentos aquí citados estén escritos en inglés, al ser el idioma
  oficial del proyecto, por lo que no se traducen en este documento).

  <sect id="changelog">El fichero `changelog'.

  <p>Este es un fichero requerido, que tiene un formato especial
  descrito en la Política, sección 5.3 "debian/changelog". Este es el
  formato que usan dpkg y otros programas para obtener el número de
  versión, revisión, distribución y urgencia de tu paquete.

  <p>Para ti es también importante, ya que es bueno tener documentados
  todos los cambios que hayas hecho. Esto ayudará a las personas que se
  descarguen tu paquete para ver si hay temas pendientes en el paquete
  que deberían conocer de forma inmediata. Se salvará como
  `/usr/share/doc/gentoo/changelog.Debian.gz' en el paquete binario.

  <p>dh_make crea uno por defecto, que es algo así:

  <p><example>
  1  gentoo (0.9.12-1) unstable; urgency=low
  2
  3   * Initial Release.
  4
  5  -- Josip Rodin &lt;joy-mg@debian.org&gt;  Wed, 11 Nov 1998 21:02:14 +0100
  6
  </example>
  (He añadido los números de línea).
  
  <p>La línea 1 es el nombre del paquete, versión, distribución y
  urgencia. El nombre debe coincidir con el nombre del paquete fuente,
  la distribución debería ser, por ahora, `unstable' (o incluso `experimental')
  y la urgencia no debería cambiarse a algo mayor que `low'. :-)
  
  <p>Las línea 3-5 son una entrada de registro, donde se documentan
  los cambios hechos en esta revisión del paquete (no los cambios en
  las fuentes originales - hay un fichero especial para este
  propósito, creado por los autores originales y que instalarás luego como
  /usr/share/doc/gentoo/changelog.gz). Las nuevas líneas deben
  insertarse justo antes de la línea que hay más arriba que comienza
  por un asterisco (`*'). Puede hacerlo con <manref name="dch"
  section="1">, o manualmente con cualquier editor de texto. 
  
  <p>Terminarás con algo así:
  
  <p><example>
  1  gentoo (0.9.12-1) unstable; urgency=low
  2
  3   * Initial Release.
  4   * This is my first Debian package.
  5   * Adjusted the Makefile to fix $DESTDIR problems.
  6
  7  -- Josip Rodin &lt;joy-mg@debian.org&gt; Wed, 11 Nov 1998 21:02:14 +0100
  8
  </example>
  (He añadido los números de línea).

  <p>Puede leer más sobre como actualizar el fichero changelog más
  adelante en <ref id="update">.

  <sect id="rules">El fichero `rules'.

  <p>Ahora necesitamos mirar las reglas exactas que <manref
  name="dpkg-buildpackage" section="1"> utilizará para crear el
  paquete. Este fichero es en realidad otro Makefile, 
  pero diferente al que viene en las fuentes originales.
  A diferencia de otros ficheros en debian/, este necesita ser
  configurado como ejecutable.
  
  <p>Cada fichero `rules' (de reglas, n. del t.), como muchos otros
  Makefiles, se compone de varias reglas que especifican cómo tratar
  las fuentes. Cada regla se compone de objetivos, ficheros o nombres
  de acciones que se deben llevar a cabo (por ejemplo, `build:' o
  `install:'). Las reglas que quieras ejecutar deberían llamarse como
  argumentos de la línea de órdenes (por ejemplo, `./debian/rules
  build' o `make -f rules install'). Después del nombre del objetivo,
  puedes nombrar las dependencias, programas o ficheros de los que la
  regla dependa. Después de esto, hay un número cualquiera de
  instrucciones (¡indentado con &lt;tab&gt;!), hasta que se llega a
  una línea en blanco. Ahí empieza otra regla. Las líneas múltiples en
  blanco, y las líneas que empiezan por almohadillas ('#') se tratan
  como comentarios y se ignoran.

  <p>Probablemente ya te hayas perdido, pero todo quedará más claro
  después de ver un fichero `rules' que dh_make pone por defecto.
  Deberías leer también la entrada de `make' en info para más
  información.

  <p>La parte importante que debes conocer sobre el fichero de reglas
  creado por dh_make, es que sólo es una sugerencia. Funcionará para
  paquetes simples pero para más complicados, no te asustes y añade o
  quita cosas de éste para ajustarlo a tus necesidades. Una cosa que
  no debes cambiar son los nombres de las reglas, porque todas las
  herramientas utilizan estos nombres, como se indica en la Política.

  <p>Aqui está, aproximadamente, como es el fichero debian/rules que
  dh_make genera por defecto:
  
 <p><example>
  1  #!/usr/bin/make -f
  2  # Sample debian/rules that uses debhelper.
  3  # GNU copyright 1997 to 1999 by Joey Hess.
  4
  5  # Uncomment this to turn on verbose mode.
  6  #export DH_VERBOSE=1
  7
  8  # This is the debhelper compatibility version to use.
  9  export DH_COMPAT=3
  10
  11 ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
  12         CFLAGS += -g
  13 endif
  14 ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
  15         INSTALL_PROGRAM += -s
  16 endif
  17
  18 build: build-stamp
  19 build-stamp:
  20	dh_testdir
  21
  22	# Add here commands to compile the package.
  23	$(MAKE)
  24	#/usr/bin/docbook-to-man debian/gentoo.sgml > gentoo.1
  25
  26	touch build-stamp
  27
  28 clean:
  29	dh_testdir
  30	dh_testroot
  31	rm -f build-stamp
  32
  33	# Add here commands to clean up after the build process.
  34	-$(MAKE) clean
  35
  36	dh_clean
  37
  38 install: build
  39	dh_testdir
  40	dh_testroot
  41	dh_clean -k
  42	dh_installdirs
  43
  44	# Add here commands to install the package into debian/gentoo.
  45	$(MAKE) install DESTDIR=$(CURDIR)/debian/gentoo
  46
  47 # Build architecture-independent files here.
  48 binary-indep: build install
  49 # We have nothing to do by default.
  50
  51 # Build architecture-dependent files here.
  52 binary-arch: build install
  53	dh_testdir
  54	dh_testroot
  55 #	dh_installdebconf
  56	dh_installdocs
  57	dh_installexamples
  58	dh_installmenu
  59 #	dh_installlogrotate
  60 #	dh_installemacsen
  61 #	dh_installpam
  62 #	dh_installmime
  63 #	dh_installinit
  64	dh_installcron
  65	dh_installman
  66	dh_installinfo
  67 #	dh_undocumented
  68	dh_installchangelogs ChangeLog
  69	dh_link
  70	dh_strip
  71	dh_compress
  72	dh_fixperms
  73 #	dh_makeshlibs
  74	dh_installdeb
  75 #	dh_perl
  76	dh_shlibdeps
  77	dh_gencontrol
  78	dh_md5sums
  79	dh_builddeb
  80
  81 binary: binary-indep binary-arch
  82 .PHONY: build clean binary-indep binary-arch binary install
  </example>
  (He añadido los números de línea).

  <p>(N. del T.: se traduce el fichero de reglas, dh_make sólo lo
  ofrece en inglés)
  
  <p><example>
  1  #!/usr/bin/make -f
  2  # Fichero de ejemplo debian/rules que usa debhelper.
  3  # GNU copyright 1997 to 1999 by Joey Hess.
  4
  5  # Quítele el comentario para activar el modo explícito.
  6  #export DH_VERBOSE=1
  7
  8  # Esta es la versión de compatibilidad con debhelper que usaremos.
  9  export DH_COMPAT=3
  10
  11 ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
  12         CFLAGS += -g
  13 endif
  14 ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
  15         INSTALL_PROGRAM += -s
  16 endif
  17
  18 build: build-stamp
  19 build-stamp:
  20	dh_testdir
  21
  22	# Añade aquí las órdenes para compilar el paque
  23	$(MAKE)
  24	#/usr/bin/docbook-to-man debian/gentoo.sgml > gentoo.1
  25
  26	touch build-stamp
  27
  28 clean:
  29	dh_testdir
  30	dh_testroot
  31	rm -f build-stamp
  32
  33	# Añade aquí las órdenes para limpiar después del proceso de creación.
  34	-$(MAKE) clean
  35
  36	dh_clean
  37
  38 install: build
  39	dh_testdir
  40	dh_testroot
  41	dh_clean -k
  42	dh_installdirs
  43
  44	# Añade aquí las órdenes para instalar el paquete en debian/tmp.
  45	$(MAKE) install DESTDIR=$(CURDIR)/debian/gentoo
  46
  47 # Construir los ficheros independientes de arquitectura aquí.
  48 binary-indep: build install
  49 # No hace nada por defecto.
  50
  51 # Construir los ficheros independientes de arquitectura aquí.
  52 binary-arch: build install
  53	dh_testdir
  54	dh_testroot
  55 #	dh_installdebconf
  56	dh_installdocs
  57	dh_installexamples
  58	dh_installmenu
  59 #	dh_installlogrotate
  60 #	dh_installemacsen
  61 #	dh_installpam
  62 #	dh_installmime
  63 #	dh_installinit
  64	dh_installcron
  65	dh_installman
  66	dh_installinfo
  67 #	dh_undocumented
  68	dh_installchangelogs ChangeLog
  69	dh_link
  70	dh_strip
  71	dh_compress
  72	dh_fixperms
  73 #	dh_makeshlibs
  74	dh_installdeb
  75 #	dh_perl
  76	dh_shlibdeps
  77	dh_gencontrol
  78	dh_md5sums
  79	dh_builddeb
  80
  81 binary: binary-indep binary-arch
  82 .PHONY: build clean binary-indep binary-arch binary install
  </example>

  <p>Probablemente estés familiarizado con líneas como la 1 de guiones
  hechos en shell o Perl. Esto significa que el fichero debe
  ejecutarse con /usr/bin/make. 
 
  <p>El significado de las variables DH_* que se mencionan en las
  líneas 6 y 9 debería ser evidentes de la descripción corta.
  Para más información sobre DH_COMPAT lease la sección 
  "Debhelper compatibility levels" del manual de 
  <manref name="debhelper" section="1">.

  <p>Las líneas de la 11 a la 16 son el esqueleto de apoyo para
  los parámetros de  DEB_BUILD_OPTIONS, descritos en la Política sección
  11.1 "Binarios". Basicamente, estas cosas controlan si los binarios
  se construyen con los símbolos del depurador (debugger, n. del t.),
  y si deberían quitarse con strip tras la instalación.
  Es solo un esqueleto, una pista de lo que deberías hacer.
  Deberías comprobar como el sistema de construcción de las fuentes
  maneja la inclusión de los símbolos del depurador y su eliminación
  en la instalación e implementarlo por ti mismo/a.

  <p>Normalmente puedes decirle a gcc que compile con "-g" usando la variable
  CFLAGS - si este es el caso de tu paquete, pon la variable
  <em>añadiendo</em> <tt>CFLAGS="$(CFLAGS)"</tt> a la invocación de 
  $(MAKE) en la regla de construcción (ver más abajo). Alternativamente,
  si tu paquete usa un guión de configuración de autoconf, puedes pasarle
  esto configurando <em>para que se propage</em> la cadena de arriba a 
  la llamada de ./configure en la regla de construcción.
  
  <!-- no pillo de lo de perpending:
  Alternatively, if your package uses an
  autoconf configure script, you can pass it to configure by
  <em>prepending</em> the above string to the ./configure invocation in the
  build rule.
  -->
  
  <p>Los programas a los que se le quitan los símbolos del
  depurador con strip, se configuran normalmente para instalarse
  sin pasar por strip, y a menudo sin una opción para cambiar esto.
  Afortunadamente, tienes <manref name="dh_strip" section="1"> que
  detectará cuando el flag DEB_BUILD_OPTIONS=nostrip está activado
  y saldrá silenciosamente.

  <p>Las líneas 12 a la 19 describen la regla build (y su hija `build-stamp'),
  que ejecuta make con el propio Makefile de la aplicación para compilar
  el programa.
  Hablaremos sobre el ejemplo comentado docbook-to-man más tarde en
  <ref id="manpage">.

  <p>La regla `clean' (limpiar, n. del t.), como se especifica en las
  líneas 28-36, limpia cualquier binario innecesario o cosas
  automáticamente generadas, dejadas después de la construcción del
  paquete. 
  Esta regla debe funcionar en todo momento (incluso cuando
  el árbol de fuentes <em>esté</em> limpio!), así que, por favor, usa
  las opciones que fuercen a hacer cosas (por ejemplo para rm, sería
  `-f'), o ignora los valores devueltos (con un `-' al principio de la
  orden).

  <p>El proceso de instalación, la regla `install', comienza en la
  línea 38. Básicamente ejecuta la regla `install' del Makefile del
  programa, pero lo instala en el directorio <tt>$(CURDIR)/debian/gentoo</tt> -
  esto es por lo que especificamos $(DESTDIR) como el directorio
  raíz de instalación del Makefile de gentoo.
 
  <p>Como sugiere el comentario, la regla 'binary-indep', en la línea 48,
  se usa para construir paquetes independientes de arquitectura.
  Como no tenemos ninguno aquí no se hará nada.

  <p>Lo siguiente es la regla 'binary-arch', en las líneas 52 a 79, en
  la que ejecutamos varias pequeñas utilidades del paquete debhelper
  que nos permiten hacer diversas operaciones en nuestro paquete para
  que cumpla la política de Debian.
  
  <p>Si tu paquete es del tipo `Architecture: all' necesitarás incluir
  todas las órdenes para crear el paquete bajo esta regla, y dejar la 
  siguiente regla (`binary-arch') vacía en su lugar.

  <p>Los nombres comienzan con dh_ y el resto del nombre es la descripción 
  de lo que la utilidad en particular realmente hace. Es todo más o menos
  auto-explicativo, pero a continuación tienes algunos añadidos a las
  explicaciones:

  <list>
  <item><manref name="dh_testdir" section="1"> comprueba que estás en
        el directorio correcto (esto es, el directorio raíz de la
        distribución de las fuentes),
  <item><manref name="dh_testroot" section="1"> comprueba que tienes
        permisos de superusuario que son necesarios para las reglas
         `binary-arch', `binary-indep' and `clean',
  <item><manref name="dh_installman" section="1"> copiará todas las
        páginas de manual que encuentre en el paquete fuente en
        el paquete, tan solo has de indicarle donde están de forma relativa, 
	desde el nivel más alto del directorio de codigo.
  <item><manref name="dh_strip" section="1"> elimina las cabeceras de
        depuración de los ficheros ejecutables para hacerlos más
        pequeños,
  <item><manref name="dh_compress" section="1"> comprime las
        páginas de manual y los ficheros de documentación que sean más
        grandes de 4 kB con <manref name="gzip" section="1">,
  <item><manref name="dh_installdeb" section="1"> copia los ficheros
        relativos al paquete (es decir, los guiones del mantenedor)
	bajo el directorio <file>debian/gentoo/DEBIAN</file>,
  <item><manref name="dh_shlibdeps" section="1"> calcula las
        dependencias de los ejecutables y librerías con las librerías
        compartidas,
  <item><manref name="dh_gencontrol" section="1"> genera e instala el
        fichero de control en <file>debian/gentoo/DEBIAN</file>,
  <item><manref name="dh_md5sums" section="1"> genera las sumas de
        chequeo MD5 para todos los ficheros del paquete.
  </list>

  <p>Para información más completa de lo que hacen cada uno de estos
  guiones dh_* , y qué otras opciones tienen, por favor lee sus
  páginas de manual respectivas. Hay otros guiones con la misma
  nomenclatura (dh_*) que no se han mencionado aquí, pero pueden serte 
  útiles. Si los necesitas, lee la documentación de debhelper.

  <p>La sección binary-arch es en una de las que deberías comentar o eliminar 
  las líneas que llamen a funciones que no necesites. Para gentoo,
  comentaré de ejemplos, cron, init, man e info,
  simplemente porque gentoo no las necesita. 
  Tan solo, en la línea 68, reemplazaré `ChangeLog' con `FIXES', 
  porque este es el nombre del fichero de cambios de las fuentes.

  <p>Las últimas dos líneas (junto con otras que no se explican) son
  cosas más o menos necesarias, sobre las que puedes leer en el manual
  de make, y la Política. Por ahora no es importante que sepas nada de
  ellas.
  
  <chapt id="dother">Otros ficheros en el directorio debian/.

  <p>Verás que existen otros ficheros en el subdirectorio debian/,
  muchas de los cuales tendrán el sufijo `.ex', que indica que son
  ejemplos. Echale un vistazo a todos. Si lo deseas o necesitas usar
  alguna de estas características:

  <list>
    <item>revisa todo la documentación relacionada (sugerencia: el Manual de la Política),
    <item>si es necesario modifica los ficheros para sjustaros a tus necesidades,
    <item>renombralos para eliminar el sufijo `ex.', si lo tiene,
    <item>renombralos para eliminar el prefijo `.ex', si lo tiene,
	<item>modifica el fichero `rules' si es necesario.
  </list>

  <p>Algunos de estos ficheros, los que se usan más comúnmente, se explican en
  las secciones que siguen.
  
  <sect id="readme">README.debian. (LÉEME.debian, n. del t.)

  <p>Cualquier detalle extra o discrepancias entre el programa
  original y su versión debianizada debería documentarse aquí.
   
  <p>dh_make crea una por defecto, y éste es su aspecto:

  <p><example>
  gentoo for Debian
  -----------------

  &lt;possible notes regarding this package - if none, delete this file&gt;

   -- Josip Rodin &lt;joy-mg@debian.org&gt;, Wed, 11 Nov 1998 21:02:14 +0100
  </example>

  <p>Dado que no tenemos que poner nada aquí - está permitido
  borrarlo.

  <sect id="conffiles">conffiles.

  <p>Una de las cosas más molestas de los programas es cuando pasas
  mucho tiempo y esfuerzo adaptando un programa y una actualización
  destroza todos tus cambios. Debian resuelve este problema marcando
  los ficheros de configuración de forma que cuando actualizas un
  paquete se te pregunta si deseas mantener la nueva
  configuración o no. 
  
  <p>Eso se consigue poniendo la ruta completa a cada
  fichero de configuración (se encuentran generalmente en /etc), una
  por línea, en un fichero llamado `conffiles'.
  Gentoo tiene un fichero de configuración, /etc/gentoorc, y
  meteremos éste en el fichero <tt/conffiles/. 
  
  <p>Si tu programa usa ficheros de configuración pero también los 
  reescribe el mismo, lo mejor es no marcarlos como conffiles porque
  dpkg les informará a los usuarios que verifiquen los cambios todo el tiempo.
  
  <p>Si el programa que estás empaquetando requiere que cada usuario
  modifique su fichero de configuración para trabajar, considera también
  no marcar el fichero como un conffile.

  <p>Puedes tomar ejemplos de ficheros de configuración de los 
  `maintainer scripts', para más información vease <ref id="maintscripts">.

  <p>Si tu programa no tiene conffiles, puedes eliminar el fichero
  <tt/conffiles/ del directorio debian/.

  <sect id="crond">cron.d.ex.

  <p>Si tu paquete requiere tareas periódicas para funcionar adecuadamente,
  puedes usar este archivo como patrón. 

  <p>Fijate que no incluye rotación de logs, para eso, vease
  <manref name="dh_installlogrotate" section="1"> y
  <manref name="logrotate" section="8">.

  <p>Si no, elimínalo.

  <sect id="dirs">dirs.

  <p>Este fichero especifica los directorios que se necesitan pero que
  por alguna razón no se crean en un proceso de instalación normal
  (make install).

  <p>Por defecto, tiene este aspecto:
  <p><example>
  1 usr/bin
  2 usr/sbin
  </example>

  <p>Observa que la barra precedente no está incluida. Normalmente lo
  cambiaríamos a algo así:
  <p><example>
  1 usr/bin
  2 usr/man/man1
  </example>

  pero estos directorios ya se crean en el Makefile, así que no
  necesitaremos este fichero y lo podremos borrar.
  
 <sect id="docs">docs.

  <p>Este fichero especifica los nombres de fichero de los ficheros
  de documentación que dh_installdocs puede instalar en el directorio
  temporal para nososotros.

  <p>Por defecto, incluirá todos los ficheros existentes en los directorios
  de más alto nivel del código que se llamen "BUGS", "README*", "TODO" etc.

  <p>Para gentoo, también incluiré algunos otros:

  <p><example>
  BUGS
  CONFIG-CHANGES
  CREDITS
  ONEWS
  README
  README.gtkrc
  TODO
  </example>
  
  <p>También podemos eliminar este fichero y en su lugar listar
  estos ficheros en la línea de ordenes de
  <tt/dh_installdocs/ en el fichero <tt/rules/, de esta forma:

  <p><example>
  	dh_installdocs BUGS CONFIG-CHANGES CREDITS ONEWS README \
                       README.gtkrc TODO
  </example>

  <p>Es posible que no tengas ninguno de estos ficheros en las fuentes
  de tu paquete. En ese caso, puedes eliminar este fichero. Pero
  no elimines la llamada a <tt/dh_installdocs/ desde el fichero
  <tt/rules/ porque este se usa para instalar el fichero
  <tt/copyright/ entre otras cosas.

  <sect id="emacsen">emacsen-*.ex.

  <p>Si tu paquete proporciona ficheros Emacs que pueden ser
  compilados a bytes en el momento de la instalación, puede usar estos
  ficheros.

  <p>Se instalan en el directorio temporal por
  <manref name="dh_installemacsen" section="1">, 
  así que no olvides descomentar esta línea en el fichero
  <tt/rules/ si los usas.

  <p>Si no los necesitas, eliminalos.

  <sect id="initd">init.d.ex.

  <p>Si tu paquete es un demonio que necesita ejecutarse en el inicio
  del sistema, obviamente has desatendido mi recomendación inicial, ¿o no?
  :-)

  <p>Este fichero es prácticamente un esqueleto genérico para un fichero de
  guiones en <file>/etc/init.d/</file>, asi que probablemente tendrás que 
  editarlo, mucho. Se instala en el directorio temporal por
  <manref name="dh_installinit" section="1">.

  <p>Si no lo necesitas, elimina el fichero.
  
  <sect id="manpage">manpage.1.ex, manpage.sgml.es.

  <p>Tu programa debería tener una página de manual. Si no lo tiene,
  cada uno de estos ficheros es una plantilla que puedes rellenar.

  <p>Las páginas de manual se escriben normalmente con <manref name="nroff" section="1">.
  El ejemplo <tt/manpage.1.ex/ está también escrito con nroff.
  Vease la página de manual <manref name="man" section="7"> para una breve
  descripción de como editar el fichero.

  <p>Por otro lado, puede que prefieras escribir usando SGML en lugar de
  nroff, puedes usar la plantilla <tt/manpage.sgml.ex/. 
  Si haces esto, tendrás que:
  <list>
    <item>instalar el paquete <package/docbook-to-man/
    <item>añadir <tt/docbook-to-man/ a la línea de <tt/Build-Depends/ 
	      en el fichero de <tt/control/
    <item>eliminar el comentario de la llamada a docbook-to-man en
          la regla `build' de tu fichero <tt/rules/ 
  </list>

  <p>Y recuerda renombrar el fichero a algo como <tt/gentoo.sgml/!

  <p>La página final del nombre debería incluir el nombre del programa
  que está documentando, asi que lo renombraremos de "manpage" a "gentoo".
  El nombre del fichero incluye también ".1" como primer sufijo,
  lo que significa que es una página de manual para una programa de usuario.
  Asegurate de verificar que esa sección es la correcta.
  Aquí tienes una pequeña lista de las secciones de las páginas de manual.

  <p><example>
  Sección |     Descripción        |     Notas
     1     Comandos de Usuario       Programas o guiones ejecutables.
     2     Llamadas al Sistema       Funciones que ofrece el núcleo.
     3     Llamadas a Librerías      Funciones dadas por las librerías 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 frívolos.
     7     Paquetes de Macros        Como las macros de man.
     8     Administración del Sist.  Programas que sólo suele ejecutar el superusuario.
     9     Rutinas del Núcleo        Llamadas al sistema no estándar.
  </example>
  
  <p>Asi que la página de manual de gentoo debería llamarse <tt/gentoo.1/.
  Para programas X puedes añadir una "x" a la sección, por ejemplo,
  <tt/gentoo.1x/.
  No habia una pagina de manual gentoo.1 en el paquete fuente
  asi que lo escribí usando la información del ejemplo y de los documentos
  fuentes.

  <sect id="menu">menu.ex.

  <p>Los usuarios de X Windows tendrán un gestor de ventanas con menús
  que pueden adaptarse para lanzar programas. Si tienen instalado el
  paquete <package/menu/ de Debian, se creará un conjunto de menús para cada
  programa del sistema para ellos. 
  
  <p>Aquí está el fichero <tt/menu.ex/ que dh_make crea por defecto:
  
  <p><example>
  ?package(gentoo):needs=X11|text|vc|wm section=Apps/see-menu-manual\
    title="gentoo" command="/usr/bin/gentoo"
  </example>

  <p>El primer campo tras la coma son las "needs", y especifica
  que tipo de interfaz necesita el programa. Cambia esta a una de las
  alternativas que se listan, por ejemplo "text" o "X11"

  <p>Lo siguiente es "section", donde deberían aparecer la entrada del menú y
  del submenú. La lista actual de secciones está en:
  <file>/usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1</file>

  <p>El campo "title" es el nombre del programa. Puedes comenzar este
  en mayúsculas si quieres, tan solo, hazlo lo más corto que puedas.

  <p>Finalmente, el campo "command" es la orden que ejecuta el programa.

  <p>Ahora cambiaremos la entrada del menú a esto:

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

  <p>También puedes añadir otros campos como "longtitle", "icon", "hints" etc.
  Vease <manref name="menufile" section="5">,
  <manref name="update-menus" section="1">
  y <file>/usr/share/doc/debian-policy/menu-policy.html/</file> para más información.


  <sect id="watch">watch.ex.

  <p>Este fichero se usa para configurar los programas <manref
  name="uscan" section="1"> y <manref name="uupdate" section="1"> 
  (en el paquete <package/devscripts/), que se usan para vigilar 
  el servidor de donde obtuviste las fuentes originales.

  <p>Esto es lo que he puesto yo:

  <p><example>
  # watch control file for uscan
  # Site		Directory	Pattern			Version	Script
  ftp.obsession.se	/gentoo		gentoo-(.*)\.tar\.gz	debian	uupdate
  </example>

  <p>Pista: conéctate a Internet, e intenta ejecutar el programa
  "uscan" en el directorio donde has creado el fichero. Ve la página
  de manual para más detalles.

  <sect id="doc-base">ex.package.doc-base.

  <p>Si tu paquete tiene documentación aparte de las páginas de manual
  y documentos de información, deberías usar el fichero `<package/doc-base/' 
  para registrarlo, asi el usuario peude encontrarlos con con
  <manref name="dhelp" section="1">,
  <manref name="dwww" section="1"> o <manref name="doccentral" section="1">.

  <p>Esto incluye generalmente ficheros HTML, PS y PDS, que se instalan en
  <file>/usr/share/doc/packagename/</file>.

  <p>Asi es como el fichero doc-base de gentoo <tt>gentoo.doc-base</tt> debe
  ser:

  <p><example>
  Document: gentoo
  Title: Gentoo Manual
  Author: Emil Brink
  Abstract: This manual describes what Gentoo is, and how it can be used.
  Section: Apps/Tools

  Format: HTML
  Index: /usr/share/doc/gentoo/html/index.html
  Files: /usr/share/doc/gentoo/html/*.html
  </example>

  <p>Para información sobre el formato del fichero, revisa <manref
  name="install-docs" section="8"> y el manual de <package/doc-base/ en
  <file>/usr/share/doc/doc-base/doc-base.html/index.html</file>.


  <sect id="maintscripts">postinst.ex, preinst.ex, postrm.ex y prerm.ex.

  <p>Estos ficheros se llaman guiones del desarrollador (maintainer
  scripts, n. del t.), y son guiones que se colocan en el área de
  control del paquete y que <package/dpkg/ ejecuta cuando tu paquete se instala,
  se actualiza o se quita.

  <p>Por ahora, deberías intentar evitar editar manualmente estos
  guiones si puedes porque suelen hacerse muy complejos. Para más
  información lee el Manual de Política, capítulo 6, y echa un
  vistazo a los ejemplos dados por dh_make.

  
  <chapt id="build">Construir el paquete.
  
  <p>Deberíamos estar preparados para construir el paquete.

  <sect id="completebuild">Reconstrucción completa.

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

  <p><example>
  dpkg-buildpackage -rfakeroot
  </example>
  
  <p>Esto lo hará todo por tí:
  
  <list>
    <item>limpia el árbol del código (debian/rules clean), usando <prgn/fakeroot/
    <item>construye el paquete de codigo (dpkg-source -b)
    <item>construye el programa (debian/rules build)
    <item>construye el paquete binario (debian/rules binary), usando <prgn/fakeroot/
    <item>firma el fichero fuente <tt/.dsc/, usando <prgn/gnupg/
    <item>crea y firma el fichero de subida <tt/.changes/, usando
          <prgn/dpkg-genchanges/ y <prgn/gnupg/
  </list>

  <p>Lo único que se te pedirá es que escribas tu contraseña secreta
  de la clave GPG, dos veces.

  <p>Después de hacer todo esto, verás las siguientes líneas en el directorio
  encima del que está (<tt>~/debian/</tt>):

  <p><list>
  <item><em>gentoo_0.9.12.orig.tar.gz</em>
  <p>Este es el código fuente original comprimido, simplemente se ha renombrado
  para seguir los estándares de Debian. Nótese que ha sido creado usando
  la opción `-f' de <prgn/dh_make/ cuando lo ejecutamos en el inicio.
  
  <item><em>gentoo_0.9.12-1.dsc</em>
  <p>Este es un sumario de los contenidos del código fuente. Este
  fichero se genera a partir del fichero de `control' 
  y se usa cuando se descomprimen las fuentes con <manref
  name="dpkg-source" section="1">. Este fichero está firmado con PGP
  de forma que cualquiera pueda estar seguro de que es realmente suyo.

  <item><em>gentoo_0.9.12-1.diff.gz</em>
  <p>Este fichero comprimido contiene todos y cada uno de los cambios
  que hizo al código fuente original, en un formato conocido como "diff
  unificado". El programa que lo hace y lo usa es <manref name="dpkg-source"
  section="1">. Precaución: si no renombras el archivo comprimido original 
  packagename_version.orig.tar.gz, <prgn/dpkg-source/
  fallará al generar el fichero .diff.gz!

  <p>Si alguien quiere volver a crear tu paquete desde cero, puede hacerlo
  fácilmente usando los tres ficheros de arriba. El proceso de extracción
  es trivial: tan solo copiar los tres ficheros en algún lado y ejecutar
  <tt>dpkg-source -x gentoo_0.9.12-1.dsc</tt>.
  
  <item><em>gentoo_0.9.12-1_i386.deb</em>
  <p>Este es el paquete binario completo. Puedes usar <prgn/dpkg/ 
  para instalar o eliminar tanto este como cualquier otro paquete.
  
  <item><em>gentoo_0.9.12-1_i386.changes</em>
  <p>Este fichero describe todos los cambios hechos en la revisión
  actual del paquete, y se usa por los programas de gestión del
  archivo FTP para instalar los paquetes binarios y fuentes en él. Se
  genera parcialmente a partir del fichero `changelog'  y el fichero .dsc.
  Este fichero está firmado con PGP, de forma que
  cualquiera puede estar aún más seguro de que es realmente tuyo.
  
  <p>Mientras sigues trabajando en el paquete, cambiará su
  comportamiento y se le añadirán nuevas funciones. Las personas que
  descarguen tu paquete pueden mirar este fichero y ver qué ha
  cambiado. Los programas de mantenimiento del archivo de Debian, también
  enviarán el contenido de este fichero a la lista de correo
  debian-devel-changes.
  </list>
  
  <p>Las largas listas de números son las sumas MD5 para los
  ficheros. Las personas que descarguen estos ficheros pueden
  comprobarlos con <manref name="md5sum" section="1"> y si los números
  no coinciden, sabrán que el fichero está corrupto o ha sido
  modificado.

  
  <sect id="quickrebuild">Reconstrucción rápida.
  
  <p>Con un paquete grande, puede que no quieras recompilar desde cero
  cada vez que tocas un detalle en el fichero <file>debian/rules</file>. 
  Para propósitos de prueba, puedes hacer un fichero .deb sin necesidad de
  recompilar las fuentes originales de esta forma:

  <p><example>
  fakeroot debian/rules binary
  </example>

  <p>Una vez que has terminado la puesta a punto, recuerda reconstruir el
  paquete siguiendo el procedimiento adecuado que está arriba. Puede que no seas
  capaz de enviarlo correctamente si intentas enviar los archivos .deb
  construidos de esta forma.
  
  <chapt id="checkit">Comprobar tu paquete para encontrar errores.

  <p>Ejecuta <manref name="lintian" section="1"> sobre tu fichero de
  cambios .changes; este programa comprobará muchos errores comunes al
  empaquetar. El comando es:
  
  <p><example>
  lintian -i gentoo_0.9.12-1_i386.changes
  </example>
  
  <p>Por supuesto, cambia el nombre de fichero con el nombre del
  fichero de cambios generado por tu paquete. Si parece que hay
  algunos errores (líneas que comienzan por E:), lee la explicación
  (líneas N:), corrige errores, y reconstruye como se describe en <ref
  id="completebuild">. Si hay líneas que comienzan con W:, son sólo avisos
  (warnings, n. del t.), asi que afina el paquete o verifica que los
  avisos, son falsos (y hace que lintian
  no lo acepte, vease la documentación para más detalles).
  
  <p>Observa que puedes construir el paquete con <prgn/dpkg-buildpackage/ y
  ejecutar <prgn/lintian/ todo de una sola vez con <manref name="debuild"
  section="1">.

  <p>Mira dentro del paquete usando un gestor de ficheros como <manref
  name="mc" section="1">, o descomprímelo en algún punto temporal
  usando <manref name="dpkg-deb" section="1">. 
  Vigila que no haya ficheros innecesarios extra, tanto en el binario 
  como en el paquete fuente.
  A veces, hay cosas que no se limpiaron adecuadamente; ajusta tu fichero
  de `rules' para arreglar esto. 
  Pista: `zgrep ^+++ ../gentoo_0.9.12-1.diff.gz` te dará
  una lista de tus cambios/contribuciones a las fuentes, y `dpkg-deb
  -c gentoo_0.9.12-1_i386.deb` listará los ficheros en el paquete binario.

  <p>Instala el paquete para probarlo tú mismo/a, por ejemplo, usando la
  orden <manref name="debi" section="1"> como superusuario. Intenta
  instalarlo y ejecutarlo en otras máquinas distintas de la tuya, y
  presta atención para detectar errores o avisos tanto en la instalación
  como en la ejecución del programa.


  <chapt id="upload">Enviando el paquete.
  
  <p>Ahora que has probado tu nuevo paquete en profundidad, estarás
  preparado/a para comenzar el proceso de Nuevo Desarrollador de Debian (Debian new
  maintainer, n. del T.), como se describe en:
  <url id="http://www.debian.org/devel/join/newmaint";>

  <p>Una vez que llegues a ser desarrollador oficial, necesitarás
  subir el paquete al archivo de Debian. Puedes hacer esto manualmente,
  pero es más fácil hacerlo con las herramientas automáticas que se
  proporcionan, como
  <manref name="dupload" section="1"> o <manref name="dput" section="1">.
  Describiremos como hacerlo con <prgn/dupload/.

  <p>Primeramente, tienes que crear un fichero de configuración de upload.
  Puedes hacerlo editando el fichero general del sistema <file>/etc/dupload.conf</file>, 
  o en tu propio fichero <file>~/.dupload.conf</file> con lo que tu quieras
  cambiar.
  Pon algo como esto en el fichero:
  
  <p><example>
  package config;

  $default_host = "ftp-master";

  $cfg{"ftp-master"}{"login"} = "yourdebianusername";

  $cfg{"non-us"}{"login"} = "yourdebianusername";

  1;
  </example>

  <p>Por supuesto, cambia mis valores personales por los tuyos, y lee
  la página de manual <manref name="dupload.conf" section="5"> para
  comprender qué significa cada una de estas opciones.
  
  <p>La opción $default_host es la más problemática, determina cual de las
  colas de envios se usará por defecto. "ftp-master" es la primaria,
  pero es posible que quieras usar otra más rápida.
  Para más información sobre las colas de envio, lee la Referencia del 
  Desarrollador (Developers's Referente, n. del t.), sección
  "Uploading a package", en
  <file>/usr/share/doc/developers-reference/developers-reference.html/ch-upload.en.html#s-uploading</file>
  
  <p>Entonces conecta con tu proveedor de Internet, y ejecuta la
  orden:
  
  <p><example>
  dupload --to master gentoo_0.9.12-1_i386.changes
  </example>

  <p><prgn/dupload/ comprueba que las sumas md5 coinciden con aquellas en el
  fichero .changes, y te avisará de rehacer el paquete como se
  describe en <ref id="completebuild"> para poder enviarlo correctamente.

  <p>Si lo estás enviando a "ftp-master", <prgn/dupload/ te pedirá
  tu contraseña en las máquinas Debian, y entonces enviará los paquetes.

  <chapt id="update">Actualizar tu paquete.
  
  <sect id="newrevision">Nueva revisión Debian del paquete.

  <p>Supongamos que se ha creado un informe de fallo en tu paquete
  con el número #54321, y que describe un problema que puedes solucionar.
  Para crear una nueva revisión del paquete, necesitas:

  <list>
  <item>Corregir, por supuesto, el problema en las fuentes del
  paquete.

  <item>Añadir una nueva revisión en el fichero de cambios (changelog,
  n. del t.) de Debian, con `dch -i`, o explícitamente con
  `dch -v &lt;version&gt;-&lt;revision&gt;` y entonces insertar los 
  comentarios con tu editor favorito.
  
  <p>Sugerencia: ¿Como obtener la fecha fácilmente en el formato requerido?
  Usa `822-date`, o `date -R`.
  
  <item>Incluir una breve descripción del error y su solución
  en la entrada del fichero de cambios, seguido por: "Closes: #54321". 
  De esta forma, el informe del error será automágicamente cerrado por los
  programas de gestión del archivo en el momento en que tu paquete se
  acepte en el archivo de Debian.

  <item>Repite lo que hiciste en <ref id="completebuild">, <ref id="checkit">,
  y <ref id="upload">. La diferencia es que esta vez, las fuentes
  originales del archivo no se incluirán, dado que no han cambiado y
  ya existen en el archivo de Debian.
  </list>


  <sect id="newupstream"> Nueva versión del programa fuente.
  
  <p>Ahora consideremos una situación diferente, algo más complicada:
  ha salido una versión nueva de las fuentes originales, y, por
  supuesto, deseas empaquetarla. Debes hacer lo siguiente:

  <list>
  <item>Descarga las nuevas fuentes y pon el archivo tar (pongamos que
  se llama `gentoo-0.9.13.tar.gz') un directorio por encima del
  antiguo árbol de fuentes (por ejemplo ~/debian/).

  <item>Entra en el antiguo directorio y ejecuta:

  <example>
  uupdate -u gentoo-0.9.13.tar.gz
  </example>

  <p>Por supuesto, reemplaza este nombre de fichero con el nombre de las
  fuentes de tu programa. <manref name="uupdate" section="1">
  renombrará apropiadamente este fichero tar, intentará aplicar los
  cambios de tu fichero .diff.gz previo y actualizará el nuevo fichero
  debian/changelog.

  <item>Cambia al directorio `../gentoo-0.9.13', el nuevo directorio
  fuente del paquete, y repite la operación que hiciste en <ref
  id="completebuild">, <ref id="checkit">, y <ref id="upload">.
  </list>

  <p>Observa que si has puesto el fichero `debian/watch' como se
  describe en <ref id="watch">, puedes ejecutar <manref name="uscan"
  section="1"> para buscar automágicamente fuentes revisadas,
  descargarlas, y ejecutar <prgn/uupdate/	
  
  <sect id="upgrading">Verificar actualizaciones del paquete.
  
  <p>Cuando construyas una nueva versión del paquete, deberías hacer
  lo siguiente para verificar que el paquete puede ser actualizado
  de forma segura:

  <list>
    <item>actualízate a partir de la versión previa,
    <item>vuelve a la versión anterior y elimínala,
    <item>instala el paquete nuevo,
    <item>elimínalo y reinstalalo de nuevo,
    <item>purgalo.
  </list>

  <p>Ten en cuenta que si tu paquete ha estado previamente en Debian,
  lo más frecuente es que gente actualize el paquete desde la versión
  que estaba en la última versión de Debian. Recuerda testear las
  actualizaciones desde esa versión también.
	
  <chapt id="helpme">Dónde pedir ayuda.

  <p>Antes de que te decidas a preguntar en lugares públicos, por
  favor, simplemente RTFM ("Lee El Jodido Manual", n. del t.), que 
  incluye la documentación en <file>/usr/share/doc/dpkg</file>,
  <file>/usr/share/doc/debian</file>, <file>/usr/share/doc/package/*</file>
  y las páginas de man/info para todos los programas mencionados 
  en este documento.

  <p>Si tienes dudas sobre empaquetado a las que no has podido encontrar
  respuesta en la documentación, puedes preguntar en la lista de correo
  de Debian Mentors <email/debian-mentors@lists.debian.org/. 
  Los desarrolladores más experimentados de Debian, te ayudarán gustosamente,
  pero !leete la documentación antes de preguntar!

  <p>Vease <url id="http://lists.debian.org/debian-mentors/";> para más
  información sobre esta lista de correo.
    
  <p>Cuando recibas un aviso de fallo (bug report, n. del t.) (sí,
  avisos de fallos, ¡de verdad!) sabrás que es el momento de indagar en
  el <url name="Sistema de Seguimiento de Fallos de Debian"
  id="http://www.debian.org/Bugs/";> y leer la documentación de allí
  para poder tratar los informes de forma eficiente. 
  Te recomiendo la lectura la de la Refencia del Desarrollador (Developers'
  Reference, n. de T.), el capítulo de "Manejo de Bugs" (Handling Bugs, n. de T.), en
  <file>/usr/share/doc/developers-reference/developers-reference.html/ch-bug-handling.en.html</file>

  <p>Si aún tienes preguntas, házlas en la lista de distribución de
  Desarrolladores de Debian en <email/debian-devel@lists.debian.org/.
  Vease <url id="http://lists.debian.org/debian-devel/";> para más
  información sobre esta lista de correo.

  <p>Aunque todo funcione bien, es el momento de empezar a
  rezar. ¿Por qué? Por que en sólo unas horas (o días) usuarios de
  todo el mundo empezarán a usar tu paquete, y si cometiste algún
  error crítico te bombardearán con correos de centenares de
  usuarios furiosos de Debian... Sólo bromeaba :-)

  <p>Relájate y prepárate para recibir informes de fallos, porque hay
  mucho más trabajo que hacer antes de seguir completamente las
  políticas de Debian (una vez más lee la <em>documentación real</em>
  para más detalles). ¡Buena suerte!

 </book>

</debiandoc>

Reply to: