Monografias.com > Computación > Sistemas Operativos
Descargar Imprimir Comentar Ver trabajos relacionados

Creación de paquetes de Debian



     

    Resumen

    El paquete es el componente fundamental de una distribución, pero dentro de éstos
    hay mucho más de lo que uno pudiera imaginar. En este
    artículo se analiza la distribución Debian
    GNU/Linux desde esta perspectiva.

    Introducción

    Es importante conocer la estructura de
    paquetes que las distribuciones usan, porque sólo
    así uno es capaz de arreglar los problemas que
    puedan surgir en su uso diario (corrupción
    de archivos,
    instalación de programas fuera
    de la distribución, etc.).

    A pesar de que las distribuciones vienen con un buen
    número de software (Debian
    GNU/Linux, por
    ejemplo, cuenta con más de 2500 paquetes de software) a
    veces interesará instalar software que no es parte de la
    distribución o que aún no ha sido incorporado a
    ésta; esto incluye paquetes de software que se encuentran
    en la red y software
    comercial, e, incluso, aplicaciones creadas por el propio
    usuario; para estas cosas serán necesario hacerse sus
    propios paquetes si no se quiere entrar en conflicto con
    el sistema de
    paquetes. Por supuesto, si se desea contribuir a las distintas
    distribuciones con software, evidentemente, se deberá dar
    los programas convenientemente empaquetados.

    También puede ser útil para recompilar
    paquetes nuevos con librerías antiguas, es el caso, por
    ejemplo, con los paquetes hamm de Debian 2.0 compilados para
    libc6, que podrían instalarse en un sistema bo (Debian
    1.3.1), que utiliza libc5, sin más que recompilar el
    código
    fuente e instalar el paquete (si fuera sólo ésta la
    única dependencia problemática, el significado de
    las dependencias se verá más tarde).

    En éste artículo se verá en detalle
    el sistema de paquetes de Debian GNU/Linux desde el punto de
    vista del formato de paquete (.deb) con objeto de preparar al
    lector interesado para lo arriba indicado. Hay que tener en
    cuenta, sin embargo, que el sistema de paquetes es mucho
    más amplio que sólo un formato de archivo ya que
    lleva detrás toda una filosofía de "cómo
    hacer las cosas" , que en el caso de Debian es una Política bien
    definida.

    La razón de detallar el sistema de paquetes de
    Debian es múltiple: por un lado el sistema de paquetes de
    Debian GNU/Linux es muy versátil, con algunas
    características que dan uniformidad a la
    distribución en cuanto a la localización de
    programas y documentación; asimismo, el sistema Debian
    GNU/Linux es el más abierto con respecto a la
    incorporación de desarrolladores (en inglés,
    maintainers) a éste, a diferencia de otras
    distribuciones comerciales en las cuales la contribución
    está más limitada. Y finalmente, porque de entre
    muchos otros formatos de paquetes Debian ofrece más que la
    mayoría, como puede leer en este informe.

    Sistema de
    paquetes frente a formato de paquetes

    Es necesario diferenciar, en primer lugar, entre lo que
    es el sistema de paquetes y el formato de paquetes, para no dar
    lugar a confusión. El sistema de paquetes es el conjunto
    de reglas propias de una distribución que indican
    dónde se localizan los programas, cómo se instalan
    demonios en el sistema, qué ficheros de
    configuración genéricos hay accesibles por los
    programas, así como las distintas interacciones entre los
    paquetes, indicando, por ejemplo, si dos programas tienen
    incompatibilidades y no pueden coexistir en el mismo sistema
    (conflictos) o
    si antes de instalar un programa es
    necesario tener otro instalado (dependencias).

    El formato de los paquetes, por ejemplo los ficheros
    .deb en el caso de Debian o .rpm en el caso de RedHat, se suele
    identificar con el sistema de paquetes. Pero, si bien el sistema
    condiciona cómo deberán crearse y distribuirse los
    paquetes (qué reglas han de seguir para instalarse), es
    posible instalar paquetes de otras distribuciones en nuestro
    sistema, e incluso podemos encontrar herramientas
    para hacerlo. Por ejemplo, alien es un programa (disponible como
    paquete en Debian) que, una vez instalado, permite introducir
    paquetes que no pertenecen a la distribución de Debian
    (por ejemplo, rpms) ya que "conoce" los distintos formatos y es
    capaz de "traducirlos" a nuestra distribución. El formato,
    aunque relacionado con el sistema, no es mucho más que
    eso. Las diferencias entre un .deb y un .rpm son en esencia
    similares a las que existen entre un .zip y un .arj.

    Sin embargo, existe un riesgo cuando se
    mezclan paquetes de distintas distribuciones, y es que su
    política, esto es, el sistema de paquetes, será
    distinta. Para poner un ejemplo: Debian y RedHat siguen una
    política distinta en cuanto a la localización de
    los programas que ejecutan los demonios en el arranque, aunque
    ambos siguen el modelo de
    System V (Slackware sigue el modelo de BSD, colocándolos
    en otro sitio), RedHat coloca los demonios en el directorio
    /etc/rc.d/init.d y con los enlaces en /etc/rc.d/rcX.d, mientras
    que Debian lo hace en el /etc/init.d con los enlaces en
    /etc/rcX.d; y ésta no es la única diferencia. Es
    evidente que si instalamos un paquete de una distribución,
    que proporcione demonios que han de ejecutarse en el arranque en
    otra, posiblemente no funcionará.

    Se lleva un tiempo
    debatiendo sobre una posible estandarización de los
    sistemas de
    paquetes, que quizás se consiga como ya se
    consiguió homogeneizar la estructura de directorios a
    través del Linux Filesystem Structure (FSSTND), con lo que
    es posible que en un futuro habrá mayor compatibilidad
    entre las distribuciones.

    Construcción de nuestro primer
    paquete

    Se van a ver, a continuación, los pasos y
    herramientas necesarios para la creación de un paquete
    bajo un sistema Debian GNU/Linux. Se va a escoger el paquete
    hello pues es el que ofrece Debian para mostrar el sistema de
    construcción de paquetes, que no tiene
    más que la versión GNU de hello, habitual para los
    programadores, se trata de un simple programa que escribe "Hello
    world" por la salida estándar.

    Se obtienen primero los tres ficheros fuentes del
    paquete Debian hello,
    es decir: hello_x.x.orig.tar.gz, hello_x.x-xx.diff.gz y
    hello_x.x-xx.dsc (donde las 'x' dependerán del
    número de versión). Todos se pueden encontrar en
    una distribución de Debian en stable/main/source/misc.

    El primero de ellos es el código fuente original,
    el segundo un fichero con las diferencias entre el árbol
    fuente original (el directorio donde se encuentra el
    código fuente) y el árbol fuente Debian, y el
    tercero es una breve descripción del paquete, que, como se
    verá después, está firmada con PGP (Pretty
    Good Privacy, ver
    más abajo
    ) por la persona que lo ha
    empaquetado y tiene un valor de
    control (función
    hash MD5) de los dos ficheros anteriores para poder detectar
    si han sido modificados por alguien ajeno al desarrollador
    (útil para detectar paquetes "troyanos" ).

    En primer lugar se ejecutará, con los tres
    ficheros en un mismo directorio, dpkg-source -x
    hello_x.x-xxx.dsc, que realizará un untar del
    fichero original (generando la estructura de directorios del
    árbol fuente original) y, posteriormente, aplicará
    el programa patch para incorporar las modificaciones que
    se han hecho en Debian del paquete. Dentro del directorio
    generado, que será de la forma nombre_de_paquete-version,
    se ejecutará dpkg-buildpackage, que, si todo sale
    bien (como se puede ver
    aquí
    ), dejará en el
    directorio anterior, un fichero hello_xxx.deb que será el
    paquete preparado para instalar.

    El proceso de
    construcción del paquete lo realiza la orden
    dpkg-buildpackage y para ello ejecuta, por orden:
    dpkg-source, debian/rules (con los métodos
    clean, build y binary), dpkg-shlibdeps,
    dpkg-gencontrol, dpkg-genchanges, y PGP,

    más adelante
    se verá su
    significado aunque se pueden ver los distintos pasos en la figura
    1.

    1. Creación del directorio Debian y ficheros
    asociados.

     

    2. Compilación e instalación en
    debian/tmp

     

     

    3. Creación del paquete.deb

    Fig. 1: Pasos tomados para construir un
    paquete

    Es necesario hacer todo esto como root, ya que una serie
    de las operaciones que
    se ejecutan necesitan tener los privilegios de este usuario, como
    es el cambio de
    propietario de los ficheros (pasan a ser del usuario root y el
    grupo root
    generalmente). Esto puede ser un problema cuando un usuario
    quiera generar un paquete en un sistema en el que carece de estos
    privilegios. Para esto existe el programa fakeroot que
    hace creer al sistema que el usuario es root, esto no supone
    ningún problema de seguridad porque
    en realidad es sólo un engaño para el usuario y sus
    aplicaciones que, en cualquier caso, no adquieren ninguno de los
    privilegios del superusuario.

    Debian usa PGP (aunque cambiará pronto a GPG)
    para certificar la autenticidad e integridad de los paquetes, ya
    que el sistema de inserción de paquetes hechos por
    desarrolladores de Debian es semi-automático (vía
    varios servidores de
    ftp
    anónimo y las máquinas
    de Debian) y, también es posible que personas ajenas a
    Debian (u otros desarrolladores de Debian) manden cambios, para,
    por ejemplo, arreglar errores críticos. Es por tanto
    importante que los paquetes vayan firmados por el que hizo las
    modificaciones (dpkg-buildpackage llama a PGP al final) y
    proteger contra modificaciones del paquete que se intenten hacer
    una vez el maintainer ha dado su versión. Se firma
    así el fichero .dsc que contiene una descripción
    del paquete y una "huella" de los ficheros anteriormente vistos,
    esta firma se realiza con una función "hash" muy conocida:
    MD5; también se firma, si existiera, el fichero .changes
    que contiene las modificaciones realizadas entre una
    versión.

    Las herramientas
    dpkg-xxxxx

    Como se ha visto en el ejemplo anterior, Debian posee
    una serie de herramientas que es necesario llamar para construir
    un paquete. Serán éstas:

    • dpkg-source empaqueta y desempaqueta los
      archivos fuentes de un paquete Debian.
    • dpkg-gencontrol lee la información de un árbol fuente
      Debian desempaquetado y genera un paquete binario de control,
      generando una entrada para éste en el fichero
      debian/files.
    • dpkg-shlibdeps calcula las dependencias de
      ejecutables respecto a librerías.
    • dpkg-genchanges lee la información de
      un árbol fuente Debian desempaquetado y ya construido,
      generando un fichero de control de los últimos cambios
      (un .changes).
    • dpkg-buildpackage es un script de control que
      se puede utilizar para automatizar la construcción del
      paquete.
    • dpkg-distaddfile añade una entrada de
      un fichero a debian/files.
    • dpkg-parsechangelog lee el fichero de cambios
      changelog) de un árbol fuente Debian desempaquetado y
      genera una salida con la información de estos cambios,
      convenientemente preparada.

    El
    directorio Debian

    Debian controla las características y evolución del paquete a través de
    una serie de ficheros. Cosas tales como la descripción del
    paquete, las dependencias con otros paquetes, con
    librerías instaladas, cambios producidos en el paquete,
    reglas para construir y compilar los binarios del paquete,
    etc.

    Esto se consigue con el directorio debian/, que, en
    principio, es lo único que añade Debian al
    código fuente original de un paquete. En este directorio
    se encuentran un conjunto de ficheros (vea la
    figura 1
    ) que deben seguir unas reglas
    definidas en la Política
    de Paquetes de Debian
    , en la que se explica
    tanto el contenido de éstos como su formato.

    En el fichero control se definen las
    características del paquete, y es, básicamente, lo
    que se observa cuando se ejecuta dpkg –status sobre un
    paquete ya instalado o dpkg –info sobre uno no instalado
    (sobre el fichero .deb). Sus campos son:

    • Source: nombre del paquete fuente
      original.
    • Section: sección de Debian a la que
      pertenece (por ejemplo: devel, web,
      admin…).
    • Priority: prioridad que tiene este paquete
      dentro de la distribución (required, important,
      optional, standard, extra).
    • Maintainer: nombre y dirección de e-mail del que mantiene el
      paquete.
    • Standards-Version: estándar de Debian
      bajo el cual se ha creado el paquete.
    • Package: nombre del paquete en
      Debian.
    • Architecture: arquitectura
      para la que se ha creado (i386, alpha, arm, m68k, powerpc,
      sparc..).
    • Depends: dependencias con otros paquetes, se
      indica tanto el paquete como su versión.
    • Conflicts: paquetes con los que entra en
      conflicto y que no pueden estar instalados cuando se instala
      éste.
    • Suggests: paquetes que mejoran el paquete que
      se está instalando y que, aunque no son necesarios para
      su funcionamiento, se recomienda su
      instalación.
    • Description: descripción breve (una
      línea) y larga del contenido del paquete.

    El fichero rules contiene las reglas para construir el
    paquete y será la que llamen los programas de
    construcción de paquetes. Se trata de un Makefile, un
    fichero habitual para aquellos acostumbrados a compilar programas
    en entornos UNIX. Dentro
    de este fichero encontramos una serie de reglas y objetivos a
    cumplir. Dentro de estos últimos podemos destacar varios
    de importancia:

    • clean: limpia el árbol de binarios y
      ficheros temporales. Se ejecutará siempre para asegurse
      que la compilación/construcción del paquete se
      hace sobre una base "limpia" .
    • build: compila las fuentes del programa para
      obtener los binarios (también otras cosas generadas
      automáticamente como, a veces, la
      documentación).
    • binary: llama a dos subobjetivos:
      binary-indep y binary-arch, que van a realizar la
      instalación del paquete bajo debian/tmp, moviendo
      allí programas, documentación y librerías,
      cambiando los permisos y propietarios según corresponda.
      El primero realizará las tareas independientes de
      arquitectura y el segundo las tareas para una arquitectura
      determinada.
    • get-orig-source: especifica una forma de
      obtener el código fuente original que se ha utilizado
      para construir el paquete (vía ftp).

    El fichero changelog documenta los cambios hechos en la
    debianización del programa, estos cambios se refieren a
    los particulares de Debian no a los que se hagan en el
    código fuente; en el raíz generalmente habrá
    un fichero llamado changelog que documentará los cambios
    del programa. Sigue un formato específico, aunque se puede
    utilizar dch o debchange (ver
    más abajo
    ) para modificarlo. Hay
    que recordar que, generalmente, el que mantiene el paquete (y lo
    construye) y el autor del programa serán distintos. Aunque
    Debian tiene paquetes hechos expresamente para este sistema y
    elaborados por sus desarrolladores, esto no es la norma general,
    el compromiso
    principal de Debian
    es el de hacer disponible
    programas de libre distribución en un sistema completo y
    homogéneo.

    En conffiles se listan los ficheros de
    configuración que instala el paquete. Esto es necesario
    para que Debian no sobreescriba ficheros de configuración
    que el usuario ya ha modificado. En el momento de instalar un
    programa, si hubiera ficheros de configuración, Debian
    indicará que son distintos y dará la oportunidad de
    instalar el nuevo o dejar el anterior, arreglando el problema de
    que la instalación de una nueva versión del paquete
    destruya el trabajo
    realizado en configurarlo.

    Los scripts preinst, postinst,
    prerm y postrm son scripts ejecutados por el
    instalador de paquetes en diversos momentos de su
    instalación, respectivamente antes (pre) y después
    (post) de ser instalado (dpkg –install) o eliminado
    (dpkg –remove) del sistema. Estos scripts permiten que,
    en el momento de instalar el paquete, se actualizen ficheros o se
    configuren los programas.

    Finalmente, el fichero README.debian contiene detalles o
    discrepancias entre el paquete original y la versión de
    Debian. Este fichero se encontrará, una vez instalado en
    paquete en /usr/doc/nombre_paquete, junto a toda la
    documentación, el copyright y el fichero de cambios (de la
    versión original y la de Debian).

    Existen otros ficheros: menu, init.d, crontab… que
    pueden usarse para integrar el paquete aún más en
    el sistema.

    Algunas
    herramientas útiles

    Existen algunas herramientas que no forman parte de las
    "estándar" de Debian, pero que pueden resultar
    útiles a la hora de crear paquetes, dado que simplifican
    algunas de las tareas comunes a las que nos podemos enfrentar en
    el momento de hacer un paquete.

    Una de estas es debmake,
    aunque ahora en desuso y poco recomendado, contiene un buen
    número de herramientas para la creación de
    paquetes. Por ejemplo, ejecutando debmake en el
    raíz del árbol fuente original, se generará
    el directorio debian y todos los ficheros de éste,
    preparados para que el usuario los modifique
    convenientemente.

    Muchas de las utilidades de debmake han sido retiradas
    de éste ya que, muy posiblemente, deje pronto de existir,
    estas utilidades se han incorporado, junto con otras, al paquete
    devscripts (http://packages.debian.org/devscripts)
    que contiene: debchange, debclean, release,
    build, depkg, debi, debc, dch,
    uupdate, uscan, y, finalmente,deblint, una
    herramienta muy útil para ver si el paquete cumple
    estrictamente todos los requisitos de la política de
    Debian. El uso de estas herramientas es muy sencillo, por
    ejemplo, para incorporar cambios al fichero debian/changelog se
    puede ejecutar dch texto_del_cambio, si además se
    quiere que sea una nueva versión con dch -n
    texto_del_cambio
    , el programa añadirá
    automáticamente la cabecera y pie según el formato
    definido (indicando fecha, hora y desarrollador).

    También el paquete debhelper
    contiene un buen número de herramientas que pueden
    usarse para construir, de una manera más sencilla, el
    fichero debian/rules, automatizando tareas habituales: instalar
    ficheros, comprimirlos, arreglar los permisos, integrar el
    paquete con el sistema de menú de Debian, etc. Todas las
    utilidades proporcionadas por este paquete comienzan con
    dh_, así tenemos: dh_installdocs,
    dh_installlexamples, dh_checkroot

    Y no se debe dejar de mencionar a cvs-buildpackage
    , que permite crear paquetes a partir de un
    repositorio CVS
    ( "Concurrent Versions System" , un sistema de control de
    versiones muy versátil y ampliamente
    utilizado).

    El formato
    .deb

    Los ficheros .deb generados por el procedimiento ya
    visto, no son sino una serie de ficheros encadenados con el
    programa ar, en total tres: data.tar.gz, control.tar.gz y
    debian-binary. Los dos primeros son, por un lado un tar.gz
    (data.tar.gz) con el árbol de directorios que se genera en
    debian/tmp y que se desempaquetará directamente sobre el
    raíz del disco duro en
    el momento de instalar, y por otro el directorio DEBIAN
    (control.tar.gz) que contiene muchos de los ficheros vistos en
    debian/, aunque algunos estarán modificados.

    Es posible extraer estos por separado, el tar.gz con el
    comando dpkg -x fichero.deb directorio_destino y el DEBIAN
    con el comando dpkg -c fichero.deb directorio_destino.
    Aunque en realidad esto se puede hacer también con ar
    -x fichero.deb
    , lo que hace posible instalar un paquete
    Debian incluso en un sistema que no sepa nada de distribuciones,
    simplemente con tener la herramienta GNU ar ya instalada.
    También se puede construir un fichero .deb (es decir hacer
    el proceso inverso) con el programa ar o con dpkg
    –build directorio
    que creará el fichero
    directorio.deb.

    Diferencias con otros sistemas

    En realidad no se ha contado la política de
    Debian respecto a la instalación de paquetes, que define
    desde dónde deben colocarse los ficheros hasta qué
    modificaciones puede hacer un paquete a un sistema, o a
    través de qué métodos puede hacerlo (por
    ejemplo usando el sistema menu para incluir aplicaciones en los
    menús de todos los gestores de ventanas X). Se recomienda
    al lector que acuda a los
    punteros indicados
    para entrar en el
    detalle, sin embargo sí es interesante comentar algunas de
    las diferencias que hacen que Debian sobresalga por encima de
    otros sistemas:

    la base de datos
    del sistema de paquetes está en texto en
    claro, es posible arreglar problemas de corrupción a mano sin que el sistema se
    quede inutilizado si la base de datos queda
    corrompida.

    existen un buen número de herramientas para la
    gestión
    de paquetes, estando el diseño
    de éstos muy bien documentado.

    hay un fuerte seguimiento de dependencias, especialmente
    con la nueva herramienta de instalación de paquetes que
    apareció en Debian 2.0 llamada apt
    .

    Los paquetes se desempaquetan en un orden que minimiza
    el tiempo durante el cual no están disponibles, asimismo
    el sistema de paquetes garantiza que programas que se puedan
    hacer "daño"
    unos a otros no estén instalados simultáneamente en
    la misma máquina.

    la cooperación entre paquetes y el sistema se
    hace posible de varias formas: a través del paquete
    menu,
    definiendo un estándar de acceso a la documentación
    mediante el paquete doc-base
    (con la documentación en HTML en http://localhost/doc) y de instalación de
    servidor
    (raíz del servidor y residencia de CGIs) lo que permite a
    los paquetes integrarse con el servidor local de web.

    su adherencia a los estándares es firme, no
    sólo existen estándares, sino que se cumplen,
    existiendo un seguimiento constante de que se cumpla la
    política definida (ver si no la pagina de Lintian,
    también disponible como paquete)
    permite la coexistencia de distintas versiones de una misma
    librería.

    es posible tener distintas versiones del mismo kernel, o
    compilar el kernel junto con los módulos
    fácilmente.

    Y se está trabajando en el uso posible de
    linuxconf. Habiéndose terminado ya selecciones
    prefabricadas de paquetes, de forma que un usuario pueda elegir
    cosas genéricas (desarrollo de
    web, juegos,
    desarrollo software…) en la instalación y obtener una
    selección de paquetes relevantes; para no
    tener que navegar por entre los 2500 paquetes disponibles en
    Debian 2.1.

    Con todo esto y más, Debian demuestra que su
    sistema de paquetes es robusto y confiable, más aún
    que los de otras distribuciones. Esto, junto a la gran calidad y
    variedad de programas que acompañan a la
    distribución, y el ser un sistema abierto a todos aquellos
    que deseen colaborar (quizás el lector después de
    leer este artículo desee hacerlo) lo convierte en un
    sistema muy a tener en cuenta en el mundo de
    GNU/Linux.

    Apéndice: Construcción del paquete
    hello

    templar@root:/tmp/hello-1.3$
    dpkg-buildpackage

    dpkg-buildpackage: source package is hello

    dpkg-buildpackage: source version is 1.3-13

    dpkg-buildpackage: build architecture is i386

    debian/rules clean

    test -f hello.c -a -f debian/rules

    rm -f build make -i distclean || make -f Makefile.in
    distclean

    make[1]: Entering directory `/tmp/hello-1.3'

    rm -f hello *.o core test.out
    hello.dvi hello.?? hello.??s rm -f

    Makefile config.status

    make[1]: Leaving directory `/tmp/hello-1.3'

    rm -rf *~ debian/tmp debian/*~ debian/files*

    dpkg-source -b hello-1.3

    dpkg-source: building hello using existing
    hello_1.3.orig.tar.gz

    dpkg-source: building hello in
    hello_1.3-13.diff.gz

    dpkg-source: building hello using existing
    hello_1.3.orig.tar.gz

    dpkg-source: building hello in
    hello_1.3-13.diff.gz

    dpkg-source: building hello in
    hello_1.3-13.dsc

    debian/rules build

    test -f hello.c -a -f debian/rules

    ./configure –prefix=/usr checking for gcc
    (…)

    make[1]: Entering directory `/tmp/hello-1.3'
    (…)

    gcc -o hello hello.o version.o getopt.o
    getopt1.o

    make[1]: Leaving directory `/tmp/hello-1.3'

    touch build

    debian/rules binary t

    est -f hello.c -a -f debian/rules

    test root ="`whoami`"

    test -f hello.c -a -f debian/rules

    test -f hello.c -a -f debian/rules

    rm -rf debian/tmp install -d debian/tmp
    debian/tmp/DEBIAN

    install -d debian/tmp/usr/doc/hello

    cp debian/{postinst,prerm}
    debian/tmp/DEBIAN/.

    chmod +x debian/tmp/DEBIAN/{postinst,prerm}

    make CFLAGS=-O2 LDFLAGS=-s INSTALL_PROGRAM='install -c
    -s'

    prefix=debian/tmp/usr install

    make[1]: Entering directory `/tmp/hello-1.3'
    ./mkinstalldirs debian/tmp/usr/bin

    debian/tmp/usr/info install -c -s hello
    debian/tmp/usr/bin/hello

    /usr/bin/install -c -m 644 ./hello.info
    debian/tmp/usr/info/hello.info

    make[1]: Leaving directory `/tmp/hello-1.3' g

    zip -9v debian/tmp/usr/info/*

    cp debian/copyright
    debian/tmp/usr/doc/hello/.

    cp debian/changelog
    debian/tmp/usr/doc/hello/changelog.Debian

    cp ChangeLog

    debian/tmp/usr/doc/hello/changelog

    gzip -9v
    debian/tmp/usr/doc/hello/changelog{,.Debian}

    dpkg-shlibdeps hello

    dpkg-gencontrol chown -R root.root debian/tmp

    chmod -R g-ws debian/tmp

    dpkg –build debian/tmp .. d

    pkg-deb: building package `hello' in
    `../hello_1.3-13_i386.deb'.

    signfile hello_1.3-13.dsc

    Pretty Good Privacy(tm) 2.6.2i – Public-key encryption
    for the masses. (c)

    1990-1995 Philip Zimmermann, Phil's Pretty Good
    Software. 7 May 95

    (…)

    dpkg-genchanges

    dpkg-genchanges: not including original source code in
    upload

    signfile hello_1.3-13_i386.changes

    Pretty Good Privacy(tm) 2.6.2i – Public-key encryption
    for the masses.

    (c) 1990-1995 Philip Zimmermann, Phil's Pretty Good
    Software. 7 May 95 (…)

    dpkg-buildpackage: diff-only upload (original source NOT
    included) ***

    Apéndice: Los nombres de los
    paquete Debian

    En Debian los nombre de los paquetes siguen una
    estructura estándar que es
    nombre+versión+arquitectura.deb. La arquitectura
    podrá ser i386 (PCs con 386 o superior),
    alpha, sparc o m68k, pero se está
    haciendo un gran esfuerzo por llevar a Debian a otras
    arquitecturas como PowerPC o ARM. El número de
    versión es de la forma
    [epoca:]versión-upstream[-revisión-debian].

    • epoca: Un entero generalmente pequeño,
      si no existe se asume que es 0. Se utiliza para soportar el
      cambio de sistemas de
      numeración de versiones que pueda hacer el autor
      original. Generalmente no se muestra.
    • version-upstream: Ésta es la parte
      principal de la versión, se trata del número de
      versión del paquete original (upstream) del cual se ha
      hecho el fichero .deb. Normalmente se mantiene el formato usado
      por el autor original (aunque a veces pueda tener que ser
      modificado para que no existan conflictos), sólo puede
      tener los caracteres alfanuméricos y `+',`-',`.' o `:' y
      debe comenzar por un dígito.
    • revision-debian: Ésta parte de la
      versión representa la versión de las
      modificaciones hechas al paquete para convertirlo en un paquete
      para Debian. Usa el mismo formato que el anterior ( puede no
      existir, si el software ha sido creado específicamente
      para Debian).

    Seguir este esquema es importante porque Debian lo usa
    para resolver conflictos y dependencias, que dependen, en muchos
    casos, de una versión determinada. Sólo con un
    esquema fijo puede dpkg saber si una versión es
    más nueva o más vieja que otra.

    Apéndice: Fichero rules del
    paquete hello (traducido)

    #!/usr/bin/make -f

    # Ejemplo de fichero debian.rules – para GNU Hello
    (1.3)

    # Copyright 1994,1995 por Ian Jackson.

    # Te doy permiso perpetuo e ilimitado para copiar,
    modifiar y relicenciar este fichero,

    # siempre y cuando no borres mi nombre de este fichero
    (Yo asevero mi derecho

    # moral de
    paternidad bajo el Acta de Copyright, Diseño y Patentes de
    1988)

    # Este fichero puede necesitar de modificaciones
    extensas.

    # Solía haber unos objetivos llamados 'source' y
    'diff' en este

    # fichero, y muchos paquetes también han tenido
    'chanes' y

    # 'dist'. Estas funciones han
    sido recogidas por dpkg-source,

    # dpkg-genchanges y dpkg-buildpackage en una forma
    independiente del

    # paquete, estos objetivos están, pues,
    obsoletos

    package=hello

    build:

    $(checkdir)

    ./configure –prefix=/usr

    $(MAKE) CFLAGS=-O2 LDFLAGS=

    touch build clean:

    $(checkdir)

    -rm -f build

    -$(MAKE) -i distclean || $(MAKE) -f Makefile.in
    distclean

    -rm -rf *~ debian/tmp debian/*~ debian/files*

    binary-indep: checkroot build

    $(checkdir)

    # No hay ningun fichero independiente de arquitectura
    generado por

    # este paquete. Si lo hubiera se haría
    aquí.

    binary-arch: checkroot build

    $(checkdir)

    -rm -rf debian/tmp

    install -d debian/tmp debian/tmp/DEBIAN

    install -d debian/tmp/usr/doc/$(package)

    cp debian/{postinst,prerm}
    debian/tmp/DEBIAN/.

    chmod +x debian/tmp/DEBIAN/{postinst,prerm}

    $(MAKE) CFLAGS=-O2 LDFLAGS=-s INSTALL_PROGRAM='install
    -c -s'

    prefix=debian/tmp/usr install

    gzip -9v debian/tmp/usr/info/*

    cp debian/copyright
    debian/tmp/usr/doc/$(package)/.

    cp debian/changelog

    debian/tmp/usr/doc/$(package)/changelog.Debian

    cp ChangeLog
    debian/tmp/usr/doc/$(package)/changelog

    gzip -9v
    debian/tmp/usr/doc/$(package)/changelog{,.Debian}

    dpkg-shlibdeps hello

    dpkg-gencontrol

    chown -R root.root debian/tmp

    chmod -R g-ws debian/tmp

    dpkg –build debian/tmp ..

    define checkdir

    test -f $(package).c -a -f debian/rules endef

    # Esto de aquí abajo es bastante
    genérico

    binary: binary-indep binary-arch

    source diff:

    @echo >&2 'source and diff are obsolete – use
    dpkg-source -b';

    false

    checkroot:

    $(checkdir)

    test root = "`whoami`"

    .PHONY: binary binary-arch binary-indep clean
    checkroot

    Apéndice:
    Más información

    Se puede encontrar más información del
    sistema de paquetes de Debian en el servidor de Debian, en
    http://www.debian.org/
    (el mirror español
    es http://www.es.debian.org/),
    también existen una serie de paquetes que facilitan
    documentación detallada sobre el sistema de paquetes, en
    Debian son: debian-policy
    (política que se debe seguir para crear paquetes
    para Debian), y developers-reference
    (información para aquellos que quieren convertirse
    en desarrolladores oficiales de Debian); aunque se puede
    encontrar mucha información en un sistema Debian instalado
    en /usr/doc/dpkg y /usr/doc/debian. Las listas de
    distribución
    también son una
    fuente importante de información, se encuentran
    indexadas en
    el servidor de Debian
    , en general, la lista
    debian-devel[arroba]lists.debian.org trata todos los temas de
    importancia para los desarrolladores de Debian, también
    existe una lista para usuarios (debian-user) y para usuarios
    españoles (debian-user-spanish).

    En las réplicas de la distribución de
    Debian también se puede encontrar más
    información en el subdirectorio projects.

    Javier Fernández
    Sanguino-Peña.

     

    Acerca de este artículo

    La versión original de este artículo
    está disponible en
    http://www.openresources.com/es/magazine/making-debian-packages/
    ,
    en la Revista Open
    Resources
    .

    15 de abril de 1999

    © Copyright 2001, 2002, 2003, 2004, La
    Espiral,

    Permitida la cópia y distribución
    textual, integral, siempre y cuando se mantenga este
    aviso.

    El copyright de este artículo es compartido por
    su autor y Open Resources. Este artículo se distribuye
    bajo la licencia de la Revista OR
    (OR Magazine License). Puedes ver esta licencia en la siguiente
    URL:
    http://www.openresources.com/magazine/license/index.html

    Este artículo ha sido producido por La Espiral
    y su versión mas reciente se puede encontrar en
    http://www.laespiral.org/

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter