<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE article PUBLIC '-//OASIS//DTD DocBook XML V4.1.2//EN' 
"/usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd" []>
<article id="index">
  <articleinfo>
    <title>COMO para la Creación de un Paquete Binario de Debian</title>
    <author>
      <firstname>Chr. Clemens</firstname>
      <surname>Lee</surname>
    </author>
    <othercredit>
      <firstname>Gabriel</firstname>
      <surname>Rodríguez Alberich</surname>
      <contrib>Traducción</contrib>
    </othercredit>
    <pubdate>2002-11-30, $Date: 2003/11/09 16:41:05 $</pubdate>
    <revhistory>
      <revision>
        <revnumber>1.0</revnumber>
        <date>2003-11-08</date>
        <authorinitials>ccl</authorinitials>
        <revremark>first version</revremark>
      </revision>
    </revhistory>
    <abstract>
      <para>



<emphasis>Este mini-COMO enseña a crear un paquete de Debian mínimo.</emphasis>
</para>
    </abstract>
  </articleinfo>
  <sect1>
    <title>Introducción</title>
    <para>Se pretende que el uso de dicho paquete sea para instalarlo en su
    propia máquina, no para meterlo dentro de la distribución oficial de
    Debian. Para seguir el proceso 'oficial', estúdiese la
    <ulink url="http://www.debian.org/doc/manuals/maint-guide/index.es.html">Guía
    del Nuevo Desarrollador de Debian</ulink>.
    </para>
    
    <para>Los paquetes de Debian normales tienen un paquete fuente como es
    debido, incluyendo un fichero <filename>debian/rules</filename> que
    automatiza los pasos implicados en la creación del paquete binario.
    Aquí sólo enseñaremos a empaquetar un sencillo script de shell o un
    binario ejecutable en un pequeño paquete binario.</para>
    
    <para>Por cierto, estoy suponiendo que ya sabe utilizar el
    <command>tar</command>, el <command>man</command>, qué es un fichero
    <filename>.tar.gz</filename> y qué es
    <ulink url="http://www.debian.org/">Debian</ulink> (y cómo utilizar un
    editor ;-), pero también supongo que nunca ha tocado programas como el
    <command>ar</command> o el <command>dpkg</command>.</para>
    
    <sect2><title>Recursos en la web</title>
    
      <para><ulink
      url="http://www.debian.org/doc/manuals/reference/reference.es.html">La
      Guía de Referencia de Debian</ulink> ofrece una excelente perspectiva
      general, además de información detallada acerca de todo lo
      relacionado con Debian.</para>
      
      <para>El documento oficial para crear sus propios paquetes de Debian
      es la <ulink
      url="http://www.debian.org/doc/manuals/maint-guide/index.es.html">Guía
      del Nuevo Desarrollador de Debian</ulink>.</para>

    </sect2>
  </sect1>

  <sect1>
    <title>Comenzando</title>
    
    <para>De la Guía de Referencia de Debian 2.2.2 2002-11-30:</para>

    <blockquote><para>La estructura interna del formato de paquetes binarios de
    Debian se describe en la página del manual deb(5). Puesto que el
    formato interno está sujeto a cambios (entre los lanzamientos
    principales de Debian), utilice siempre dpkg-deb(8) para manipular
    archivos .deb.</para></blockquote>

    <para>De la página del manual de dpkg-deb:</para>

    <blockquote><para>dpkg-deb empaqueta, desempaqueta y proporciona
    información acerca de paquetes de Debian. Los ficheros .deb también
    pueden manipularse con <command>ar</command> y <command>tar</command>
    si es necesario.

    Utilice dpkg para instalar y desinstalar paquetes de su
    sistema.</para></blockquote>

    <para>Puede encontrar montones de ficheros .deb de ejemplo en el
    directorio <filename>/var/cache/apt/archives/</filename>. Haciendo
    <literal>dpkg-deb -I paquete.deb</literal> puede obtener una
    perspectiva general de lo que ofrece este paquete en particular. Con
    <literal>dpkg-deb -c paquete.deb</literal> puede listar todos los
    ficheros que serán instalados.</para>

    <para>Puede listar los contenidos de un fichero deb con <literal>ar tv
    algunpaquete.deb</literal>. Utilice la opción <literal>x</literal> para
    extraer los ficheros.</para>
    
  </sect1>
  
  <sect1>
    <title>Estructura del paquete</title>
    
    <para>Examinemos un paquete de ejemplo un poco más de cerca. Por
    ejemplo, el fichero <filename>parted_1.4.24-4_i386.deb</filename>
    contiene estos tres ficheros:</para>
    
<screen>
$ ar tv parted_1.4.24-4_i386.deb
rw-r--r-- 0/0      4 Mar 28 13:46 2002 debian-binary
rw-r--r-- 0/0   1386 Mar 28 13:46 2002 control.tar.gz
rw-r--r-- 0/0  39772 Mar 28 13:46 2002 data.tar.gz
</screen>

    <para>Ahora podemos empezar a extraer todos los ficheros, incluyendo el
    contenido de los ficheros tar.</para>

    <sect2><title>debian-binary</title>
      
      <para>El contenido de este fichero es "2.0\n". Esto indica la versión
      del formato del fichero deb. Para la 2.0, el resto de las líneas se
      ignoran.</para>

    </sect2>
     
    <sect2><title>data.tar.gz</title>
     
      <para>El fichero <filename>data.tar.gz</filename> contiene todos los
      ficheros que se instalarán, con sus rutas de destino:</para>

<screen>
drwxr-xr-x root/root         0 2002-03-28 13:44:57 ./
drwxr-xr-x root/root         0 2002-03-28 13:44:49 ./sbin/
-rwxr-xr-x root/root     31656 2002-03-28 13:44:49 ./sbin/parted
drwxr-xr-x root/root         0 2002-03-28 13:44:38 ./usr/
drwxr-xr-x root/root         0 2002-03-28 13:44:41 ./usr/share/
drwxr-xr-x root/root         0 2002-03-28 13:44:38 ./usr/share/man/
drwxr-xr-x root/root         0 2002-03-28 13:44:52 ./usr/share/man/man8/
-rw-r--r-- root/root      1608 2002-03-28 13:44:37 ./usr/share/man/man8/parted.8.gz
drwxr-xr-x root/root         0 2002-03-28 13:44:41 ./usr/share/doc/
drwxr-xr-x root/root         0 2002-03-28 13:44:52 ./usr/share/doc/parted/
-rw-r--r-- root/root      1880 2002-03-07 14:20:08 ./usr/share/doc/parted/README.Debian
-rw-r--r-- root/root      1347 2002-02-27 01:40:50 ./usr/share/doc/parted/copyright
-rw-r--r-- root/root      6444 2002-03-28 13:37:33 ./usr/share/doc/parted/changelog.Debian.gz
-rw-r--r-- root/root     15523 2002-03-28 02:36:43 ./usr/share/doc/parted/changelog.gz
</screen>

      <para>Debe ser el útlimo fichero del archivo deb.</para>

    </sect2>
    
    <sect2><title>control.tar.gz</title>
    
      <para>En nuestro ejemplo, este fichero contiene lo siguiente:</para>

<screen>
-rw-r--r--    1 root     root         1336 Mar 28  2002 control
-rw-r--r--    1 root     root          388 Mar 28  2002 md5sums
-rwxr-xr-x    1 root     root          253 Mar 28  2002 postinst
-rwxr-xr-x    1 root     root          194 Mar 28  2002 prerm
</screen>

      <para><filename>md5sums</filename> contiene la suma md5 para cada
      fichero de <filename>data.tar.gz</filename>. En nuestro ejemplo, el
      contenido es tal que así:</para>

<screen>
1d15dcfb6bb23751f76a2b7b844d3c57  sbin/parted
4eb9cc2e192f1b997cf13ff0b921af74  usr/share/man/man8/parted.8.gz
2f356768104a09092e26a6abb012c95e  usr/share/doc/parted/README.Debian
a6259bd193f8f150c171c88df2158e3e  usr/share/doc/parted/copyright
7f8078127a689d647586420184fc3953  usr/share/doc/parted/changelog.Debian.gz
98f217a3bf8a7407d66fd6ac8c5589b7  usr/share/doc/parted/changelog.gz
</screen>

      <para>No se preocupe, el fichero <filename>md5sums</filename>, al
      igual que los ficheros <filename>postinst</filename> y
      <filename>prerm</filename>, no son obligatorios para su primer
      paquete. Pero, por favor, tome nota de su existencia, pues todo
      paquete oficial de Debian los tiene por buenas razones.</para>

      <para><filename>prerm</filename> y <filename>postinst</filename>
      parecen ocuparse de eliminar los ficheros de documentación antiguos y
      de añadir un enlace desde <filename>doc</filename> a
      <filename>share/doc</filename>.</para>

<screen><anchor id="postinst"/>$ cat postinst
#!/bin/sh
set -e
# Automatically added by dh_installdocs
if [ "$1" = "configure" ]; then
  if [ -d /usr/doc -a ! -e /usr/doc/parted -a -d /usr/share/doc/parted ]; then
    ln -sf ../share/doc/parted /usr/doc/parted
  fi
fi
# End automatically added section

$ cat prerm
#!/bin/sh
set -e
# Automatically added by dh_installdocs
if [ \( "$1" = "upgrade" -o "$1" = "remove" \) -a -L /usr/doc/parted ]; then
  rm -f /usr/doc/parted
fi
# End automatically added section
</screen>

      <para>Y, finalmente, el fichero más interesante:</para>

<screen>
$ cat control
Package: parted
Version: 1.4.24-4
Section: admin
Priority: optional
Architecture: i386
Depends: e2fsprogs (&gt;= 1.27-2), libc6 (&gt;= 2.2.4-4), libncurses5 (&gt;= \
5.2.20020112a-1), libparted1.4 (&gt;= 1.4.13+14pre1), libreadline4 (&gt;= \
4.2a-4), libuuid1
Suggests: parted-doc
Conflicts: fsresize
Replaces: fsresize
Installed-Size: 76
Maintainer: Timshel Knoll &lt;timshel@debian.org&gt;
Description: The GNU Parted disk partition resizing program
 GNU Parted is a program that allows you to create, destroy,
 resize, move and copy hard disk partitions. This is useful
 for creating space for new operating systems, reorganizing
 disk usage, and copying data to new hard disks.
 .
 This package contains the Parted binary and manual page.
 .
 Parted currently supports DOS, Mac, Sun, BSD, GPT and PC98
 disklabels/partition tables, as well as a 'loop' (raw disk)
 type which allows use on RAID/LVM. Filesystems supported are
 ext2, ext3, FAT (FAT16 and FAT32) and linux-swap. Parted can
 also detect HFS (Mac OS), JFS, NTFS, ReiserFS, UFS and XFS
 filesystems, but cannot create/remove/resize/check these
 filesystems yet.
 .
 The nature of this software means that any bugs could cause
 massive data loss. While there are no known bugs at the moment,
 they could exist, so please back up all important files before
 running it, and do so at your own risk.
</screen>

      <para>Puede obtener más información acerca del fichero
      <filename>control</filename> vía <literal>man 5
      deb-control</literal>.</para>
      
    </sect2>
  </sect1>
  
  <sect1>
    <title>Con las manos en la masa</title>
    
    <para>Ahora es el momento de ponernos prácticos. Tengo un script de
    shell muy sencillo llamado <filename>linuxstatus</filename>, que quiero
    instalar como <filename>/usr/bin/linuxstatus</filename>. Así que
    primero crearemos un directorio llamado <filename>debian</filename> al
    lado del fichero <filename>linuxstatus</filename>.</para>

<screen>
$ mkdir -p ./debian/usr/bin
$ cp linuxstatus ./debian/usr/bin
</screen>

    <sect2><title>control</title>
    
      <para>Empecemos con el fichero <filename>control</filename>. El
      número de versión debe tener un guión con un número de versión
      adicional del paquete de Debian, por ejemplo, '1.1-1'. Si su programa
      consiste sólo en scripts de shell portables, utilice
      <literal>all</literal> como su arquitectura
      (<literal>Architecture</literal>).</para>

      <para>Para <literal>Depends</literal>, necesitará averiguar a qué
      paquete pertenece un cierto fichero o programa del cual depende su
      nuevo paquete. Existe una página web en la que puede buscar ficheros
      de Debian: <ulink url="http://www.debian.org/distrib/packages">http://www.debian.org/distrib/packages</ulink>.
      Vaya al final de esa página. Una vez que conozca el nombre del
      paquete, puede obtener más detalles sobre la versión de ese paquete
      en su sistema con el comando <command>apt-cache showpkg
      package</command>.</para>

      <para><literal>Suggests</literal>, <literal>Conflicts</literal> y
      <literal>Replaces</literal> pueden obviarse si no son
      necesarios.</para>

      <para>Así que éste es el resultado de nuestro primer fichero
      <filename>control</filename>:</para>

<programlisting>Package: linuxstatus
Version: 1.1-1
Section: base
Priority: optional
Architecture: all
Depends: bash (&gt;= 2.05a-11), textutils (&gt;= 2.0-12), awk, procps (&gt;= \
1:2.0.7-8), sed (&gt;= 3.02-8), grep (&gt;= 2.4.2-3), shellutils (&gt;= 2.0.11-11)
Maintainer: Chr. Clemens Lee &lt;clemens@kclee.com&gt;
Description: Información sobre el sistema Linux
 Este script proporciena una amplia perspectiva de los
 distintos aspectos del sistema</programlisting>
 
       <para>El fichero <filename>control</filename> se copia dentro del
       directorio llamado <filename>DEBIAN</filename>, dentro del otro
       directorio <filename>debian</filename>.</para>

<screen>
$ mkdir -p debian/DEBIAN
$ find ./debian -type d | xargs chmod 755  # esto es necesario en Debian
$ cp control debian/DEBIAN                 # Woody, no me pregunten por qué
</screen>

      <para>Si espera que su paquete tenga una mayor audiencia en el
      futuro, puede que le ayude leer este artículo:
      <ulink
      url="http://people.debian.org/~walters/descriptions.html">Escribiendo
      descripciones de paquetes de Debian</ulink>.</para>

    </sect2>
    
    <sect2><title>dpkg-deb</title>
    
      <para>Ya casi está hecho. Tan sólo escriba:</para>

<screen>
$ dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.1-1_all.deb
</screen>

      <para>Uh, esto ha sido más fácil de lo esperado. Ahora sólo tenemos
      que instalar este paquete en nuestra máquina y hemos acabado:</para>

<screen>
root# dpkg -i ./linuxstatus_1.1-1_all.deb
</screen>

      <para>Escriba <command>linuxstatus</command> o <command>ls -l
      /usr/bin/linuxstatus</command> para ver si ha funcionado. Si ya no le
      gusta su paquete, sólo tiene que escribir <command>dpkg -r
      linuxstatus</command> y comprobar que el paquete se ha desinstalado.
      Sin embargo, si instala una versión nueva, no necesita eliminar primero
      el antiguo.</para>

      <para>Si siente curiosidad sobre el esquema de numeración de
      versiones y las convenciones sobre cómo darle un nombre a un paquete
      Debian, échele un vistazo a <ulink
      url="http://www.debian.org/doc/manuals/reference/ch-system.es.html#s-pkgname">esta
      sección</ulink> de la <ulink
      url="http://www.debian.org/doc/manuals/reference/reference.es.html">Guía
      de Referencia de Debian</ulink>.</para>

    </sect2>
  </sect1>
  
  <sect1>
    <title>Revisión</title>
    
    <para>Ahora que ha tenido una primera impresión y ha creado su propio
    paquete binario, es hora de ponerse un poco serios y mirar la calidad
    del paquete que hemos producido.</para>

    <sect2><title>lintian</title>

      <para>Afortunadamente para nosotros, el proyecto Debian nos
      proporciona una herramienta tipo <literal>lint</literal> para
      inspeccionar los paquetes de Debian. Esta herramienta se llama
      <command>lintian</command>. Ni aún no la ha instalado en su sistema,
      ahora es un buen momento (<command>apt-get install
      lintian</command>).</para>

      <para>Ahora utilicemos esta pequeña joya de herramienta sobre nuestro
      nuevo paquete:</para>

<screen>$ lintian linuxstatus_1.1-1_all.deb
E: linuxstatus: binary-without-manpage linuxstatus
E: linuxstatus: no-copyright-file
W: linuxstatus: prerm-does-not-remove-usr-doc-link
W: linuxstatus: postinst-does-not-set-usr-doc-link</screen>

      <para>Uh, la cosa no parece tan perfecta. Nos falta una página man,
      un fichero de copyright, y también los scripts
      <filename>prerm</filename> y <filename>postinst</filename>.</para>

    </sect2>
    
    <sect2><title>Una mínima documentación</title>
    
      <para>Éste no es lugar para hablar mucho sobre cómo escribir y crear
      páginas man. Hay muchos libros que tiene algún que otro capítulo
      dedicado a este tema, y también está el <ulink
      url="http://www.tldp.org/HOWTO/mini/Man-Page.html">Linux
      MAN-PAGE-HOWTO</ulink> en línea. Así que hagamos un pequeño salto en el
      tiempo y supongamos que ya tiene una perfecta página man para su script
      situada en <filename>./man/man1/linuxstatus.1</filename>.</para>

      <para>Lo mismo para el fichero <filename>copyright</filename>. Puede
      encontrar bastantes ejemplos en el directorio
      <filename>/usr/share/doc</filename> con este comando: <command>find
      /usr/share/doc -name "copyright"</command>.</para>

      <para>Éste es nuestro ejemplo de fichero
      <filename>copyright</filename>:</para>

<programlisting>linuxstatus

Copyright: Chr. Clemens Lee &lt;clemens@kclee.com&gt;

2002-12-07

La página de linuxstatus está en: 
http://www.kclee.com/clemens/unix/index.html#linuxstatus

Todo el código base puede distribuírse bajo los términos de la Licencia
Pública General de GNU (GPL), que aparece inmediatamente abajo.
Alternativamente, todo el código fuente y todo código derivado de él puede
distribuírse bajo la Licencia Pública General Menor de GNU (LGPL), a
elección del distribuidor. El texto completo de la LGPL aparece al final de
este fichero.

Vea /usr/share/common-licenses/(GPL|LGPL)</programlisting>

      <para>Para los scripts <filename>prerm</filename> y
      <filename>postinst</filename> copiaremos los <ulink
      url="#postinst">ejemplos</ulink> del paquete
      <literal>parted</literal> de arriba en nuestro propio directorio de
      proyecto. Estos ficheros deberían valernos también.</para>

      <para>Ahora creamos el paquete de Debian de nuevo. En el fichero
      <filename>control</filename> tenemos que incrementar el número de
      versión de 1.1-1 a 1.2-1 (ya que hemos escrito una página man nueva,
      aumentamos el número de lanzamiento interno). También tenemos que
      copiar los nuevos ficheros a los lugares apropiados:</para>

<screen>$ mkdir -p ./debian/usr/share/man/man1
$ mkdir -p ./debian/usr/share/doc/linuxstatus
$ find ./debian -type d | xargs chmod 755
$ cp ./man/man1/linuxstatus.1 ./debian/usr/share/man/man1
$ cp ./copyright ./debian/usr/share/doc/linuxstatus
$ cp ./prerm ./postinst ./debian/DEBIAN
$ gzip --best ./debian/usr/share/man/man1/linuxstatus.1
$
$ dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb</screen>

      <para>Se necesita <command>gzip</command> porque
      <command>lintian</command> espera que las páginas man estén
      comprimidas todo lo posible.</para>
      
    </sect2>
    
    <sect2><title>fakeroot</title>
    
      <para>Ahora veamos si nuestro paquete se ha convertido en un mejor
      ciudadano de Debian:</para>

<screen>$ lintian linuxstatus_1.2-1_all.deb
E: linuxstatus: control-file-has-bad-owner prerm clemens/clemens != root/root
E: linuxstatus: control-file-has-bad-owner postinst clemens/clemens != root/root
E: linuxstatus: bad-owner-for-doc-file usr/share/doc/linuxstatus/ clemens/clemens != root/root
E: linuxstatus: bad-owner-for-doc-file usr/share/doc/linuxstatus/copyright clemens/clemens != root/root
E: linuxstatus: debian-changelog-file-missing</screen>

      <para>Ups, nuevas quejas. Vale, no nos rindamos. En realidad, la
      mayoría de los errores parecen ser el mismo problema. Nuestros
      ficheros están empaquetados con el usuario y grupo
      <literal>clemens</literal>, pero supongo que la mayoría de la gente
      preferirá instalarlos como <literal>root/root</literal>. Pero esto es
      fácil de arreglar utilizando la herramienta
      <command>fakeroot</command>. Hagamos el arreglo y volvamos a
      comprobar (ignorando el asunto del changelog):</para>

<screen>$ <emphasis role="bold">fakeroot</emphasis> dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb
$ lintian linuxstatus_1.2-1_all.deb
E: linuxstatus: debian-changelog-file-missing</screen>

      <para>Bien, pero todavía necesitamos añadir otro fichero al
      paquete.</para>

    </sect2>
    
    <sect2><title>Más documentación</title>
    
      <para>Déjeme decirle que aparte del fichero
      <filename>changelog</filename> en el directorio
      <filename>doc/linuxstatus</filename>, también se requiere un fichero
      <filename>changelog.Debian</filename>.</para>

      <para>Ahí van dos ficheros <filename>changelog</filename> de
      ejemplo:</para>

<programlisting>linuxstatus (1.2-1)

  * El paquete pasa el test de lintian.

 -- Chr. Clemens Lee &lt;clemens@kclee.com&gt;  2002-12-13</programlisting>
 
      <para>Y <filename>changelog.Debian</filename>:</para>

<programlisting>El mantenedor y autor original de linuxstatus
son el mismo. Por tanto, vea también el fichero normal
changelog para los cambios de Debian.</programlisting>

      <para>El Manual de la Política de Debian tiene más detalles en
      relación con el <ulink
      url="http://www.debian.org/doc/debian-policy/ch-miscellaneous.html#s-dpkgchangelog">formato
      del fichero <filename>changelog</filename></ulink>.</para>
      
      <para>Ahora, con suerte, nuestro último paso será:</para>

<screen>$ cp ./changelog ./changelog.Debian ./debian/usr/share/doc/linuxstatus
$ gzip --best ./debian/usr/share/doc/linuxstatus/changelog 
$ gzip --best ./debian/usr/share/doc/linuxstatus/changelog.Debian
$ fakeroot dpkg-deb --build ./debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb
$ lintian linuxstatus_1.2-1_all.deb</screen>

      <para>Ah, ya no nos salen más quejas :-). Ahora, como root, puede
      instalar este paquete sobre el antiguo, de nuevo con el comando
      estándar <command>dpkg -i</command>.</para>

<screen>root# dpkg -i ./linuxstatus_1.2-1_all.deb
(Reading database ... 97124 files and directories currently installed.)
Preparing to replace linuxstatus 1.1-1 (using linuxstatus_1.2-1_all.deb) ...
Unpacking replacement linuxstatus ...
Setting up linuxstatus (1.2-1) ...</screen>

    </sect2>
  </sect1>
  
  <sect1>
    <title>Resumen</title>

    <para>Para no confundirnos, recapitulemos todos los pasos que hemos
    tomado para crear nuestro paquete binario de Debian.</para>

    <para>Ficheros requeridos antes de empezar:</para>

    <orderedlist>
      <listitem><simpara>uno o más binarios ejecutables o ficheros de script</simpara></listitem>
      <listitem><simpara>una página man por cada fichero ejecutable</simpara></listitem>
      <listitem><simpara>un fichero <filename>control</filename></simpara></listitem>
      <listitem><simpara>un fichero <filename>copyright</filename></simpara></listitem>
      <listitem><simpara>un fichero <filename>changelog</filename> y otro <filename>changelog.Debian</filename></simpara></listitem>
    </orderedlist>
    
    <para>Crear los directorios temporales <filename>debian</filename>:</para>

    <orderedlist>
      <listitem><simpara>crer el directorio <filename>debian/usr/bin</filename> (o donde planee colocar sus ficheros ejecutables)</simpara></listitem>
      <listitem><simpara>crear el directorio <filename>debian/usr/share/man/man1</filename> (o la sección a la que pertenezca su página man)</simpara></listitem>
      <listitem><simpara>crear el directorio <filename>debian/DEBIAN</filename></simpara></listitem>
      <listitem><simpara>crear el directorio <filename>debian/usr/share/doc/&lt;nombre_del_paquete&gt;</filename></simpara></listitem>
      <listitem><simpara>asegurarse de que todos los subdirectorios de <filename>debian</filename> tienen los permisos de fichero 0755</simpara></listitem>
    </orderedlist>
    
    <para>Copiar los ficheros en el árbol
    temporal <filename>debian</filename>:</para>
    
    <orderedlist>
      <listitem><simpara>copiar el fichero ejecutable en el directorio <filename>debian/usr/bin</filename> (o donde planee colocar sus ficheros ejecutables)</simpara></listitem>
      <listitem><simpara>copiar la página man en el directorio <filename>debian/usr/share/man/man1</filename></simpara></listitem>
      <listitem><simpara>copiar el fichero <filename>control</filename> en el directorio <filename>debian/DEBIAN</filename></simpara></listitem>
      <listitem><simpara>copiar los ficheros
      <filename>copyright</filename>, <filename>changelog</filename>, y <filename>changelog.Debian</filename> en <filename>debian/usr/share/doc/&lt;nombre_del_paquete&gt;</filename></simpara></listitem>
      <listitem><simpara>Comprima con <command>gzip --best</command>
      los ficheros <filename>copyright</filename>, <filename>changelog</filename>, <filename>changelog.Debian</filename> y la página man en el árbol temporal <filename>debian</filename></simpara></listitem>
    </orderedlist>
    
    <para>Construir y comprobar el paquete binario de Debian:</para>
    
    <orderedlist>
      <listitem><simpara>invoque <command>dpkg-deb --build</command> usando <command>fakeroot</command> dentro del directorio <filename>debian</filename></simpara></listitem>
      <listitem><simpara>renombre el fichero <filename>debian.deb</filename> resultante con el nombre final, incluyendo la información sobre la versión y la arquitectura</simpara></listitem>
      <listitem><simpara>compruebe que el paquete <literal>.deb</literal> resultante cumple la política de Debian utilizando <command>lintian</command></simpara></listitem>
    </orderedlist>
  </sect1>
  
  <sect1>
    <title>Qué más</title>
    
    <para>Hay muchos detalles que no hemos cubierto aquí, por ejemplo, cómo
    distribuír los demonios Unix, los ficheros de configuración y mucho
    más.</para>

    <para>Pero quiero recalcar con más importancia que, para los
    desarrolladores de Debian, los paquetes son paquetes fuente, no
    paquetes binarios. Nunca interactúan con los paquetes binarios
    internos. De hecho, sólo los desarrolladores de
    <command>dpkg-deb</command> y <command>dpkg</command> necesitan saber
    lo que son. De hecho, no se recomienda hacerlo así.</para>

    <para>Si un desarrollador tuviera que explicarle a alguien cómo crear
    un paquete de Debian, con seguridad le explicaría cómo hacer un paquete
    fuente y cómo construirlo.</para>

    <para>Por otra parte, no todo desarrollador quiere enviar su software a
    Debian (todavía), pero, sin embargo, quiere beneficiarse de las
    ventajas de un sistema de empaquetamiento como el que ofrece
    <command>dpkg</command>, sin liberar el código fuente del paquete.
    Personalmente, seguiré liberarando mis proyectos libres como ficheros
    <literal>tar.gz</literal> con el código fuente para todas las
    plataformas, mientras que planeo ofrecer más y más paquetes
    <literal>.deb</literal> para la comodidad de los usuarios de Debian que
    sólo quieran instalar y utilizar mi software.</para>

    <para>Si alguien quiere dar el siguiente paso y enviar un paquete de
    software a Debian, hay que estudiarse primero la <ulink
    url="http://www.debian.org/doc/manuals/maint-guide/index.es.html">Guía
    del Nuevo Desarrollador de Debian</ulink>, además del <ulink
    url="http://www.debian.org/doc/debian-policy/">Manual de la Política de
    Debian</ulink>. Durante la tarea de crear un paquete fuente de Debian,
    échele también un vistazo a la lista de correo <ulink
    url="http://lists.debian.org/debian-mentors/">debian-mentors</ulink>
    para ver a desarrolladores de Debian experimentados y novatos
    interactuando y abordando los mismos problemas que puede que se
    encuentre.</para>
  </sect1>
  
  <sect1>
    <title>Créditos</title>
    
    <para>Gracias a:</para>
    
    <itemizedlist>
      <listitem><simpara>Colin Watson por contribuír con una frase en el
      resumen y dar sus impresiones sobre la estructura, enfoque y título
      de este COMO,</simpara></listitem>
      <listitem><simpara>Bill Allombert por contribuír con una frase en la
      sección 'Qué más', y dar sus impresiones reforzando lo que había
      dicho Colin,</simpara></listitem>
      <listitem><simpara>Santiago Vila por indicar que
      <command>md</command> es un alias local y que en el mundo (Unix), el
      estándar es <command>mkdir</command>,</simpara></listitem>
      <listitem><simpara>Tabatha Marshall, del proyecto
      <ulink url="http://www.tldp.org/">TLDP</ulink>, por proporcionarme un
      soporte general,</simpara></listitem>
      <listitem><simpara>Joey Hess, Carlo Perassi, y Joe Riel por
      correcciones menores,</simpara></listitem>
      <listitem><simpara>Claudio Cattazzo por la conversión de mi documento
      XML privado a un formato DocBook estándar, que también resultó en
      varias correcciones mejores y mejoras [2003-10-04].</simpara></listitem>
	 </itemizedlist>
  </sect1>
  <sect1>
    <title>Enlaces</title>
    <para>
      <informaltable frame="none">
        <tgroup cols="2">
          <tbody>
            <row>
              <entry>Guía del Nuevo Mantenedor de Debian: &#xA0;</entry>
              <entry>
                <ulink url="http://www.debian.org/doc/maint-guide/">http://www.debian.org/doc/maint-guide/</ulink>
              </entry>
            </row>
            <row>
              <entry>Debian: &#xA0;</entry>
              <entry>
                <ulink url="http://www.debian.org/">http://www.debian.org/</ulink>
              </entry>
            </row>
            <row>
              <entry>Este documento: &#xA0;</entry>
              <entry>
                <ulink url="http://www.kclee.com/clemens/unix/HowToCreateYourOwnDebianPackage.html">http://www.kclee.com/clemens/unix/HowToCreateYourOwnDebianPackage.html</ulink>
              </entry>
            </row>
	    <row>
	      <entry>Este documento en español: &#xA0;</entry>
	      <entry>
	        <ulink
		url="http://the-geek.org/docs/ComoCrearTuPropioPaqueteDebian.html">http://the-geek.org/docs/ComoCrearTuPropioPaqueteDebian.html</ulink>
              </entry>
            </row>
            <row>
              <entry>La Guía de Referencia de Debian: &#xA0;</entry>
              <entry>
                <ulink url="http://www.debian.org/doc/manuals/reference/reference.es.html">http://www.debian.org/doc/manuals/reference/reference.es.html</ulink>
              </entry>
            </row>
            <row>
              <entry>Paquetes de Debian: &#xA0;</entry>
              <entry>
                <ulink url="http://www.debian.org/distrib/packages">http://www.debian.org/distrib/packages</ulink>
              </entry>
            </row>
            <row>
              <entry>Cómo escribir descripciones de paquetes de Debian: &#xA0;</entry>
              <entry>
                <ulink url="http://people.debian.org/~walters/descriptions.html">http://people.debian.org/~walters/descriptions.html</ulink>
              </entry>
            </row>
            <row>
              <entry>El COMO de las páginas man de Linux: &#xA0;</entry>
              <entry>
                <ulink url="http://www.tldp.org/HOWTO/mini/Man-Page.html">http://www.tldp.org/HOWTO/mini/Man-Page.html</ulink>
              </entry>
            </row>
            <row>
              <entry>El Manual de la Política de Debian: &#xA0;</entry>
              <entry>
                <ulink url="http://www.debian.org/doc/debian-policy/">http://www.debian.org/doc/debian-policy/</ulink>
              </entry>
            </row>
            <row>
              <entry>debian-mentors: &#xA0;</entry>
              <entry>
                <ulink url="http://lists.debian.org/debian-mentors/">http://lists.debian.org/debian-mentors/</ulink>
              </entry>
            </row>
	    <row>
              <entry>El Proyecto de Documentación de Linux: &#xA0;</entry>
              <entry>
                <ulink url="http://www.tldp.org/">http://www.tldp.org/</ulink>
              </entry>
            </row>
            <row>
              <entry>Plublicidad: mi pequeña página sobre Unix: &#xA0;</entry>
              <entry>
                <ulink url="http://www.kclee.com/clemens/unix/">http://www.kclee.com/clemens/unix/</ulink>
              </entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
    </para>
  </sect1>
</article>
