Revista Tecnología

Administración Linux VI – Instalación de software iii: compilación de código fuente

Publicado el 29 enero 2015 por Instintobinario

Y llegamos a la última entrega de éste apartado de instalación de software en sistemas Linux. En este artículo vamos a ver la última forma de instalar el software: compilación de código fuente. Este método sí que es realmente distinto a los otros dos, y algo más complejo, pero tras leer este artículo debería quedar perfectamente claro cómo llevarlo a cabo. Este artículo será un poco más largo, ya que voy a explicar qué es la compilación, sus ventajas e inconvenientes, y cómo se realiza. Comencemos.

¿Qué es la compilación?

Compilar es la acción de convertir el código fuente de un programa, escrito en un determinado lenguaje de programación (C, C++, Ada….), en código binario que el procesador sea capaz de entender y ejecutar. Durante el proceso de compilación se realizan labores de linkado de librerías externas, optimización, traducción de instrucciones a código máquina (0s y 1s) y optimización nuevamente. Cada una de éstas tareas lleva, a su vez, multitud de procesos y comprobaciones para garantizar que los cambios realizados no alteren el funcionamiento del programa. Todo esto no necesitamos hacerlo a mano, sino que lo realiza automáticamente un programa llamado compilador, como puede ser el gcc, que es de código libre y viene por defecto en linux, o el icc, específico para procesadores Intel y por el cual hay que pagar una licencia no pequeña, ya que realiza optimizaciones más avanzadas.

compilar

Ventajas de la compilación

Lo primero que debemos entender es que prácticamente no hay dos procesadores iguales. Cada marca, y aún más, cada modelo y cada versión puede variar. Pero, ¿en qué varían tanto los procesadores? Muy simple: cada procesador tiene su propio repertorio de instrucciones máquina, también llamado ISA (Instruction Set Architectural), con instrucciones que hacen que el procesador ejecute las diferentes acciones que hacen funcionar un programa. Éste repertorio solemos llamarlo, por ejemplo, x86, que es el más común hoy en día en Intel. Está compuesto por dos partes: una general, común a todos los procesadores con arquitectura x86; y una parte específica, que es la que diferencia a dicho procesador de los demás, permitiendo hacer cosas más avanzadas.

Cuando descargamos un paquete precompilado mediante el gestor de paquetes (apt-get, yum, pacman…) o desde la web del fabricante, éste se ha compilado de forma que funcione en el mayor número de procesadores posible: Intel y AMD. Sería imposible que el desarrollador nos ofrezca un paquete específico para cada procesador, ya que la cantidad de paquetes sería enorme, o que un paquete incluyera todas las instrucciones específicas, ya que la cantidad de código sería tal que el programa dejaría de ser eficiente. Por este motivo, dichos paquetes sólo utilizan las instrucciones máquina comunes a todos los procesadores, olvidando las instrucciones propias de los modelos y dando lugar a un código no optimizado para tu procesador.

Cuando bajas los archivos de código fuente y lo compilas, lo haces para tu procesador específico, de forma que aprovechas esas instrucciones que pueden hacer cosas más eficientemente que las genéricas. Este código no tiene porqué funcionar solamente en tu procesador, si no que puede hacerlo en otros modelos o versiones del mismo, pero estará optimizado para éste concreto. Sin bien nadie garantiza que funcione en otros.

Desventajas de compilar código fuente

No todo iban a ser ventajas al compilar los programas desde código fuente. Así que os voy a contar los inconvenientes:

  • El tiempo de compilación es superior al de instalación, ya que las operaciones a realizar son mucho más complejas. No es posible determinar cuánto va a ser, ya que depende mucho de la cantidad de código a compilar, del procesador, de la memoria… En procesadores potentes puede que no sea una diferencia enorme, pero en procesadores un poco más antiguos o menos potentes, el proceso podría alargarse bastante tiempo (hablamos de horas para programas grandes).
  • El procesador trabajará al 100% en todos sus núcleos, por lo que el consumo de energía y la disipación de calor se dispararán. ¡¡Peligro con el overclocking!! también hay que tener esto en cuenta si se trata de un portátil, ya que podría agotar la batería en muy poco tiempo. Conviene hacerlo con el cargador enchufado.
  • Problemas de dependencias. Puede que el código que vas a compilar precise de una librería que te falte en tu equipo, por lo que te saldrá un error por pantalla indicando que librerías faltan. Deberás instalar éstas una a una para poder compilar correctamente y volver a empezar todo el proceso.

Espero que estas desventajas no os desanimen, a utilizar éste sistema, ya que el rendimiento realmente mejora. Ahora os explicaré como se hace la compilación, veréis que realmente no es complicado.

¿Como compilar programas?

Vamos a pasar a la práctica. Lo primero es descargar el comprimido con los ficheros de código fuente, y para ello seguiremos pasos similares a cuando descargábamos los paquetes precompilados (deb, rpm…). Vamos a la web del fabricante y buscamos donde está la parte de descargas. Ahí se encontrará el fichero comprimido con los ficheros junto a las demás opciones de descarga que existan, generalmente en formato .tar.gz o .tar.bz2. En el siguiente artículo explicaré los ficheros comprimidos, por lo que paciencia si no sabéis cual es la diferencia ni como se descomprimen.

Una vez descargado lo descomprimimos en la carpeta que sea, la instalación se realizará en los directorios del sistema (generalmente en /usr/local). Lo que si que conviene es ser organizados, colocando los comprimidos en algún directorio que creemos, por ejemplo, en /opt, y que podemos llamar, por decir algo, prebuilds. Para esto es tan simple como hacer lo siguiente.

Sólo la primera vez creamos el directorio:

mkdir /opt/prebuilds

El resto de veces buscamos el directorio de la descarga (comando cd) y después lo movemos al directorio creado a tal efecto:

mv <archivo_comprimido> /opt/prebuilds
cd /opt/prebuilds

Lo anterior es sólo para ser organizados, podéis hacerlo como más os guste. Tras descomprimir entráis en el nuevo directorio que se ha creado y buscáis un archivo de texto que suele venir junto con lo demás para ver qué hay que hacer para poder compilar el código. Por lo general se llama README o INSTALL. En éste archivo se describen los pasos para compilar, además de las dependencias del software. En caso de que no venga, que no cunda el pánico. Los pasos siempre son comunes y las dependencias se nos mostrarán mediante un error en la línea de comandos.

Una vez leído el archivo README (o INSTALL), instalamos las librerías que nos diga como dependencias utilizando el gestor de paquetes (apt-get o el que corresponda a vuestra versión). Esto es igual si las dependencias las descubrimos mediante un error de pantalla. Tras la instalación de las dependencias tenemos que configurar los componentes del programa mediante el script configure.

./configure

En éste punto es donde pueden saltarnos algunas dependencias que deberemos resolver o utilizar alguna opción que nos indiquen para deshabilitar alguna parte del software que estamos compilando. En caso de haber errores habrá una línea que dirá: configure: error:, y nos dará instrucciones para hacerlo correctamente (instalar dependencias o utilizar opciones que desactiven algunas características.

configure:error:

A continuación vamos a crear el paquete para instalar. Simplemente utilizamos el siguiente comando:

make

Por último, para la instalación del paquete, una vez finaliza el comando anterior, utilizamos el comando:

make install

Una nota importante: En algunos paquetes, la creación del mismo podría variar y darnos un error al hacer make. En este caso simplemente utilizamos jam y debería funcionar, si no es así consultar la documentación (README) o pedidme auxilio mediante comentarios, tal vez pueda resolveros la duda.

Con ésto tendremos el programa totalmente funcional en nuestro sistema. He de prevenir que ésto no funciona para la compilación del kernel de Linux, no os alteréis que esa parte ya llegará. Espero que os haya gustado y que compiléis mucho amigos.

configure_make_make_install

El artículo Administración Linux VI – Instalación de software iii: compilación de código fuente apareció por primera vez en Instinto Binario.

Administración Linux VI – Instalación de software iii: compilación de código fuente

Volver a la Portada de Logo Paperblog

Dossiers Paperblog

Revista