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,  y un programa cliente,. Distcc puede trabajar de forma transparente con ccache, Portage y Automake realizando una sencilla configuración.

Si está pensando en usar distcc para ayudarle a realizar el bootstrap en una instalación Gentoo, asegúrese de leer la sección Usar Distcc para hacer el bootstrap.

Dependencias
Para utilizar Distcc, todas las máquinas en su red deben tener la misma versión del 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
Hay un par de opciones que debería conocer antes de instalar distcc.

Distcc incluye 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 quiere monitorizar, entonces agregue 'gtk' a la lista de parámetros USE.

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:

Ahora, ajuste la variable  y la variable   tal y como se describe abajo. Una estrategia común es definir N como el doble del número total de CPUs disponibles (locales y remotas) más uno y definir M como el número de CPUs locales. En el caso en el que no estén disponibles máquinas distcc o el ebuild requiera únicamente compilación local (por ejemplo gcc), el ajuste  evitará que se ejecuten demasiadas tareas.

Especificar las máquinas participantes
Utilice la orden  para indicar la lista de máquinas. A continuación se muestra un ejemplo de lista:

Ejemplos de definiciones de máquinas

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

Si desea compilar en la máquina local debería escribir 'localhost' en la lista de máquinas. Contrariamente, si no desea utilizar 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 comprobar sus ajustes para mejorar el rendimiento.

Puede parecer complicado, pero en la mayoría de los casos una variante de la línea 1 ó de la 2 funcionará.

Como la mayoría de la gente no usará las líneas 3 ó 4, haré referencia a los documentos de distcc (man distcc) para obtener más información, los cuales incluyen la posibilidad de usar distcc sobre una conexión SSH.

Por ejemplo, para ajustar la primera línea en el ejemplo anterior:

Modifique su para ajustarlo a sus necesidades y asegúrese de usar la directiva   para permitir únicamente máquinas en las cuales confíe. Para mayor seguridad debería utilizar también la directiva  para indicarle al demonio distcc en qué dirección IP debe escuchar (en sistemas con más de una dirección IP). Se puede encontrar más información acerca de seguridad en distcc en Distcc Security Design.

Ahora inicie el demonio distcc en todas las máquinas participantes:

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  para incluir delante del directorio que contiene. No obstante, hay un problema. Si utiliza ccache, deberá poner distcc después de ccache:

Puede colocar esto en su archivo o equivalente para tener configurada la variable PATH cada vez que ingrese al sistema.

Entonces, así donde normalmente escribiría, escribirá   (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 que le ofrezca el mejor rendimiento.

Setting up Distcc to Work With ssh
Setting up distcc via ssh includes some pitfalls you should be aware of. First, generate a ssh key pair without password setup. Be aware that portage compiles programs as user portage. The home folder of the user portage is, which means the keys need to be stored in.

Second, generate a section for each host in the ssh config file:

Also make sure that each host is available in the file and append your public key to the  file of the hosts. To set up the hosts test1 and test2 run

Please not the '@'-sign, which specifies ssh hosts for.

Cross-Compiling
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 ppc. This is documented in our DistCC Cross-compiling Guide.

Step 1: Configure Portage
Boot your new box with a Gentoo Linux LiveCD and follow the installation instructions up until the bootstrapping part. (See the Gentoo FAQ for more information about bootstrapping.) Then configure Portage to use distcc:

Step 2: Getting Distcc
Install distcc:

Step 3: Setting Up Distcc
Run  to setup distcc; substitute   with the IP addresses or hostnames of the participating DistCC nodes.

Distcc is now set up to bootstrap! Continue with the official installation instructions and do not forget to re-emerge distcc after. This is to make sure that all of the dependencies you want are installed as well.

Some Packages Don't Use Distcc
As you emerge various packages, you'll notice that some of them aren't being distributed (and aren't being built in parallel). This may happen because the package's Makefile doesn't support parallel operations or the maintainer of the ebuild has explicitly disabled parallel operations due to a known problem.

Sometimes distcc might cause a package to fail to compile. If this happens for you, please report it to us.

Mixed GCC Versions
If you have different GCC versions on your hosts, there will likely be very weird problems. The solution is to make certain all hosts have the same GCC version.

Recent Portage updates have made Portage use  instead of. This means that if you're mixing i686 machines with other types (i386, i586) you will run into problems. A workaround for this may be to  or to put it in.

-march=native
Starting with GCC 4.3.0, the compiler supports the  switch which turns on CPU autodetection and optimizations that are worth being enabled on the processor the GCC is running at. This is a problem with  as it allows mixing of code optimized for different processors (like AMD Athlon and Intel Pentium). Don't use  or   in your   or   when compiling with.

To know the flags that GCC would enable when called with, execute the following:

Distcc Monitors
Distcc ships with two monitors. The text-based one is always built and is called. Running it for the first time can be a bit confusing, but it is really quite easy to use. If you run the program with no parameter it will run once. However, if you pass it a number it will update every N seconds, where N is the argument you passed.

The other monitor is only turned on if you enabled  or   in your   flags. This one is GTK+ based, runs in an X environment and it is quite lovely. For Gentoo the GUI monitor has been called  for less confusion. Elsewhere it may be referred to as.

or run :

To monitor Portage's distcc usage you can use:

Agradecimientos
Nos gustarían dar las gracias a los siguientes autores y editores por sus contribuciones a esta guía:


 * Lisa Seelye
 * Mike Frysinger
 * Erwin
 * Sven Vermeulen
 * Lars Weiler
 * Tiemo Kieft
 * nightmorph