Obre el menú principal

Com construir un paquet DEB

Éste manual va a enseñar a crear un paquete DEB, con las herramientas que Debian proporciona.

Va destinado a las personas que quieran crear un paquete (fichero) para instalar algún programa de manera fácil. O para ayudar a alguien a instalar ficheros y programas en el sistema y éste, no tiene demasiados conocimientos de Linux.

Preparación

Primeramente, vamos a tener que obtener los programas que vamos a usar para crear el paquete DEB.

apt-get install fakeroot debhelper devscripts dpkg-dev debianutils perl sed lintian dh-make

Una vez esto, nosotros recomendamos crear una carpeta donde vamos a hacer nuestros paquetes y archivos, de manera que no vamos a ocupar otros directorios. Nosotros vamos a referirnos a esta carpeta con el nombre de nous_paquets


Primer paso: Programa/s o Fichero/s a empaquetar

Una vez creado la carpeta temporal donde vamos a crear nuestros paquetes, vamos a tener que escoger el programa a empaquetar. En este manual vamos a empaquetar el kdemar-dvd que es un paquete que contiene muchos binarios (programas ejecutables) y ficheros; pero será lo mismo que si empaquetamos uno que sólo tenga un ejecutable o un fichero.

En la carpeta temporal escogida, vamos a crear una carpeta con el nombre del programa a empaquetar y la versión, seguida de un guión. Por ejemplo, la versión de kdemar-dvd será la 1.1, así que finalmente, el nombre de la carpeta que vamos a crear será ésta:

kdemar-dvd-1.1

Vamos a crear una carpeta llamada src, dentro de la carpeta del programa. La estructura de directorios está quedando así:

nous_paquets
    kdemar-dvd-1.1
        src

Dentro de la carpeta src vamos a poner todo el contenido que queramos empaquetar, tal y como queramos que quede cuando lo instalemos. Por ejemplo, si queremos que un programa se instale en la carpeta /usr/bin, vamos a crear la carpeta usr y bin, dentro de src, y pondremos nuestros ficheros ahí. Y así sucesivamente con todas las carpetas que nosotros queramos. La estructura que queda en este manual es así

nous_paquets
    kdemar-dvd-1.1
        src
            usr
                bin
                    cadi
            etc
                apt
                    sources.list

Este ejemplo instala, el cadi dentro de /usr/bin y sources.list dentro de /etc/apt.

Una vez coloquemos todos los ficheros que deseamos instalar dentro de las carpetas, vamos ya a poder crear la estructura inicial de nuestro paquete DEB.

Segundo Paso: Creación inicial del paquete

Crearemos ahora la estructura del paquete DEB, con las herramientas de Debian. Para ello, vamos a entrar en la carpeta que contiene la carpeta src. En nuestro caso es la carpeta kdemar-dvd-1.1. El número de versión, será la versión del programa que estemos empaquetando. Si el programa es nuestro o es un paquete que es nuestro, seremos nosotros quienes especificaremos el número de versión. Una vez ahí, abrimos una konsole, con la tecla F4; o vamos ahí desde un terminal de comando cualquiera. Ahí, primeramente definiremos nuestro email, así

export EMAIL=adonay@kademar.org

Y ejecutaremos el comando para crear la estructura inicial del paquete DEB (kdemar-dvd-1.1)

dh_make -f ../activitatsjclic-1.0.orig.tar.gz
dh_make -r

Dh_make nos va a preguntar qué queremos construir, con una pantalla como ésta:

Type of package: single binary, multiple binary, library, kernel module or cdbs?
[s/m/l/k/b]

Y nosotros vamos a responder s

Una vez ésto, nos va a mostrar la información dle paquete, que siempre podemos cambiar en cualquier momento. En nuestro caso es ésta:

Maintainer name : Adonay Sanz Alsina
Email-Address   : adonay@kademar.org
Date            : Sun, 23 Sep 2007 16:16:13 +0200
Package Name    : kdemar-dvd
Version         : 1.1
License         : blank
Type of Package : Single
Hit <enter> to confirm:

Y vamos a apretar el intro o enter para continuar nuestra creación.

Finalmente el programa, nos va a retornar un mensage como éste:

Currently there is no top level Makefile. This may require additional tuning.
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the kdemar-dvd Makefiles install into $DESTDIR and not in / .

Dh_make, al lado de la carpeta src, habrá creado una carpeta llamada debian. Esa carpeta contiene información que se va a usar para crear el paquete DEB.

Ya podremos cerrar la consola, continuaremos por el entorno gráfico.

Una vez ésto, ya tenemos la estructura inicial creada.

A partir de ahora, la carpega kdemar-dvd-1.1 ya no hace falta que conserve este nombre. Se puede renombrar al nombre que queramos.

Tercer Paso: Creación de Makefile

Junto a la carpeta debian y src, vamos a crear un fichero llamado Makefile, con el siguiente contenido:

 .PHONY: all install 
 
 DESTDIR ?= /usr/local
 all:  
 
 	echo ""
 
 install:
 
 	cp -a src/* $(DESTDIR)/
 clean:
 	Delete older backups from sourcecode executables

cd $(DESTDIR) && rm -fr `find . -name ".svn"` && rm -fr `find . -name "*.pyc"` && rm -f `find . -name "*~"` 

Va a quedar la estructura así

 nous_paquets
   kdemar-dvd-1.1 
     debian src Makefile


Este fichero, se ejecuta justo antes de crear el paquete. Lo que podemos hacer con éste es por ejemplo, es hacer modificaciones, que no queramos tener en nuestra estructura de ficheros. Por ejemplo, la creación de un enlace. O podemos indicar que el Makefile, se descargue algo de internet que se modifique amenudo y así, siempre que creemos nuestro paquete DEB, estará actualizado. También puede ser la descarga de una base de datos de un antivirus, etc. La variable que se usa para indicar el destino donde se copiarán los ficheros es

$(DESTDIR)

Así si por ejemplo, lo queremos poner en la carpeta /usr/bin la nomenclatura deberá ser:

$(DESTDIR)/usr/bin

Lo que pongamos en el Makefile va a estar en el apartado install: y todo deberá ser indentado por un tabulador; escrito con el lenguage del sistema Bash. Hay infinidad de manuales de bash circulando por internet.

Tercer Paso: Control

Dentro de la carpeta debian se han creado bastantes ficheros, que debian usa para controlar sus paquetes. Todos los que tienen terminación .ex son ejemplos, que no se usan en el paquete que nosotros finalmente vamos a generar. El fichero control ahora tiene una apariencia como esta:

Source: kdemar-dvd
Section: unknown
Priority: extra
Maintainer: Adonay Sanz Alsina <adonay@kademar.org>
Build-Depends: debhelper (>= 5)
Standards-Version: 3.7.2

Package: kdemar-dvd
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: <insert up to 60 chars description>
 <insert long description, indented with spaces>

Vamos a configurar las distintas partes del fichero.

  • Section

La sección Section puede tener distintas posibilidades. main - Si se indica éste, el programa tiene una licencia libre, como la GPL o similares. contrib - Indica que el programa es libre, pero depende de librerías o programas que no son libres. non-free - Indica que el programa no es libre.

También, se puede especificar otras, como podría ser admin para aplicaciones de administración devel para aplicaciones de desarrollo net para aplicaciones de internet x11 para aplicaciones gráficas Y hay más subsecciones así, pero, todas estas subsecciones son de main. Si se especifica net, debe ser un programa de internet, pero gratuito; de otra manera deberá indicar contrib o non-free aunque sea de un programa de internet. Si no sabes qué poner, ya está bien dejarlo en main o unknown que indica desconocido.

  • Maintainer

Éste será tu nombre y tu email, como persona que ha creado el paquete deb.

  • Priority:

Ésta es la prioridad del paquete. Los paquetes que nosotros construiremos siempre serán extras. Nunca contruiremos de cero paquetes de prioridad alga o que sean críticos para el sistema, ya que para eso deberemos tener la calificación de DD (Debian Developer -> Desarrollador de Debian).

  • Build-Depends y Standards-Version:

Estos parámetros hacen referencia a los estándares de Debian que se están siguiendo, por tanto lo dejaremos todo tal cual está

  • Architecture:

Ésta es la arquitectura para la que está hecha el programa, normalmente i386, pero igualmente, se puede dejar tal como está y se va a rellenar automáticamente.

  • Depends:

Esta seccion contendrá los programas de los que depende el paquete que estás haciendo. Si estas dependencias no están satisfechas, el paquete no se podrá instalar. Si conoces alguna, la puedes incluir, pero deberán ser nombres de paquetes debian, separados por una coma. Igualmente puedes dejar ${shlibs:Depends}, ${misc:Depends} y el ya calculará las librerías de las que depende, automáticamente. Aunque añadas librerías, puedes dejar éstas dós y así la lista de dependéncias será más completa.

  • Suggests:

Esta seccion contiene nombres de paquetes que sugieres instalar, pero no van a añadir ninguna funcionalidad.

  • Recomends:

Ésta seccion contiene nombres de paquetes que se recomienda instalar, porque van a añadir funcionalidades a nuestro programa, que no vamos a tener de ninguna otra manera.

  • Description:

Ésta secccion va a contener una descripción corta del programa en <insert up to 60 chars description>. De máximo 60 carácteres. Y en <insert long description, indented with spaces> vamos a añadir una descripción extendida, sin límites de cantidad. Deberá ser escrito almenos indentado con un de espacios y si quieres que hayan linias vacías, van a tener que estar rellenada por un punto.

Nuestro paquete, al final el fichero control ha quedado así:

Source: kdemar-dvd
Section: main
Priority: extra
Maintainer: Adonay Sanz Alsina <adonay@kademar.org>
Build-Depends: debhelper (>= 5)
Standards-Version: 3.7.2

Package: kdemar-dvd
Architecture: any
Suggests: icewm, fluxbox
Depends: kdemar-base, kommander, dvd-slideshow, mencoder, mkisofs, xine-ui, dvdauthor, mjpegtools, netpbm, transcode, imagemagick, ${shlibs:Depends},  ${misc:Depends}
Description: Paquet de kademar Leo (DVD)
 Paquet especific de la distribució kademar Leo, la versió en DVD.
 .
 Conté els scrips d'engegada específics.
 El HTML d'engegada
 Multimedia de ejemplo
 .
 Y el gestor de dispositius USB, UsbTray.

Cuarta Parte: Copyright

Aunque sean programas libres, deben de tener un copyright, para asegurar su libertad. Dh_make ya deja un copyright por defecto hecho, que vamos a rellenar; en nuestro caso con nuestro nombre y la licencia GPL. Podemos traducirlo o dejarlo como queramos. Nuestro fichero finalmente ha quedado así.

This package was debianized by Adonay Sanz Alsina <adonay@kademar.org> on
Thu, 20 Sep 2007 21:16:07 +0200.

Upstream Author(s): 

   Adonay Sanz Alsina <adonay@kademar.org>

Copyright: 

    <Copyright (C) 2007 Adonay Sanz Alsina>

License:

    GNU/GPL2

    This package is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; version 2 dated June, 1991.

    This package is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details. 

    You should have received a copy of the GNU General Public License
    along with this package; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
    MA 02110-1301, USA. 

The Debian packaging is (C) 2007, Adonay Sanz Alsina <adonay@kademar.org> and
is licensed under the GPL, see `/usr/share/common-licenses/GPL'.

# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.


Quinta Parte: Changelog

El siguiente fichero que deberíamos poner al día, será el fichero donde están registrados todos los cambios que tu programa tiene, con respecto a la versión anterior. En todo programa existente, hay siempre un fichero con la lista de mejoras que esa versión tiene, en comparación con la anterior.

Siempre las versiones de los paquetes debian siguen una norma de version-revisión

  • Versión

Entendemos por versión, el número de versión del programa que estamos empaquetando. Éste número es dado por el creador del programa.

  • Revisión

Endendemos por revisión el número de veces que se hace un paquete. Por ejemplo, podemos hacer de una versión de un mismo programa, una empaquetada; luego en otra empaquetada, añadimos funcionalidad de cosas que hace el paquete (scripts de configuración), etc.

Así Debian diferencía bién, lo que es el programa en sí, o lo que hacen los empaquetadores. Así que nuestra versión será

1.1-1

Cada vez que volvamos a hacer un paquetek, con la misma versión del programa, pero que nosotros hayamos tocado cosas, incrementaremos el número de revisión


Y introducido el tema de númeración de Debian, vamos a introducir el Changelog. Éste fichero va a tener los cambios, tanto hechos por el programador original, como por nosotros.

Vamos a ir dentro de la carpeta kdemar-dvd-1.1 con una consola y desde allí vamos a ejecutar el comando:

dch -v versión-revisión

Así, nosotros vamos a hacer

dch -v 1.1-1

Una vez ésto, te da un editor de texto para cambiar el changelog, va a ser una pantalla así:

kdemar-leo (1.1-1) unstable; urgency=low

 *

 -- Adonay Sanz Alsina <clawlinux@debian>  Wed, 03 Oct 2007 17:28:55 +0200

Donde está el *, vamos a poner ahí los cambios línea por línea, indentados por dos espacios y empezando por un *

Nuestro fichero queda así

kdemar-leo (1.1-1) unstable; urgency=low

 * Plastik & New-age Mplayer Skin
 * Mandvd 2.3
 * New kdemar-inici.d-ng mode to create start

 -- Adonay Sanz Alsina <clawlinux@debian>  Wed, 03 Oct 2007 17:28:55 +0200


Vamos a salir y gravar. En el caso de que se haya abierto el nano es aprentando control-x y cuando nos pregunte si queremos gravar, decimos s.

Una vez ésto, ya estará todo preparado para construir el paquete.


Sexta Parte: Construir el paquete

Una vez estemos aquí con todo ya hecho, vamos a ir dentro de la carpeta kdemar-dvd-1.1 Y una vez allí, desde la consola escribimos.

debuild -r fakeroot

Para compilar el archivo hay que emplear la siguiente instrucción:

debuild -S -kGPGKEY

Y va a tardar un momento y va a construir nuestro paquete. Una vez ésto, en la carpeta anterior vamos a tener el paquete deb, que tendrá un nombre parecido en la estructura a éste:

kdemar-dvd_1.1_i386.deb

Ya sólo hará falta instalarlo, o haciéndole un clik, o con el comando dpkg -i paquete.deb, siempre como administrador.

!!!Y a disfrutar el paquete creado!!!

Extras: Ficheros del directorio debian

Dentro de éste directorio hay cuatro ficheros que también son usados, que son el postinst, postrm, preinst y prerm

El Post son los ficheros que después de instalar (postinst) o borrar (postrm) el paquete y se ejecutan para hacer cosas más específicas del ordenador. Puede hacer configuraciones específicas, o terminar de hacer enlaces, o configuraciones a los usuarios, etc. que puede variar dependiendo de las configuraciones.

Y el Pre que se ejecuta antes de instalar (preinst) o de borrar (prerm). Se puede ejecutar para borrar las configuraciones específicas hechas. O por ejemplo, obligar a aceptar una licencia determinada, siempre no libre.

Hay más ficheros dentro del directorio debian, que deberán ser consultados en los manuales de Debian, para tener más información. Aunque estos son los más usados y, si tu paquete ya hace todo lo que quieres que haga a la que se instala, no hace falta mirar más documentación.


Més informació

Font: docs.kademar.org/index.php/Como_construir_un_paquete_DEB

http://es.tldp.org/Presentaciones/200002hispalinux/conf-29/29-html/Como_hacer_paquete_Debian.htm [[1]]


http://www.debian.org/doc/maint-guide/index.html [[2]]