Aventurarse a compilar codigo fuente de linux puede ser la tarea mas frustrante del mundo para una persona que cree tener conocimiento avanzado en computación e informática, muy en especial si uno intenta hacerlo por su cuenta. (consejo 1: Buscar ayuda de alguien que sepa como hacerlo) La documentación en internet da los pasos base y los explica bien pero hay cosas que no están explicadas que se tienen que conocer.
La instalación de un código fuente sigue una secuencia estándar, sin embargo, debido a que existen muchas variaciones y muchas directivas posibles es importante leer la documentación (consejo 2: Leer a conciencia la documentación sobre compilar e instalar el programa)
Antes de describir la secuencia que se sigue en una instalación básica primero me gustaría hablar un poco sobre el concepto de “árbol de dependencias”.
Linux está basado en programas relativamente pequeños que hacen un solo trabajo pero lo hacen bien (al menos esa es la premisa). Debido a eso los nuevos programas no tienen que reinventar la rueda sino utilizar un programa ya existente (y estándar para todos) como librería para hacer parte del trabajo.
Cuando un paquete A depende de un paquete B se dice que B es una dependencia de A. Ahora imaginemos que A dependa de los paquetes B y C, pero que a su vez B depende de los paquetes D y E; y C dependa de F, G, H e I. Rápidamente vemos como los paquetes necesarios para que nuestro software funcione crecen y crecen exponencialmente hasta llegar a los paquetes ya instalados en el sistema.
Personalmente no me parece coherente compilar varios códigos fuente para poder compilar el código fuente que queremos. Es verdad que algunas veces es la única opción, pero pienso que es algo que debe evitarse cuando es posible.
De hecho la mejor manera de evitarlo es instalando las dependencias de los repositorios de la distribución particular que se use. (Consejo 3: Averiguar cuales son las dependencias e instalarlas de los repositorios de la distribución de linux). Esto es muy beneficioso porque si volvemos al ejemplo, si instalamos las dependencias B y C con programas como yum o aptitude, estos programas se encargarán de instalar todas las dependencias en cadena. Aún cuando los paquetes no se encuentren en los repositorios mi recomendación es Consejo 4: buscar las dependencias que no estén en los repositorios de la distribución en repositorios externos o en paquetes ya compilados como .deb o .rpm
Por último dentro del tema de las dependencias, el consejo mas importante de todo este tutorial. Cuando se instalen dependencias muchas veces es importante buscar no solo el ejecutable sino el paquete de cabeceras o paquete de desarrollador, estos paquetes terminan con el postfijo ‘-dev’ o ‘-devel’ Ejm: php-devel. Consejo 5: Instalar siempre que exista el paquete ‘-dev’ o ‘-devel’ de las dependencias del código que se desea compilar
La instalación básica de un paquete en código fuente es la siguiente:
1. Descargar el paquete
wget http://algunsitio.com/paquete.tar.gz
(consejo 6: Descargar la versión estable del paquete. Las versiones inestables son llamadas así porque pueden tener errores y no estar soportadas por algunos sistemas)
2. Desempaquetar el paquete
tar xvfz paquete.tar.gz
3. Configurar el paquete:
./configure
Al configurar muchas veces los programas piden directivas especificas como indicar la posición de una libreria Ejm:
./configure —with-php=/usr/include/php
para saber donde se encuentra una librería o archivo en particular el comando ‘whereis’ es de mucha utilidad. Ejm:
whereis php
Si el comando whereis no logra ubicar los archivos solicitados entonces una búsqueda completa en el sistema puede realizarse yendo al directorio raíz (cd /) y ejecutando:
find -name ‘php’
La cadena que en el ejemplo contiene ‘php’ puede contener comodines como ‘php*’.
Consejo 7: utilizar whereis y find -name para obtener las referencias a las librerías y archivos.
4. Compilar el código
make
Dentro de la compilación de los códigos el sistema lo que hace es seguir una secuencia de comandos (Makefile) para compilar cada una de las librerías y ejecutables del programa. Muchas veces este script se detiene antes de tiempo mostrando un error (no existe un comando, no existe un archivo, etc). Si estos errores son de falta de una librería o un archivo posiblemente es que no estén enlazados con una librería con la que deberían estar enlazados. Es muy recomendable corregir esto desde la configuración para que el mismo script corrija el Makefile, sin embargo, algunas veces estos enlaces pueden ser corregidos dentro del mismo Makefile. Ejm:
Dentro del Makefile podría existir un enlace a una librería como este ‘-lgif’. Sin embargo, asumamos que nuestro sistema no utiliza la librería ‘gif’ sino la librería ‘ungif’ entonces podemos reemplazar ‘-lgif’ por ‘-lungif’ y el programa posiblemente compile. Otra opción menos recomendable aún es probar borrando el enlace ‘-lgif’ y asumir que el comando al no tener un enlace explícito terminará usando la librería “por defecto”, lo cual me ha funcionado pero lo hice prácticamente disparando balas a ver si le atinaba a algo.
(Consejo 8: Como última opción, considerar editar el makefile y editar o borrar lo que causa errores)
5. Instalar el código ya compilado
make install
Más sobre esta secuencia y lo que significa cada paso puede ser leído en los siguientes tutoriales:
http://www.webmonkey.com/tutorial/Compile_Software_From_Source_Code
http://www.tuxfiles.org/linuxhelp/softinstall.html
http://www.linuxjournal.com/article/216