[ anterior ] [ Nota de Copyright ] [ Contenidos ] [ siguiente ]

Guía del Nuevo Desarrollador de Debian
Capítulo 3 Modificando las fuentes.


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 Makefile.in's con información generada a partir de los Makefile.am's, y cada llamada a ./configure hará lo mismo con los Makefile's, con información de los Makefile.in's. 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 Makefile.in's 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 `@'s, 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, pero aquí hay algunos de los problemas frecuentes a los que se enfrenta uno.


3.1 Instalación en un subdirectorio.

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. Tienes que asegurarte que esto se realice de forma correcta, pero tienes que hacer que se instale en un directorio temporal que se creará bajo tu directorio debian/, generalmente con el nombre debian/tmp, desde el que las herramientas de desarrollo construirán un 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.

Básicamente, debes hacer que el programa se instale en debian/tmp, pero se comporte correctamente cuando se instale en el directorio raíz, esto es, cuando se instale desde el paquete .deb. Con programas que utilicen la herramienta GNU autoconf, ésto será bien sencillo, porque dh_make pondrá las opciones necesarias para hacer esto automáticamente, así que podrías dejar de leer esta sección. Pero con otros programas, puede ser necesario que examines y edites los Makefiles.

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'? Nota: si cambias esto,
       # gentoo no encontrará los iconos cuando arranque. Deberás cambiar 
       # el path de iconos de gentoo (en la ventana de configuración:
       # "Paths") para que funcione.
       ICONS   = /usr/local/lib/gentoo/

Antes de esto deberías insertar dos nuevas líneas que digan:

       # Edited for Debian GNU/Linux.
       DESTDIR =

porque el proceso de construcción lo necesita (explicado más tarde, en El fichero `rules'., Sección 4.4).

Después el Makefile menciona la localización del binario final. Sólo necesita cambiar esto:

       # ¿Dónde poner el binario en 'make install'?
       BIN     = $(DESTDIR)/usr/X11R6/bin

¿Pero por qué en este directorio y no en otro? Porque Debian tiene unas reglas definidas de dónde deberían estar instalados los programas. Están especificadas en el Estándar de la Jerarquía del Sistema de Ficheros (Filesystem Hierarchy Standard, n. del t.) (/usr/share/doc/debian-policy/fhs). Así, deberíamos instalar el binario en /usr/X11R6/bin en lugar de /usr/local/bin, y la página de manual (no existe aquí, pero casi todos los programas tienen una, así que haremos una después) en /usr/share/man/man1 en lugar de /usr/local/man/man1.

Después de esto tendremos un situación un poco más complicada. Si dejas alguna línea como:

       ICONS   = $(DESTDIR)/usr/share/gentoo/

que se ajusta a la política de Debian, deberás editar algunos ficheros de fuentes reales de C. Pero, ¿dónde buscar? Puedes probar a encontrarlos usando:

       grep -n usr/local/lib *.[ch]

(en cada subdirectorio que contenga ficheros .c y .h). Grep dirá el nombre del fichero y la línea, cuando encuentra una ocurrencia. Ahora edita esos ficheros y cambia en esas líneas usr/local/lib con usr/share - y ya está. Simplemente reemplaza usr/local/lib por tu localización, y sé muy cuidadoso para no tocar el resto del código, 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:

       # ----------------------------------------- Installation
     
       # You're going to have to be root to do this!
       install:        gentoo
                       install ./gentoo $(BIN)
                       install icons $(ICONS)
                       install gentoorc-example $(HOME)/.gentoorc

Después del cambio dice:

       # ----------------------------------------- Installation
     
       # You're going to have to be root to do this!
       install:        gentoo-target
                       install -d $(BIN) $(ICONS) $(DESTDIR)/etc
                       install ./gentoo $(BIN)
                       install -m644 icons/* $(ICONS)
                       install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
                       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úrese de que los envías al desarrollador original para que éste los incluya en la próxima revisión del programa. Observa que no tienes que enviar ninguno de los ficheros debian/* al desarrollador original, pero deberías hacerlo con cualquier otro parche. Y sé amable haciendo que tus cambios no sean específicos a Debian o Linux (¡ni siquiera a Unix!) antes de enviarlos.


3.2 Librerías diferentes.

Hay un problema común: las librerías son generalmente diferentes de plataforma a plataforma. Por ejemplo, un Makefile puede contener una referencia a una librería que no exista en Debian o ni siquiera en Linux. En este caso, se necesita cambiarla a una librería que sí exista en Debian y sirva para el mismo propósito. La mejor forma es comentar esas líneas porque puede haber otras personas que intenten compilar en diferentes plataformas, y éstas les pueden dar algunas pistas de dónde puede estar el problema.

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
       #LIBS = -lcurses -lcosas -lmáscosas


[ anterior ] [ Nota de Copyright ] [ Contenidos ] [ siguiente ]
Guía del Nuevo Desarrollador de Debian
versión 1.0 (translation 1.0), 25 de enero de 2000
Josip Rodin jrodin@jagor.srce.hr
Traducido por: Javier Fernández-Sanguino Peña jfs@computer.org