viernes, 11 de febrero de 2011

Compilando en entornos hostiles: Dia

No, no penseis nada raro, con "compilar en entornos hostiles" me refiero a hacerlo donde no tenemos a mano las librerías necesarias para compilar un programa en concreto, ni permisos para instalarlas, la idea es mostrar como se puede hacer para quien necesite usar algún programa cuando solo dispone de una cuenta con acceso mínimo.

Pero volvamos al principio, Dia es un software para hacer diagramas desarrollado por el proyecto Gnome, supongamos que quremos usarlo en una máquina, una opción sería descargar el paquete ya compilado y ejecutarlo, pero... sorpresa! , utiliza una librería que no esta instalada ( libxml2 en este caso) .

Entonces habrá que seleccionar un lugar donde se instalarán las  librerías y el programa ( no tiene que ser el mismo, pero por comodidad aquí sí lo será ), digamos que le llamamos myroot, entonces nos colocaremos en ese directorio, abrimos un terminal y haremos:

export myroot=`pwd`


Ahora descargamos el código fuente de libxml2 ( necesario para nuestro programa, recordemos ) y lo descomprimimos:

wget ftp://xmlsoft.org/libxml2/libxml2-2.7.2.tar.gz
tar -xf libxml2-2.7.2.tar.gz


Después podemos borrar el archivo .tar.gz.

Ahora entramos en el directorio de libxml y le decimos donde se va a realizar la instalación

cd libxml2-2.7.2/
./configure --prefix=$myroot



Si todo sale bien, al final nos dirá "Done configuring", ahora hay que pasar a compilarlo, esto se hará con

make


Si no hubo ningún problema, lo "instalamos" en el directorio que especificamos antes con

make install

Nota: para quien ya instaló antes algo desde el código fuente, en este caso no son necesarios permisos de root

Ahora volvemos al directorio que nos sirve de raiz y comprobamos que todo fue bien:

cd $myroot
bin/xml2-config



Vamos a definir dos variables de entorno más, una que indicará donde se encuentran las librerías y otra que nos permitirá acceder a los ejecutables que instalemos como si fueran propios del sistema:

export LD_RUN_PATH=$myroot/lib/
export PATH=$PATH:$myroot/bin/



Ahora necesitamos instalar Dia, descargamos el código fuente y lo descomprimimos ( aquí he tenido que instalar la versión 0.96 que no es la última porque sinó la intltool instalada era demasiado antigua ) :

wget http://ftp.gnome.org/pub/gnome/sources/dia/0.96/dia-0.96.1.tar.bz2
tar -xf dia-0.96.1.tar.bz2



De nuevo, una vez descomprimido podemos borrar el archivo .tar.bz2
Repetimos entonces el proceso en la carpeta de Dia:

cd dia-0.96.1/
./configure --prefix=$myroot



Y paf! nos damos de morros con que no encuentra la libxml2 ( porque no está instalada formalmente )

Pero sabemos que está instalada ( al menos dentro de nuestro entorno, fuera no ), así que desactivamos esa comprobación en el archivo configure, buscamos
"found_libxml=false" y cambiamos el false por un true, y después buscamos los "GTK_MODULES=" y eliminamos el libxml-2.0 .

Volvemos a intentar el configure y esta vez debería ir bien, poniendo algo como "Now type make to build dia..." al final.

Le hacemos caso y ejecutamos make:

make


Pero volvemos a chocar con otro error, si hacemos scroll hacia arriba veremos que:

In file included from object.h:33,
                 from dynamic_obj.h:26,
                 from diagramdata.c:33:
dia_xml.h:26:25: error: libxml/tree.h: No such file or directory
In file included from object.h:33,
                 from dynamic_obj.h:26,
                 from diagramdata.c:33:


Le falta los headers de libxml, no problem, los copiamos y ya está, desde el directorio de Dia:

cp -R ../libxml2-2.7.2/include/libxml lib/



Y volvemos a hacer make, la cosa avanza sin problemas, hasta que cerca del final detiene el proceso un montón de "undefined reference", el archivo está en la carpeta app, y por el nombre de las funciones (  "xmlFree", "xmlGetProp" ) parece que tiene que ver con el linkado a libxml.

Así que abrimos el Makefile del directorio app, buscamos "XML_CFLAGS = " y añadimos lo que nos muestra el comando xml2-config --cflags , después buscamos "XML_LIBS = " y añadimos la salida de xml2-config --libs.

Nota: el comando xml2-config se instaló con libxml, si no nos acordamos de añadir $myroot/bin al PATH habría que llamar directamente al ejecutable con $myroot/bin/xml2-config.

Seguimos con el make desde la carpeta de Dia, que esta vez debería por fin acabar sin mayores problemas.

Solo queda instalarlo en nuestro entorno:

make install

Y ya podemos utilizar Dia con el comando dia ( repito, si no se modificó la variable de entorno $PATH habría que incluir la ruta completa al ejecutable ).


ps: en las pruebas Dia mostraba un pequeño error al iniciar, decía que "Could not find plugin init function in `< $myroot >/lib/dia/libxslt_filter.la'", pero parece que no tiene consecuencias perceptibles.

Hasta otra.

2 comentarios:

  1. Que desilusión... yo que ya tenía preparadas las armas para compilar... ¬¬

    Como siempre luciendote, buen tuto kenkeiras! xD

    saludos B-)

    ResponderEliminar