deb-src-howto
Aquí va otro howto. Antes de nada aclararé que lo pongo aquí simplemente
como preview, por si alguien quiere realizar alguna aclaración, y porque no
ocupa mucho (por supuesto no me atrevería a enviar un texto de 70 Kb ni
nada parecido).
Si creeis que es interesante, no os preocupeis que ya lo enviaré a insflug o
donde sea necesario.
El siguiente documento va sobre como crear paquetes deb a partir de las
fuentes de debian. Sé que se ha hablado recientemente de este tema en
es.comp.os.linux.misc, simplemente hago una recopilación y quizás doy unos
detalles más.
Como compilar fuentes preparadas para Debian
Ricardo Villalba, rvm @ linuxfan.com
3 de agosto de 1999
En este documento va sobre cómo crear paquetes deb a partir de las
fuentes de los ftps de debian.
______________________________________________________________________
Índice general
1. Introducción
2. Dependencias
3. Un consejillo antes de empezar
4. Bajando las fuentes
5. Descomprimir las fuentes
6. Compilando
7. Posibles problemas
7.1 Un ejemplo
7.2 Más allá
8. Coming up next
______________________________________________________________________
1. Introducción
Muchos de nosotros nos habremos dado cuenta que la mayoría de los
paquetes de la debian potato dependen de la nueva librería glib2.1.
Si no queremos actualizar todavía a dicha librería no nos quedará más
remedio que compilar aquellos paquetes de potato que queramos usar en
Slink (o Hamm).
Afortunadamente la creación de paquetes deb a partir de las fuentes no
es una tarea muy complicada.
Antes de continuar debo decir que mi única experiencia en este tema ha
sido con los paquetes apt y leafnode. Puede que otros paquetes den más
problemas.
2. Dependencias
En los ftps de debian hay una serie de ficheros Packages.gz, en cada
directorio main, contrib, non-free, etc. hay uno. Estos paquetes creo
que los utiliza el instalador apt para conocer las dependencias, pero
ya que son simples ficheros de texto los podemos bajar ya sea
simplemente para consultar qué paquetes nuevos hay, o si pensamos
actualizar un programa saber qué dependencias tiene, y cuantos
paquetes tendremos qué descargar o si por otra parte nos compensa más
bajarnos el código fuente.
3. Un consejillo antes de empezar
Parece ser que para compilar algunos paquetes es necesario tener
instalado el debhelper >= 2.0. En el momento de escribir esto en
potato está la versión 2.0.20 y se puede instalar directamente en la
Slink sin necesidad de compilarlo (tampoco depende de ningún otro
paquete de potato), así que aconsejo que te lo bajes y lo instales.
4. Bajando las fuentes
Las fuentes de los paquetes para debian suelen ocupar 3 ficheros:
paquete.orig.tar.gz
Es el paquete original sin haber sufrido ninguna modificación
por parte de los mantenedores de debian.
paquete.diff.gz
Contiene las modificaciones realizadas por los mantenedores de
debian.
paquete.dsc
Parece que es un fichero de control que además está firmado con
PGP.
Así si queremos compilar el leafnode nos bajaremos estos tres
ficheros:
· leafnode_1.9.4.orig.tar.gz
· leafnode_1.9.4-4.diff.gz
· leafnode_1.9.4-4.dsc
Nota: algunos paquetes expresamente creados para la debian no tienen
el fichero *.diff.gz, así por ejemplo el paquete apt lo forman los
ficheros apt_0.3.11.tar.gz y apt_0.3.11.dsc.
5. Descomprimir las fuentes
Para descomprimir las fuentes teclearemos la orden dpkg-source -x
paquete.dsc, por ejemplo:
dpkg-source -x leafnode_1.9.4-4.dsc
En este ejemplo las fuentes se habrán extraidos en el directorio
leafnode-1.9.4.
6. Compilando
Algunas etapas de la creación del paquete requieren que se realicen
como root. Si no quieres hacerlo como root te recomiendo que instales
el paquete fakeroot (no es necesario configurar nada).
Para compilar el paquete lo primero que hemos de hacer es situarnos en
el directorio donde se han descomprimido las fuentes.
Que yo sepa hay tres comandos que permiten compilar y crear el paquete
deb listo para instalar (tendrás que elegir uno, yo recomiendo el
primero):
debian/rules binary
Al ejecutar este comando se compilarán las fuentes y acto
seguido se generará el paquete deb en el directorio padre. Si
no quieres hacerlo como root, puedes invocarlo así:
fakeroot debian/rules binary
build
(Nota: este comando no lo he probado.) Según el manual si se
invoca sin parámetros equivale a dpkg-buildpackage. Si se le
añade el parámetro binary entonces sería equivalente a
debian/rules binary. Para poder ejecutarlo sin necesidad de ser
root podrías hacerlo así (repito que no lo he probado):
fakeroot build binary
dpkg-buildpackage
Resumiendo, al ejecutar este comando se realizan estos cuatro
pasos:
· make clean. Borra cualquier resto de una posible compilación
anterior (ficheros *.o, ejecutables, etc).
· Empaqueta las fuentes. En el directorio padre se crean los
ficheros *.orig.tar.gz, *.diff.gz y *.dsc
· Realiza la compilación en sí.
· Empaqueta los binarios en un fichero *.deb.
Este comando está bien para cuando estamos realizando una
modificando a un paquete o el programa en cuestión es nuestro,
pero no creo que sea la mejor opción para el caso que nos
interesa. De todos modos comentaré que una posible invocación de
este comando podría ser así:
dpkg-buildpackage -rfakeroot -us -uc
La opción -rfakeroot es para poder empaquetarlo como usuario
normal, y las opciones -us -uc son para no tener que firmarlo.
7. Posibles problemas
Por supuesto, durante la compilación pueden surgir problemas. La mayor
parte de estos problemas son porque no tenemos instalado algún paquete
necesario.
¿Y cómo podemos saber qué paquete(s) tenemos que instalar? Es
importante conocer la lista de dependencias antes de empezar a
compilar, ya que nos puede ser de mucha ayuda para saber los paquetes
que hemos de instalar.
Por ejemplo, si un programa depende de la librería xpm4g, pues
lógicamente tendremos que instalar el paquete xpm4g pero también el
xpm4g-dev.
Por norma general, se puede decir que si un programa depende de la
librería x para poder compilarlo deberemos instalar también el x-dev.
Para conocer las dependencias podemos echar mano del fichero
Packages.gz que he comentado previamente.
7.1. Un ejemplo
Como ejemplo, diré como hice para compilar el paquete leafnode_1.9.4.
Este paquete depende de dos paquetes que ni siquiera existen en Slink:
logrotate y libpcre2.
Por tanto habrá que compilarlos e instalarlos primero, aunque se da la
circunstancia de que logrotate depende de otro paquete que tampoco
está en Slink, el libpopt0, por tanto este es el que habrá que
compilar en primer lugar.
Si miramos la descripción de libopt0 en el Packages.gz veremos que las
fuentes de esta paquete están en un paquete llamado popt. De igual
modo las fuentes de libpcre2 están en pcre2.
Una vez compilado el paquete popt obtendremos los paquetes
libpopt0_1.3-4_i386.deb y libpopt-dev_1.3-4_i386.deb que instalaremos.
Ahora ya podemos compilar los paquetes logrotate y pcre2, e instalar
todos los paquetes que se generen, después de lo cual por fin podremos
compilar el leafnode.
7.2. Más allá
Como te habrás dado cuenta, averiguar la lista de los paquetes que
hemos de bajar, el orden en el que hemos de compilarlos, etc. si bien
no es muy complicado sí que nos puede quitar bastante tiempo.
Pues bien, según explicaba Benjamín Albiñana Pérez (que parece que de
esto sabe mucho, a ver si conseguimos que nos cuente todo lo que sabe)
en un reciente mensaje en es.comp.os.linux.misc nos decía que
simplemente tecleando la orden apt-get source paquete --compile el apt
nos bajaría todos los paquetes necesarios y los compilaría. Todavía
no lo he probado, pero estoy deseando hacerlo.
Eso sí, el apt que se incluye en Slink no vale, hay que bajarse el apt
de potato y compilarlo, o más fácil bajarte de mi web la versión
0.3.11 que compilé para Slink: http://members.xoom.com/rvmsoft/linux/.
8. Coming up next
Lo mismo pero para paquetes rpm.
(No os preocupeis que éste no lo enviaré a la lista)
Ricardo Villalba
rvm@linuxfan.com
ricardovm@arrakis.es
http://members.xoom.com/rvmsoft
http://rvmsoft.findhere.com
Reply to: