Distcc/it

Distcc è un programma progettato per distribuire i processi di compilazione, attraverso una rete, a degli host partecipanti. È composto da un server,, e da un client,. Distcc funziona in modo trasparente con ccache, Portage e perfino Automake, con un po' di lavoro.

Se stai pensando di usare distcc per facilitare il bootstrap di una installazione di Gentoo, assicurati di leggere la sezione Usare Distcc per il Bootstrap.

Dipendenze
Per poter usare Distcc, tutti i computer sulla rete devono avere la stessa versione di GCC. Ad esempio, mescolare GCC 3.3.x (dove la x è variabile) non è un problema, ma mescolare 3.3.x e 3.2.x potrebbe generare errori in fase di compilazione o di esecuzione.

Installazione di Distcc
Ci sono un paio di opzioni che dovresti conoscere prima di cominciare a installare distcc.

Distcc ships with a graphical monitor to monitor tasks that a computer is sending away for compilation, enabled with the    flag.

Configurare portage all'uso di Distcc
Far usare distcc a Portage è semplice. Eseguire i passaggi seguenti su tutti i sistemi che partecipano alla compilazione distribuita:

Adesso, impostare le variabili  e   come mostrato sotto. Una strategia comune consiste nell'impostare N al doppio del numero totale delle CPU (locali+remote)+1, ed M al numero delle CPU locali. NEl caso in cui non siano disponibili host distcc, o che l'ebuild richieda una compilazione esplicitamente locale (ad esempio, gcc), la flag  preverrà l'apertura di troppi task.

For instance, if you're connected to two quad core host PCs running  and your local PC has a dual core, then the   variable could look like this:

While editing your, make sure that you do not have  in your   or. will not distribute work to other machines if  is set to. You may find the appropriate value with. See also Inlining -march=native for distcc blog post.

Specificare gli host partecipanti
Utilizzare il comando  per impostare una lista di host. Ecco un esempio degli host che potrebbero essere nella tua lista:

Examples of host definitions

Ci sono anche altri modi per impostare gli host. Consultare la manpage di distcc per ulteriori dettagli.

Se si vuole compilare anche in locale, occorre inserire 'localhost' nella lista degli host. Di contro, se si vuole evitare di usare la macchina locale per compilare (caso d'uso comune), bisogna ometterlo dalla lista. Inserire 'localhost' su una macchina lenta potrebbe addirittura rallentare le cose. È consigliabile effettuare dei test per raggiungere le performance migliori.

Può sembrare complicato, ma nella maggior parte dei casi una variante della riga 1 o 2 sarà sufficiente a far funzionare tutto.

Visto che la maggior parte delle persone non usa le righe 3 e/o 4, fare riferimento alla documentazione di distcc (man distcc) per ulteriori informazioni, incluso il come far funzionare distcc attraverso una connessione SSH.

Ad esempio, per impostare la prima riga dell'esempio precedente:

Modificare sulla base delle proprie esigenze ed assicurarsi di aver impostato la direttiva   di modo da accettare solo host fidati. Per aumentare la sicurezza, si può usare la direttiva  per indicare al demone distcc quale IP ascoltare (per sistemi multi-homed). Ulteriori informazioni su distcc sono presenti alla pagina Distcc Security Design.

Adesso, lanciare il demone di distcc su tutti i computer partecipanti:

Configurare Distcc per funzionare con Automake
In molti casi, questa procedura è anche più semplice della parte riguardante Portage. Ciò che bisogna fare è aggiornare la propria variabile  per farle includere  di fronte alla directory che contiene. In ogni caso, c'è da fare attenzione. Se si usa ccache bisogna inserire distcc dopo ccache:

Si può inserire tutto questo dentro il proprio o equivalente, di modo da impostare PATH ogni volta che si esegue il login.

Then, as you would normally type , you would type   (where N is an integer). The value of N depends on your network and the types of computers you are using to compile. Test your own settings to find the number that yields the best performance.

Setting up Distcc to Work With ssh
Setting up distcc via ssh includes some pitfalls. 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, create 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 note 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 enabled through the    flag. 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:

Links

 * Inlining -march=native for distcc.

Ringraziamenti
Si ringraziano le seguenti persone per i contributi apportati a questa guida:


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