[ 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 usuario). Esto significa que tiene que mirar el sistema de construcción de su programa, generalmente empezando por el Makefile. Éste es el guión make(1) que usará para automatizar la creación de éste programa. Para más detalles sobre Makefiles, mire en el fichero `rules'., Sección 4.4.

Tenga 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 su sistema, para que los binarios se incluyan en su $PATH, y para que encuentre la documentación y páginas de manual en los lugares habituales. Tiene que asegurarse que ésto lo hace de forma correctamente, pero tiene que hacer que se instale en un directorio temporal que se creará bajo su 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, debe 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 utilizan la herramienta GNU autoconf, ésto será bien sencillo, porque dh_make pondrá las opciones necesarias para hacer esto automáticamente, así que podría dejar de leer esta sección. Pero con otros programas, puede ser necesario que usted examine y edite los Makefiles.

Ésta 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 cambia esto,
       # gentoo no encontrará los iconos cuando arranque. Deberá 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ía insertar dos nuevas líneas que dicen:

       # Editado para 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 especificas en el Linux Filesystem Structure Standard (/usr/share/doc/debian-policy/fhs) [Estándar de Linux de la Estructura de los Sistemas de Ficheros, n. del t.]. 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 tenemos un situación un poco más complicada. Si cambia la línea a:

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

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

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

(en cada subdirectorio que contiene ficheros .c y .h). Grep dirá el nombre del fichero y la línea, cuando encuentra una ocurrencia. Ahora edite esos ficheros y cambie en esas líneas usr/local/lib con usr/share - y ya está. Simplemente reemplace usr/local/lib por su localización, y sea muy cuidadoso para no mezclar el resto del código, si no sabe mucho sobre cómo programas en C. :-)

Después de esto debería encontrar el objetivo 'install' (busque una línea que comience por 'install:') y renombre todas las referencias a directorios distintos de los definidos al comienzo del Makefile. Anteriormente el objetivo 'install' decía:

       # ----------------------------------------- Installation
     
       # ¡Debe ser superusuario para hacer esto!
       install:        gentoo-target
                       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/doc/gentoo/html
                       cp -a docs/* $(DESTDIR)/usr/doc/gentoo/html

Un lector atento se dará cuenta de que he cambiado 'gentoo' a 'gentoo-target' en la línea 'install:'. Esto es para arreglar un fallo en el programa. :-)

Siempre que haga cambios que no estén específicamente relacionados con el paquete Debian, asegúrese de que los envía al desarrollador original para que éste los incluya en la próxima revisión del programa. Observe que no tiene que enviar ninguno de los fichero s debian/* al desarrollador original, pero debería hacerlo con cualquier otro parche. Y sea amable haciendo sus cambios no 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í existe en Debian y sirve para el mismo propósito. La mejor forma es comentar esas líneas porque puede que 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 de su programa que dice algo como lo siguiente (y su programa no compila):

       LIBS = -lcurses -lsomething -lsomethingelse

Entonces cambiela a lo siguiente, y funcionará casi con seguridad:

       LIBS = -lncurses -lsomething -lsomethingelse
       #LIBS = -lcurses -lsomething -lsomethingelse


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