Debianizar Paquetes Precompilados Con CDBS

por | 30 junio, 2010

Hola, CDBS es la nueva herramienta para debianizar (empaquetar) programas. Desde que la conozco me ha simplificado la vida bastante para debianizar paquetes. Una de las cosas que más me ha costado averiguar es cómo empaquetar programas precompilados o empaquetar temas de iconos, gtk-themes o wallpapers, ya que estos no hay que compilarlos para empaquetarlos. Se hacerlo sin CDBS pero el archivo rules tienes cada vez que crearlo entero o hacer copy-paste de otros ya hechos. Con CDBS, generalmente, no hay que hacer nada o casi nada extra con el archivo rules porque ya te lo hace. No os preocupéis mucho si no me entendéis mucho de lo que digo, en un momento os enteraréis de la peli

Voy a escribir varios artículos sobre debianizar con CDBS, el próximo lo dedicaré a empaquetar temas de iconos, gtk-themes, etc… incluyendo la multipaquetería, así que preparaos para el truño que voy a meter En realidad lo que persigo es que la gente tenga una ayuda actualizada de cómo debianizar. Al que le interese claro

Bueno empecemos con el jaleo ya. Lo primero es instalar todos los paquetes necesarios para poder debianizar con CDBS.

sudo su –

apt-get install build-essential dpkg-dev file libc6-dev patch perl autoconf automake dh-make debhelper devscripts devscripts-el fakeroot gnupg g77 gpc xutils lintian cdbs pbuilder debian-policy developers-reference manpages-es manpages-es-extra debian-reference-es

exit

Bueno con eso vais más que servidos , si falta alguno no problem, al debianizar se os indicará qué necesitáis instalar.

Bien, para este artículo voy a elegir la versión portable de Geogebra como ejemplo, al ser portable ya viene precompilado. Así que al debianizarlo sólo hay que indicar dónde meter su contenido en nuestro linux debianita.  Se puede descargar de AQUÍ.

Una vez descargado como es un tar descomprimidlo Al descomprimirlo se nos ha creado una carpeta que desgraciadamente no tiene en su nombre el número de la versión, pero esto se arregla fácil, cambiamos el nombre y lo dejamos así:

geogebra-3.2.42.0

Como igual cuando consultes este artículo la versión ya haya cambiado modifícala

Una cosa importante es que el nombre del programa de la carpeta siempre debe ir en minúsculas y se antepone un guión al número de la versión; independientemente del paquete a debianizar y su estructura ok ?

Vale abrimos terminal y nos creamos un directorio en donde debianizaremos todos nuestros paquetes y uno adrede para el de Geogebra, lo haremos desde nuestro home.

mkdir -p Debianizo/GEOGEBRA

Dentro del directorio de GEOGEBRA copiad el de geogebra-3.2.42.0 (el que hemos descomprimido), lo podéis hacer con el ratón, acedemos a dicho directorio:

cd Debianizo/GEOGEBRA/geogebra-3.2.42.0

Aclaro, es buena paractica crearte un directorio donde debianizar tus paquetes y un subdirectorio dedicado a cada programa a debianizar, ya que cuando obtengamos el paquete .deb se nos crearán muchos ficheros, y de esa forma los tendremos todos ordenaditos.

Hago un inciso, antes de seguir dentro de la carpeta geogebra-3.2.42.0 borrad la carpeta jre porque no la necesitamos absolutamente para nada en nuestro paquete a debianizar. Esto sólo es para éste caso.

También vamos a modificar el fichero geogebra.sh para que funcione con el java de Sun de nuestro sistema operativo, es suficiente con que quede así:

#!/bin/sh

/usr/lib/jvm/java-6-sun/jre/bin/java -jar /usr/share/geogebra/geogebra.jar “$@”

Bien, ahora se trata de crear el directorio debian con todos los ficheros necesarios para poder debianizar, lo haremos con el script dh-make y que viene incluido con el paquete devscripts. En realidad podríamos hacerlo a mano, pero así es más rápido. Así que desde el directorio geogebra-3.2.42.0 en la terminal escribid:

dh_make -e <nuestrocorreo> -r -s -b

Poned vuestro correo con los circunflejos inclusive. Con la opción -r nos creará un fichero fuente, con la opción -s le indicamos que sólo vamos a crear un paquete, y con la opción -b le indicamos que queremos debianizar con CDBS, así que no olvidéis ésta última opción.

Al hacer éste comando se os habrá creado un directorio llamado debian y dentro del mismo multitud de ficheros, vamos a quitar unos cuantos de un plumazo porque para nuestro ejemplo nos sobran, en artículos posteriores os iré explicando cosas de ellos.

cd debian

rm -f *.ex *.EX README.* docs

Os deben de haber quedado los siguientes ficheros:

changelog compat control copyright rules

El fichero compat no se toca . El fichero changelog es donde vamos poniendo nuestros sucesivos empaquetamientos del programa (cuando actualizamos de versión, incluimos parches, etc), y el fichero coyright es donde metemos la licencia del programa y del empaquetador. No os preocupéis os dejo un enlace de descarga de mi directorio debian de Geogebra para que os sirva de guía. Es que si lo pongo aquí esto se hace muy largo, y esto es más fácil viéndolo, no es nada complicado.

El fichero control nos aparecerá así (lo podéis editar con gedit)

Source: geogebra

Section: unknown

Priority: extra

Maintainer: Cristobal Lopez <lopeztobal@gmail.com>

Build-Depends: cdbs, debhelper (>= 7)

Standards-Version: 3.8.3

Homepage: <insert the upstream URL, if relevant>

Package: geogebra

Architecture: any

Depends: ${shlibs:Depends}, ${misc:Depends}

Description: <insert up to 60 chars description>

<insert long description, indented with spaces>

Cosas a tener en cuenta, en la sección Build-Depends especificamos las dependencias para poder compila y empaquetar el programa, como en nuestro caso ya viene compilado sólo debemos poner las de empaquetado. En nuestro caso con las que viene es suficiente.

La sección Depends es donde especificamos las dependencias del programa para que funcione cuando se ejecute o el usuario lo instale, ¡muy importante saber diferenciar esto! Aquí nos pone dos scripts que nos harán la faena por nosotros, ${shlibs:Depends}, ${misc:Depends} pero en éste caso no nos sirven de mucho, así que los borraremos y pondremos la dependencia a mano, que será  sun-java6-jre.

En la sección Architecture pondremos para qué arquitectura se debe debianizar, para Geogebra como es portable cambiamos any por all. Así pues el fichero control nos queda así:

Source: geogebra

Section: math

Priority: optional

Maintainer: Cristobal Lopez <lopeztobal@gmail.com>

Build-Depends: debhelper (>= 7), cdbs

Standards-Version: 3.8.4

Homepage: http://www.geogebra.org

Package: geogebra

Architecture: all

Depends: sun-java6-jre

Description: Dynamic mathematics for schools

GeoGebra is a free and multi-platform dynamic

mathematics software for schools that joins

geometry, algebra and calculus. It received se-

veral international awards including the European

and German educational software awards.

Perfecto, vamos a ver qué nos cuenta el archivo rules, al abrirlo nos aparece así:

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk

include /usr/share/cdbs/1/class/makefile.mk

# Add here any variable or target overrides you need.

Como no se va a compilar nada nos sobra la línea que hace referencia a makefile.mk, así que la borramos y nos queda así:

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk

Y ya no necesitamos poner nada más, así de sencillo es. Y eso es así porque CDBS en realidad es un conjunto de “macros” que se encargan de hacer gran parte del trabajo que se hacía antes con rules por nosotros, y para que funcione tan sólo hay que llamar la macro que necesitamos con la orden include, en nuestro caso como no vamos a compilar sólo necesitamos que se ejecute la debhelper.mk.

Desgraciadamente muchos de estos programas precompilados no llevan lo necesario para que tengan un lanzador en nuestro escritorio y deberemos crearlos nosotros mismos, se crean como ficheros de extensión .desktop, así que creamos uno que se llame en nuestro caso geogebra.desktop y lo guardamos en el directorio debian. Aquí os pongo el mio:

[Desktop Entry]

Version=1.0

Type=Application

Name=GeoGebra

GenericName=GeoGebra – Dynamic mathematics

Comment=Dynamic mathematics for shools

GenericName[de]=GeoGebra – Dynamisches Mathematikprogramm

Comment[de]=Dynamische Mathematik für Schulen

Name[de]=GeoGebra

GenericName[es_ES]=GeoGebra – Matemáticas Dinámicas

Comment[es_ES]=Matemáticas Dinámicas En La Enseñanza

Name[es_ES]=GeoGebra

Icon=geogebra.png

Exec=geogebra.sh

Categories=Education;Math;

StartupNotify=false

Terminal=false

En éste artículo hecho por mi tenéis cómo crear estos ficheros.

Nos queda crear dos ficheros que son para especificar dónde instalar el contenido del programa. Tienen siempre las extensiones .dirs y .install. En el .dirs especificamos los directorios base en dónde se instala el programa y en el .install dónde se instala el programa en sí. Es muy fácil. Creamos los ficheros geogebra.dirs y geogebra.install. En geogebra.dirs tendremos estas líneas:

usr/share/pixmaps

usr/share/applications

usr/bin

usr/share/geogebra

En el /usr/bin irá el ejecutable del programa, en el /pixmaps el icono del lanzador, en /applications el lanzador geogebra.desktop y en usr/share/geogebra todo el programa.

En el fichero geogebra.install tengo esto:

debian/geogebra.png usr/share/pixmaps

debian/geogebra.desktop usr/share/applications

geogebra.sh usr/bin

unsigned/* usr/share/geogebra/unsigned

geogebra.jar usr/share/geogebra

geogebra_cas.jar usr/share/geogebra

geogebra_export.jar usr/share/geogebra

geogebra_gui.jar usr/share/geogebra

geogebra_main.jar usr/share/geogebra

geogebra_properties.jar usr/share/geogebra

icon.png usr/share/geogebra

Que como veis no hay mucho que explicar, es decir dónde van cada uno de los directorios y ficheros del programa.

Estos ficheros .install y .dirs son muy importantes para debianizar un programa en varios paquetes, ya volveremos a ello. Su nombre debe coincidir siempre con el nombre que hemos puesto en el fichero control !!!!!

Y bien, si queremos rematar la faena de forma elegante vamos a crear un fichero .menu de nuestro programa para conservar las reglas Debian en cuanto a lanzadores. Creamos un fichero llamado geogebra.menu con el siguiente contenido:

?package(geogebra):needs=”X11″ section=”Applications/Education”\

title=”geogebra” command=”/usr/bin/geogebra.sh”

Como se puede apreciar es muy fácil de hacer.

Una última cosa ha hacer específica para éste paquete, copiad el fichero icon.png sito en el directorio geogebra-3.2.42.0 en el directorio debian y cambiadle el nombre por el de geogebra.png. Esto lo hago para añadir el icono en el directorio del sistema /usr/share/pixmaps, debería de ser un icono en formato .xpm, pero no pasa nada si es .png. Es una buena práctica hacer esto en nuestros paquetes, siempre y cuando no tengan el icono.

Pues nada tan sólo nos queda debianizarlo, desde el directorio debian ejecutamos debuild así:

debuild -i -us -uc -b

O si van firmados para un repositorio oficial mejor así:

debuild -b -sa -tuclavedelrepositorio

Si todo ha salido bien ya tenéis vuestro paquete deb, sólo resta instalarlo

Os saldrán dos warnings (avisos) de lintian, uno se refiere a que el fichero ejecutable sito en /usr/bin llamado geogebra.sh no tiene página del manual man, no os preocupéis por ello ya que geogebra no tiene man. El otro lo obviamos que no pasa nada

Os dejo un enlace de descarga del debian de Geogebra mio para que os sirva de guia

Uuuuufffff!!!!! cuesta más explicarlo que hacerlooo!!! Espero que le sirva a mucha gente, aunque no me lee casi nadie

Saludos

4 pensamientos en “Debianizar Paquetes Precompilados Con CDBS

  1. Pingback: Bitacoras.com

  2. shakaran

    El Encoding=UTF-8 del desktop entry deberías eliminarlo ya que según la especificación de freedestop esta puesto por default y si pasas lintian te da warning (además de ser uno de los motivos estúpidos por los que no te dejarían entrar un paquete en debian o ubuntu, son así de tiquismiquis).

    También te recomiendo pasar lintian en modo pedantic y descubrirás muchas más cosas a corregir.

    Saludos

  3. Tobal Autor

    Buieno lo tendré en cuenta, pero este paquete me deja subirlo a Launchpad y funciona perfectamente, el tuyo de tivion en rpm en Launchpad no funciona
    Mientras no me den un sueldo no pienso subir paquetes a Ubuntu, Debian, Mandriva, etc…, así que las pijadas no me molestan
    Pasando el pedantic sólo recibo un warning pedántico (mosca cojonera) sobre el changelog, todo lo demás está perfecto.
    Si el paquete no hubiese estado bien construido (respetando copyrights inclusive) nunca hubiese echo el artículo

  4. OsoSentado

    Muy interesante tu articulo. Con mucha frecuencia encuentro paquetes que no estan en formato deb y entonces inician mis oraciones a San Google Patrono de los Informaticos.

    Recibe un cordial saludo.

    PD. Yo te leo practicamente todos los dias. Buen blog.

Los comentarios están cerrados.