Gentoo Logo

Documentación de Gentoo Distcc

Contenido:

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
(Ajuste N a un número que refleje su configuración particular)
(Una estrategia común es duplicar el número de CPUs + 1)
MAKEOPTS="-jN"
(Agregue distcc a su variable FEATURES)
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
(Existen varios otras maneras de configurar esta lista. Vea
la página man de distcc para más detalles.)
Si desea compilar en la máquina local debería colocar 'localhost'
en la lista de máquinas. Contrariamente si no desea usar la máquina local
para compilar (que frecuentemente es el caso) omítala de la lista. En una
máquina lenta usar localhost puede de hecho hacer las cosas más lentas.
Asegúrese de probar sus ajustes en pos del rendimiento.

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

(Agregue distccd al nivel de ejecución default)
# rc-update add distccd default
(Inicie el demonio distcc)
# /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}"
Puede colocar esto en su archivo ~/.bashrc o su equivalente para
configurar la variable PATH cada vez que ingrese al sistema.

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
(Agregue distcc a la variable FEATURES)
FEATURES="distcc"
(Modifique MAKEOPTS para incluir -jN, donde N representa
el doble de la cantidad de CPUs disponibles + 1)

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

(Substituya host1, host2, ... con las direcciones IP de las
demás máquinas participantes)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
Un ejemplo: /usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.6"

¡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
(O)
distccmon-gui
Para verificar el funcionamiento de distcc por Portage, puede usar:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(O sino)
# 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.



Imprimir

Actualizado 7 de abril, 2008

Sumario: Este documento explica cómo usar distcc con Gentoo.

Lisa M. Seelye
Autora

Mike Frysinger
Editor

Erwin
Editor

Sven Vermeulen
Editor

Lars Weiler
Editor

Tiemo Kieft
Revisor

José Alberto Suárez López
Traductor

John Christian Stoddart
Traductor

José Luis Rivero
Traductor

Juan Jesús Prieto
Traductor

Andrés Pereira
Traductor

Manuel Peral González
Traductor

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.