Lisa M. Seelye Juan Jesús Prieto José Alberto Suárez López 1.0 5 Agosto 2003 Este documento sirve como HOWTO para usar distcc con gentoo. 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 y Portage mediante una sencilla configuración.

Dependencias

    >=sys-apps/portage-2.0.46-r11
    >=sys-devel/gcc-config-1.3.1
    >sys-apps/shadow
    (A partir de la versión 2.8) Y las siguientes dependencias opcionales cuando
    tiene gtk en los indicadores de su USE
    >=x11-libs/gtk+-2.2.1

Configuración
Configurar Portage para usar Distcc

Configurar distcc es fácil de hacer con Portage. Siga estos sencillos pasos en cada ordenador donde desee usar distcc:

    # emerge distcc
    # nano -w /etc/make.conf
    Edite su variable FEATURES para incluir el indicador "distcc"

Seguidamente deberá especificar qué máquinas quiere usar. Para hacer esto puede usar el comando distcc-config para indicar la lista de máquinas. Aquí hay un ejemplo de lista:

    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 o de la 2 es suficiente. La explicación de cada línea es: La línea 1 es una lista de máquinas separadas por espacios que lo usarán todo por defecto. La línea 2 es una lista de máquinas que especifica el número máximo de trabajos (mediante el uso de /N) a enviar a dicha máquina al mismo tiempo. Como la mayoría de la gente no necesitará usar las líneas 3 ó 4, le remito a la documentación de distcc si necesita más información.

El paso final para integrar distcc en Portage es reabrir su /etc/make.conf y editar MAKE_OPTS para incluir -jN (donde N es un entero). Normalmente N será el número total de procesadores disponibles en la red más uno.

    # nano -w /etc/make.conf
    MAKE_OPTS=-jN

Configurar Distcc para trabajar con Automake

Esto es en algunos casos más facil de configurar que con Portage. Lo que debe hacer es 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 la parte de ccache. Sería algo así:

    # export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

Entonces, así como normalmente escribiría make, deberá escribir make -jN (donde N es un entero). El número adecuado para N varía según su red y el tipo de ordenadores que usará para la compilación. En mi caso, tengo una placa dual P3 y un K6-2/400 que lo compilan todo para mi ordenador de escritorio (un Athlon Thunderbird a 1200MHz) y uso -j5. Pruebe a realizar sus propios ajustes para encontrar el número N correcto.

Compilación Cruzada (Cross-Compiling)
Unas notas sobre Compilación Cruzada

La Compilación Cruzada consiste en usar una determinada arquitectura para construir programas para otra arquitectura. Esto puede ser tan simple como usar un Athlon (i686) para realizar un programa para un K6-2 (i586), o usar un Sparc para realizar un programa para un ppc.

Nota personal sobre Compilación Cruzada

Me encanta poder ayudar en Gentoo en sus esfuerzos sobre la Compilación Cruzada, pero no dispongo de ninguna máquina que no sea una x86. Puedo crear cosas que funcionen en teoría, pero tengo que apoyarme en otra gente para probar lo que escribo. Funciona hasta cierto punto, pero es duro. ;-)

En un futuro próximo espero adquirir un Sparc de algún tipo para instalarle Gentoo de manera que pueda experimentar directamente sobre el terreno.

Problemas conocidos con Distcc
Portage no funciona con Distcc

El título, en realidad, no es el más apropiado. Lo único que no funciona es el programa de monitorización (distccmon-text y distccmon-gnome) con las fuentes estándar de distcc. La razón para ello es que distcc depende de la variable de entorno TMPDIR, y Portage la reasigna.

La solución es aplicar un parche que cambie la dependencia a DISTCC_TMPDIR. Este parche es automáticamente aplicado a distcc. Si no desea usar /tmp (valor por defecto) puede reasignar DISTCC_TMPDIR.

También habrá observado que distcc no funciona con algunos paquetes. Esto puede estar motivado por muchas cosas, como un error en el .ebuild (por usar make en lugar de emake) o un error en el Makefile del programa, como se apunta en la siguiente sección.

Mozilla y XFree

Cuando hace emerge sobre varios paquetes, observará que no están siendo distribuidos (y de hecho no se están construyendo en paralelo). Esto es debido a que los desarrolladores de los .ebuild de Mozilla y XFree han deshabilitado la compilación en paralelo porque es sabido que causa problemas. Esto no es necesariamente un problema de distcc.

Eso no significa que a veces distcc no provoque que un paquete falle al compilar.

Extras de Distcc
Monitores de Distcc

Distcc viene con dos monitores. El basado en texto siempre es construido y llamado distccmon-text. La primera vez que se ejecuta puede resultar algo confuso, sin embargo es realmente fácil de usar. Si ejecuta el programa sin parámetros, se ejecutará una sola vez. Si le pasa como parámetro un número se actualizará cada N segundos, donde N es el número pasado.

El otro monitor sólo se activará si se habilita el indicador gtk en USE. Éste está basado en GTK+ y corre bajo un entorno X, y es realmente adorable.

Una advertencia a la hora de usar estos programas. Si desea monitorizar cualquier emerge, deberá iniciar el monitor como sigue:

    # sudo -u portage distccmon-text N
    O puede iniciar el monitor grafico...
    # sudo -u portage distccmon-gnome

Planes futuros para Distcc y Gentoo
distcc-subnetscan

distcc-subnetscan es un programa perl en desarrollo que escaneará una subred buscando máquinas que tengan un demonio distcc participativo. Incluso será mejorado para probar si un demonio en una máquina remota es conforme a una configuración específica CHOST para hacer mas fácil la compilación cruzada.

El script en perl está almacenado aquí hasta que se le encuentre una ubicación más formal.

distcc-config

distcc-config, la herramienta de configuración en espacio de usuario para distcc, está obsoleta. Pronto será reescrita para ser incluida en la nueva versión de distcc.