Distcc/es

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 forma transparente con ccache, Portage y Automake realizando una sencilla configuración.

Cuando planee utilizar distcc para ayudarle a realizar el bootstrap en una instalación Gentoo, asegúrese de leer Utilizar distcc para realizar el bootstrap.

Dependencias
Para utilizar distcc, todas las máquinas en la red deben tener la misma versión de GCC. Mezclar 3.3.x (variando la x) es correcto, pero mezclar 3.3.x y 3.2.x "puede" resultar en errores en tiempo de compilación o ejecución.

Instalar distcc
Distcc incluye un monitor gráfico para monitorizar las tareas que un computador está enviando para compilación. Este monitor se habilita cuando el ajuste    está activado.

Después de configurar el ajuste, instale el paquete :

Configurar Portage para utilizar distcc
Configurar Portage para usar distcc es fácil. Siga estos sencillos pasos en cada sistema que vaya a participar en la compilación distribuida.

En primer lugar asegúrese de que está instlado:

A continuación, ajuste la variable  y la variable   tal y como se describe abajo. Una estrategia común es definir  como el doble del número total de CPUs disponibles (locales y remotas) más uno y definir   como el número de CPUs locales. En el caso en el que las máquinas participantes no estén disponibles o cuando el ebuild a instalar requiera un compilación exclusivamente local (por ejemplo gcc), entonces el ajuste  evitará que se lancen demasiadas tareas.

Por ejemplo, cuando hay dos equipos PC anfitriones con cuatro núcleos que corren distcc y el equipo PC local tiene una CPU con doble núcleo entonces la variable  podría ser:

While editing the file, make sure that it does not have   in the   or   variables. distccd will not distribute work to other machines if  is set to. The appropriate  value can be obtained by running the following command:

Lea -march=native en línea para distcc para ampliar la información.

Especificar las máquinas participantes
Utilice la orden distcc-config para indicar la lista de máquinas.

A continuación se muestra una lista ejemplo de definiciones de equipos. En la mayoría de los casos, serán suficientes variaciones de las líneas 1 y 2. Se puede encontrar más información sobre la sintaxis de las líneas 3 y 4 en la página del manual de distcc.

Hay otras formas de configurar máquinas. Eche un vistazo a la página del manual de distcc ( man distcc ) para obtener más información.

If compilations should also occur on the local machine, put  in the hosts list. Conversely if the local machine is not to be used to compile, omit it from the hosts list. On a slow machine using localhost may actually slow things down. Make sure to test the settings for performance.

Configuraremos distcc</tt> para que usar los equipos mencionados en la primera línea del ejemplo:

Edit and be sure to set the   directive to allow only trusted hosts. For added security, use the  directive to tell the distccd</tt> daemon what IP to listen on (for multi-homed systems). More information on distcc</tt> security can be found at Distcc security notes.

Ahora inicie el demonio distcc</tt> en todas las máquinas participantes:

Configurar distcc para trabajar con Automake
This is, in some cases, easier than the Portage setup. All that is needed is to update the  variable to include  in front of the directory that contains gcc</tt>. However, there is a caveat. If ccache</tt> is used, then put the distcc location after the ccache one:

Put this in the user's or equivalent file to have the   set every time the user logs in, or set it globally through an  file.

Instead of calling just make, add in -jN (where  is an integer). The value of  depends on the network and the types of computers that are used to compile. A heuristic approach to the right value is given earlier in this article.

Configurar distcc para trabajar con ssh
Setting up distcc via ssh includes some pitfalls. First, generate an SSH key pair without password setup. Be aware that portage compiles programs as the portage</tt> user. The home folder of the portage</tt> user is, which means the keys need to be stored in

A continuación cree una sección para cada máquina en el fichero de configuración de SSH:

Also make sure that each host is available in the file and append the public key to the  file of the hosts. To set up the hosts test1</tt> and test2</tt>, run:

Por favor, observe que el símbolo '@'</tt>, especifica las máquinas ssh para distcc.

Compilación cruzada
Cross-compiling is using one architecture to build programs for another architecture. This can be as simple as using an Athlon (i686) to build a program for a K6-2 (i586), or using a SPARC to build a program for a PowerPC. This is documented in the DistCC Cross-compiling guide.

Paso 1: Configurar Portage
Boot the new box with a Gentoo Linux LiveCD and follow the installation instructions, while keeping track of the instructions in the Gentoo FAQ for information about bootstrapping). Then configure Portage to use distcc</tt>:

Actualice también la variable  en la sesión de instalación:

Paso 2: Obtener distcc
Instale :

Paso 3: Configurar distcc
Lance distcc-config --install para configurar distcc. Sustituya la cadena  del ejemplo por las direcciones IP o nombres de la máquinas que participan como nodos DistCC.

¡Distcc ya está configurado para hacer bootstrap! Continúe con las instrucciones de instalación adecuadas y no olvide lanzar kbd>emerge distcc después de lanzar emerge @system. Esto asegurará que las dependencias necesarias también se instalarán.

Algunos paquetes no utilizan distcc
As various packages are installed, users will notice that some of them aren't being distributed (and aren't being built in parallel). This may happen because the package' doesn't support parallel operations, or the maintainer of the ebuild has explicitly disabled parallel operations due to a known problem.

En algunas ocasiones, distcc</tt> puede causar que un paquete falle en su compilación. Si sucede esto, por favor informe de ello.

Versiones mezcladas de GCC
Si el entorno aloja versiones diferentes de GCC, probablemente tenga problemas extraños. La solución es asegurarse de que todas las máquinas tengan la misma versión.

Recent Portage updates have made Portage use  (minus gcc) instead of. This means that if i686 machines are mixed with other types (i386, i586) then the builds will run into troubles. A workaround for this may be to run export CC='gcc' CXX='c++' as root in a terminal, or put it in.

-march=native
Starting with GCC 4.3.0, the compiler supports the  option which turns on CPU auto-detection and optimizations that are worth being enabled on the processor on which GCC is running. This creates a problem when using distcc</tt> because it allows the mixing of code optimized for different processors. For example, running distcc</tt> with  on a system that has an AMD Athlon processor and doing the same on another system that has an Intel Pentium processor will mix code compiled on both processors together.

Preste atención a la siguiente advertencia:

Para conocer los ajustes que GCC habilitaría cuando se llama con, lance lo siguiente:

Monitores de distcc
Distcc ships with two monitoring utilities. The text-based monitoring utility is always built and is called distccmon-text</tt>. Running it for the first time can be a bit confusing, but it is really quite easy to use. If the program is run with no parameter it will run just once. However, if it is passed a number it will update every  seconds, where   is the argument that was passed.

The other monitoring utility is only enabled when the    flag is set. This one is GTK+ based, runs in an X environment, and it is quite lovely. For Gentoo, the GUI monitor has been renamed to <tt>distccmon-gui</tt> to make it less confusing (it is originally called <tt>distccmon-gnome</tt>).

Para monitorizar el uso de <tt>distcc</tt> por parte de Portage:

Recursos externos

 * Uso de -march=native en línea para distcc
 * Página oficial de Distcc