Documentación de Gentoo Distcc
1.
Introducción
¿Qué es distcc?
Distcc es un programa diseñado para distribuir tareas de compilación a
través de la red hacia máquinas participantes. Consiste en un
servidor, distccd y un programa cliente, distcc. Distcc
puede trabajar de manera transparente con ccache, Portage y Automake con
una sencilla configuración.
Usando distcc para hacer el bootstrap
Si planea usar distcc para hacer el bootstrap en una instalación
Gentoo, asegúrese de leer la sección Usando
distcc para hacer el bootstrap más adelante en este mismo
documento.
2.
Configuración
Dependencias
Para utilizar distcc, todas las máquinas en su red deben tener la
misma versión del GCC. El mezclar 3.3.x (variando la x) está bien,
pero el mezclar 3.3.x y 3.2.x puede resultar en que hayan
errores en tiempo de compilación o ejecución.
Instalando Distcc
Existen un par de opciones que debiera conocer antes de comenzar a
instalar distcc.
Distcc tiene un monitor gráfico para monitorizar las tareas que su
computador está enviando para compilación. Si usa Gnome, entonces
agregue 'gnome' a sus parámetros USE. Sin embargo, si no lo usa y
todavía desea poder monitorizar, entonces coloque 'gtk' en la lista de
parámetros USE.
Listado de Código 2.1: Instalar distcc |
# emerge distcc
|
Importante:
Asegúrese de recordar que debe instalar distcc en todos los equipos
participantes.
|
Configurando Portage para usar Distcc
Configurar Portage para usar distcc es fácil. Siga estos sencillos
pasos en cada sistema participante en la compilación distribuida:
Listado de Código 2.2: Integrar Distcc y Portage |
# emerge distcc
# nano -w /etc/make.conf
MAKEOPTS="-jN"
FEATURES="distcc"
|
Especifique las máquinas participantes
Utilice el comando distcc-config para indicar la lista de
máquinas. Aquí hay un ejemplo de lista:
Listado de Código 2.3: Ejemplo de definicion de maquinas |
192.168.0.1 192.168.0.2 192.168.0.3
192.168.0.1/2 192.168.0.2 192.168.0.3/10
192.168.0.1:4000/2 192.168.0.2/1 192.168.0.3:3632/4
@192.168.0.1 @192.168.0.2:/usr/bin/distccd 192.168.0.3
|
Puede parecer complicado, pero en la mayoría de los casos una
variante de la línea 1 ó 2 funcionará.
Como la mayoría no usará las líneas 3 ó 4, enlazaremos con los documentos de
distcc para mayor información.
Por ejemplo, para ajustar la primera línea como el ejemplo
anterior:
Listado de Código 2.4: Ejemplo del comando para establecer las máquinas |
# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"
|
Modifique su /etc/conf.d/distccd según sus necesidades y
asegúrese usar la directiva --allow para permitir solamente
máquinas en las cuales confía. Para mayor seguridad use también la
directiva --listen para indicarle al demonio distcc cuál
interfaz utilizar en sistema de múltiples interfaces. Para más
información acerca de seguridad y distcc vea el documento Distcc Security
Design (en inglés).
Importante:
Es importante usar las opciones --allow y --listen. Por favor lea la
página del manual de distccd o el documento de seguridad señalado
arriba para mayor información.
|
Ahora inicie el demonio distcc en todas las máquinas participantes:
Listado de Código 2.5: Iniciar el demonio distcc |
# rc-update add distccd default
# /etc/init.d/distccd start
|
Configurar Distcc para trabajar con Automake
Esto es más fácil de configurar en algunos casos que con Portage. Hay
que actualizar su variable de entorno PATH para incluir
/usr/lib/distcc/bin antes del directorio donde gcc
esté situado (/usr/bin). No obstante, hay un problema. Si
usa ccache, deberá poner distcc después de ccache. Sería algo así:
Listado de Código 2.6: Configurar su ruta |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Entonces, así como normalmente escribiría make, escribirá
make -jN (donde N es un entero). El valor de N varía según su
red y la cantidad de máquinas disponibles para la compilación. Pruebe
con sus propios ajustes para encontrar el número N que le dé el mejor
desempeño.
3.
Compilación Cruzada
La compilación cruzada consiste en usar una arquitectura para
construir programas para otra arquitectura. Esto puede ser tan simple
como usar un Athlon (i686) para compilar un programa para un K6-2
(i586), o usar un Sparc para compilar un programa para un ppc. Esto se
encuentra documentado en nuestra Guía de compilación cruzada
con distcc.
4.
Usando Distcc para hacer el Bootstrap
Paso 1: Configuración de Portage
Arranque su máquina nueva con un CD de Instalación Gentoo Linux y siga
las instrucciones
de instalación hasta la parte que cubre el bootstrapping. (Vea
las Preguntas de uso frecuente en
Gentoo Linux para más información sobre el bootstrapping). Luego
configure Portage para usar distcc:
Listado de Código 4.1: Configuración preliminar |
# nano -w /etc/make.conf
FEATURES="distcc"
MAKEOPTS="-jN"
|
Listado de Código 4.2: Configurar la ruta |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Paso 2: Obtener Distcc
Instale distcc:
Listado de Código 4.3: Obtener Distcc en la máquina nueva |
# USE='-*' emerge --nodeps sys-devel/distcc
|
Paso 3: Configurar Distcc
Ejecute distcc-config para configurar distcc:
Listado de Código 4.4: Configuración final de distcc |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
¡Distcc ya está configurado para hacer bootstrap! Continúe con las
instrucciones de instalación oficiales y no se olvide de hacer
emerge distcc otra vez luego de ejecutar emerge system. Esto
asegurará que la dependencias requeridas también sean instaladas.
Nota:
Durante el bootstrap y emerge system pudiera parecer que distcc
no esté siendo usado. Esto es esperable ya que algunos ebuilds no
trabajan bien con distcc, por lo que intencionalmente se le desactiva.
|
5.
Solucionando Problemas
Algunos paquetes no usan distcc
A medida que instale vía emerge varios paquetes, notará que algunos no
están siendo distribuidos (y no están siendo compilados en
paralelo). Esto puede suceder porque el fichero Makefile del paquete
no soporta operaciones en paralelo o el mantenedor del ebuild ha
desactivado explícitamente dichas operaciones debido un problema
conocido.
A veces, distcc causará que falle la compilación de algún paquete. Si
esto le ocurre, por favor repórtelo.
Combinación de versiones del GCC
Si tiene versiones distintas de GCC en sus máquinas, podrá haber
problemas muy extraños. La solución está en asegurarse que todas las
máquinas tengan la misma versión de GCC.
Las actualizaciones recientes de Portage hacen que este use
${CHOST}-gcc en vez de gcc. Esto significa que si está
combinando máquinas i686 con otras de distinto tipo (i386, i586)
tendrá problemas. Una solución temporal a esto puede ser exportar la
variable de entorno CC con export CC='gcc' CXX='c++' o
colocarla en el archivo /etc/make.conf.
Importante:
Hacer esto explícitamente redefine algo del comportamiento de Portage
y puede que tenga resultados un tanto extraños en el futuro. Sólo haga
esto si está combinando CHOSTs.
|
-march=native
Comenzando con GCC 4.3.0, el compilador soporta el parámetro
-march=native que habilita la detección automática del CPU y de
las optimizaciones que valen la pena activar según el procesador sobre
el que corre el GCC. Esto es un problema con distcc, ya que
permite mezclar código optimizado para diferentes procesadores (como
AMD Athlon e Intel Pentium). No use -march=native o
-mtune=native en sus CFLAGS o CXXFLAGS al
compilar con distcc.
6.
Extras de Distcc
Monitores de Distcc
Distcc trae dos monitores. El de consola siempre se compila y se llama
distccmon-text. Ejecutarlo por la primera vez puede ser una
experiencia algo confusa, sin embargo es realmente fácil de usar. Si
lo ejecuta sin parámetros solo correrá una vez, pero si le pasa un
número N como argumento, actualizará cada N segundos.
El otro monitor sólo se compila si activa los parámetros USE
gtk o gnome. Es basado en GTK+, se ejecuta en el entorno
X y es bastante bonito. En Gentoo el monitor gráfico ha sido llamado
distccmon-gui para evitar confusiones. En otras partes puede
que sea llamado distccmon-gnome.
Listado de Código 6.1: Iniciar los monitores |
# distccmon-text N
distccmon-gui
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui
|
Importante:
Si su directorio distcc está ubicado en otra parte, cambie la variable
de entorno DISTCC_DIR de manera correspondiente.
|
El contenido de este documento está registrado bajo los términos de
la licencia
Creative Commons - Reconocimiento / Compartir Igual
|