Poesía Binaria

Distribuyendo la compilación en varios equipos

Cuando se instala Gentoo o Linux From Scratch, una cosa que llega a ser desesperante son los tiempos de compilación, y es que estos tipos de sistemas son un poco «yo me lo guiso, yo me lo como«, es decir, a partir del código fuente, tú te compilas el sistema operativo completo.

Si a veces, para compilar el kernel, nos podemos tirar varias horas (siempre que lo tengo que hacer, le doy la mínima prioridad al proceso, para poder utilizar mientras el ordenador); cuando toca compilar un entorno de escritorio tipo GNOME, o KDE, puede llegar a ser eterno, sobre todo en máquinas más o menos antiguas.

Una de las grandes ayudas que descubrí en mis años de Gentoo es distcc, un pequeño programa que nos ayuda a distribuir la compilación en varios ordenadores. Gentoo viene preparado para poder utilizar distcc de serie en todas las compilaciones, y se nota bastante cuando por ejemplo se colocan tres ordenadores en red para compilar un paquete tipo OpenOffice (aunque en Gentoo hay versión precompilada, hace años no funcionaba muy bien y era mejor compilarla tú mismo).

Actualmente, me encuentro desde Linux Mint haciendo algunos programas bastante pesados, todos llevan su entorno gráfico hecho en gtkmm y algunas modificaciones conllevan una compilación que suele tardar un minuto, lo malo es que a veces falla algún pequeño detalle y tengo que compilar varias veces, por ello, he decidido aprovechar la potencia de todos los ordenadores de la casa y para ello he instalado distcc en todos:

Lo podemos encontrar en los repositorios de nuestras distribuciones, y si podemos instalar el último paquete «distcc-pump» mejor, por ejemplo, para instalar en Linux Mint/Ubuntu:

$ sudo apt-get install distcc-pump distccmon-gnome

En Gentoo podremos hacerlo así

root$ USE=»gtk» emerge distcc

En Arch:

root$ pacman -S distcc

luego, antes de hacer nada, tenemos que cargar el demonio en todos los ordenadores donde queramos compilar, imaginemos que nuestro equipo (el que dará la orden de compilar) es 192.168.0.6:

$ distccd –allow 192.168.0.6 # Como usuario vale

Tras esto, una vez cargado el demonio en todos los ordenadores, podemos ejecutar en el ordenador principal (el nuestro) la orden de compilar un paquete o un programa hecho por nosotros, para eso, primero debemos establecer una serie de ordenadores donde querremos compilar (todos aquellos donde hemos cargado el demonio):

$ export DISTCC_HOSTS=’192.168.0.6 192.168.0.4 192.168.0.2 192.168.0.20′

He incluido el localhost (192.168.0.6) con la ip de red, porque en algunos equipos, no funciona bien al querer utilizar localhost con IPv6, depende de la configuración del SO.

Ya estamos listos para compilar

$ make -j8 CC=distcc

Esto nos bastaría para enviar a los demás equipos compilar nuestro programa. -j8 indica que podremos compilar en paralelo 8 archivos (debemos jugar con esto en función de los equipos que tengamos).

Ahora bien, este es el método de toda la vida, ahora disponemos de distcc-pump, lo que hace este sistema es que también es capaz de delegar el preprocesamiento a los demás ordenadores (antes estaba todo limitado al host principal), por otra parte, realiza una transmisión más rápida de todos los archivos necesarios para compilar desde tu ordenador hacia los demás ordenadores de la red.

Para utilizar distcc-pump la tarea es algo diferente (nota: dependiendo de la distribución el ejecutable es diferente, distcc-pump, pump, pupmpe… así que tendremos que buscarlo).

$ export DISTCC_POTENTIAL_HOSTS=’192.168.0.6 192.168.0.4 192.168.0.2 192.168.0.20′
$ distcc-pump make -j8 CC=distcc

Ahora es cuestión de montarnos un cluster para hacer nuestras compilaciones…

También podemos compilar a través de Internet, aunque tenemos que asegurarnos de que el tiempo de transmisión compensará con el tiempo de compilación.

Por último, podemos ver el estado de nuestra compilación ejecutando al mismo tiempo que se compila el programa distccmon-text o distccmon-gnome (este segundo tiene entorno gráfico); nos permiten ver el trabajo que está haciendo cada uno.

También podría interesarte....