[ anterior ] [ Contenidos ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ siguiente ]
Normalmente, los programas se instalan a sí mismos en el subdirectorio
/usr/local. Pero los paquetes Debian no pueden utilizar este directorio ya que
está reservado para el uso privado del administrador (o de los usuarios). Esto
significa que tienes que mirar el sistema de construcción de tu programa,
generalmente empezando por el Makefile. Éste es el guión que
make(1)
usará para automatizar la creación de este programa. Para
más detalles sobre Makefiles, mira en El
fichero «rules», Sección 4.4.
Date cuenta que si tu programa usa GNU automake(1)
y/o
autoconf(1)
, lo que quiere decir que las fuentes incluyen ficheros
Makefile.am y Makefile.in, respectivamente, necesitarás modificar esos
ficheros, porque cada invocación de automake reescribirá los ficheros
Makefile.in con información generada a partir de los ficheros Makefile.am, y
cada llamada a ./configure hará lo mismo con los ficheros Makefile, con
información de los ficheros Makefile.in. Editar los ficheros Makefile.am
requiere algunos conocimientos de automake, sobre lo que puedes leer en la
entrada de info para automake, mientras que editar los ficheros Makefile.in es
casi lo mismo que editar ficheros Makefile, simplemente basta con poner
atención en las variables, es decir, cualquier cadena que empiece y acabe por
el caracter «@», como por ejemplo @CFLAGS@ o @LN_S@, que se rellenan con cada
vez que se ejecute ./configure.
Ten en cuenta que no hay espacio aquí para entrar en todos los detalles respecto a los arreglos. En cualquier caso, algunos de los problemas más frecuentes se detallan a continuación.
La mayor parte de los programas tienen alguna manera de instalarse en la estructura de directorios existente en tu sistema, para que los binarios sean incluidos en tu $PATH, y para que encuentre la documentación y páginas de manual en los lugares habituales. Sin embargo, si lo instalas de esta forma, el programa se instalará con los demás binarios que ya están en tu sistema. Esto dificultará a las herramientas de paquetes averiguar qué archivos pertenecen a tu paquete y cuales no.
Por lo tanto, necesitas hacer algo más: instalar el programa en un subdirectorio temporal desde el cual las herramientas de desarrollo construirán el paquete .deb que se pueda instalar. Todo lo que se incluye en este directorio será instalado en el sistema del usuario cuando instale su paquete, la única diferencia es que dpkg instalará los ficheros en el directorio raíz.
Este directorio temporal se creará bajo el directorio debian/ que está dentro
del árbol del código descomprimido, generalmente con el nombre
debian/packagename
.
Ten en cuenta que, aunque necesitas que el programa se instale en debian/packagename, también necesitas que se comporte correctamente cuando se instale en el directorio raíz, es decir, cuando se instale desde el paquete .deb. Así que no deberías permitir que al construirse se incluyan cadenas como /home/me/deb/gentoo-0.9.12/usr/share/gentoo dentro de los archivos del paquete a distribuir.
Esto será sencillo en el caso de programas que utilicen la herramienta GNU autoconf. La mayoría de estos programas tienen makefiles que por omisión que permiten configurar la instalación en un subdirectorio cualquiera, aunque recordando que, por ejemplo, /usr es el prefijo normal. Cuando detecte que tu programa usa autoconf, dh_make pondrá las opciones necesarias para hacer esto automáticamente, así que puedes dejar de leer esta sección. Puede ser necesario que examines y edites los Makefiles con otros programas
Esta es la parte importante del Makefile de gentoo:
# ¿Dónde poner el binario en «make install»? BIN = /usr/local/bin # ¿Dónde poner los iconos en «make install»? ICONS = /usr/local/share/gentoo/
Vemos que los ficheros está configurados para instalarse bajo
/usr/local
. Cambia estas rutas a:
# ¿Dónde poner el binario en «make install»? BIN = $(DESTDIR)/usr/bin # ¿Dónde poner los iconos en «make install»? ICONS = $(DESTDIR)/usr/share/gentoo
Pero ¿por qué en este directorio y no en otro? Porque los paquetes de Debian
nunca se instalan bajo /usr/local
, este árbol de directorios está
reservado para el uso del administrador del sistema. Asi que estos ficheros
deben instalarse bajo /usr.
La localización exacta de binarios, iconos, documentación, etc. está especificada en el Estándar de la Jerarquía del Sistema de Ficheros («Filesystem Hierarchy Standard», N. del T.) (Véase /usr/share/doc/debian-policy/fhs). Te recomiendo que leas las secciones que podrían concernir a tu paquete.
Así, deberíamos instalar el binario en /usr/bin en lugar de /usr/local/bin y la página de manual en /usr/share/man/man1 en lugar de /usr/local/man/man1. No hemos mencionado ninguna página de manual en el Makefile de gentoo, pero en Debian se requiere que cada programa debe tener una, así que haremos una más tarde y la instalaremos en /usr/share/man/man1.
Algunos programas no usan variables en el makefile para definir rutas como éstas. Esto significa que tendrás que editar algunos de los ficheros de código C para arreglarlos y que usen las rutas correctas. Pero, ¿dónde buscar?, y exactamente, ¿el qué? Puedes probar a encontrarlos usando:
grep -rn usr/local/lib *.[ch]
(en cada subdirectorio que contenga ficheros .c y .h). grep
nos
indicará el nombre del fichero y la línea cuando encuentre una ocurrencia.
Ahora simplemente edita esos ficheros y cambia en esas líneas usr/local/lib con usr/share. Sólo tienes que reemplazar usr/local/lib por tu localización, pero debes ser muy cuidadoso y no modificar el resto del código, especialmente si no sabes mucho sobre cómo programar en C. :-)
Después de esto deberías encontrar el objetivo «install» (busca una línea que comience por «install:») y renombra todas las referencias a directorios distintos de los definidos al comienzo del Makefile. Anteriormente el objetivo «install» decía:
install: gentoo install ./gentoo $(BIN) install icons $(ICONS) install gentoorc-example $(HOME)/.gentoorc
Después del cambio dice:
install: gentoo-target install -d $(BIN) $(ICONS) $(DESTDIR)/etc install ./gentoo $(BIN) install -m644 icons/* $(ICONS) install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
Seguramente has notado que ahora hay una orden install -d antes de las demás órdenes de la regla. El makefile original no lo tenía porque normalmente /usr/local/bin y otros directorios ya existen en el sistema donde se ejecuta `make install`. Sin embargo, tendremos que crear cada uno de estos directorios dado que lo instalaremos en un directorio vacío (o incluso inexistente).
También podemos añadir otras cosas al final de la regla, como la instalación de documentación adicionar que los desarrolladores originales a veces omiten:
install -d $(DESTDIR)/usr/share/doc/gentoo/html cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
Un lector atento se dará cuenta de que he cambiado «gentoo» a «gentoo-target» en la línea «install:». A eso se le llama arreglar un fallo en el programa. :-)
Siempre que hagas cambios que no estén específicamente relacionados con el paquete Debian, asegúrate de que los envías al desarrollador original para que éste los pueda incluir en la próxima revisión del programa y así le puedan ser útiles a alguien más. Además, recuerda hacer que tus cambios no sean específicos para Debian o Linux (¡ni siquiera para Unix!) antes de enviarlos, hazlo portable. Esto hará que tus arreglos sean más fáciles de aplicar.
Ten en cuenta que no tienes que enviar ninguno de los ficheros debian/* al desarrollador original.
Hay otro problema común: las bibliotecas generalmente son diferentes de plataforma a plataforma. Por ejemplo, un Makefile puede contener una referencia a una biblioteca que no exista en Debian o ni siquiera en Linux. En este caso, se necesita cambiarla a una que sí exista en Debian y sirva para el mismo propósito.
Así, si hay una línea en el Makefile (o Makefile.in) de tu programa que dice algo como lo siguiente (y tu programa no compila):
LIBS = -lcurses -lcosas -lmáscosas
Entonces cámbiala a lo siguiente, y funcionará casi con seguridad:
LIBS = -lncurses -lcosas -lmáscosas
[ anterior ] [ Contenidos ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ siguiente ]
Guía del nuevo desarrollador de Debian
versión 1.2, 6 de Abril 2001.joy-mg@debian.org
jfs@computer.org
david.martinez@rediris.es
anja_isbilia@yahoo.es