Gentoo Linux e Distcc Lisa Seelye Mike Frysinger Erwin Sven Vermeulen Lars Weiler Tiemo Kieft Gilberto De Faveri Massimo Canali Cristiano Chiucchiolo Guida di riferimento per l'uso di distcc con Gentoo Linux. 1.14 2006-02-18 Introduzione
Cos'è distcc?

Distcc è un programma ideato per distribuire i task di compilazione in una rete di host partecipanti. È composto da un server, distccd e da un programma client, distcc. Distcc può funzionare in modo trasparente con ccache, Portage e Automake previa opportuna configurazione.

Bootstrap con distcc

Se si prevede di utilizzare distcc per il bootstrap di una installazione Gentoo, si veda la relativa sezione all'Usare Distcc per il Bootstrap di questo documento.

Configurazione
Dipendenze

Per utilizzare distcc è necessario che tutti i computer collegati in rete abbiano la stessa versione di GCC. È possibile mescolare, ad esempio, versioni 3.3.x (dove x varia), ma non 3.3.x e 3.2.x altrimenti i programmi potrebbero contenere errori.

Installare distcc

Esistono alcune opzioni di cui è bene parlare prima di cominciare l'installazione di distcc.

Distcc contiene un monitor grafico per tenere sotto controllo i task che il tuo computer sta distribuendo per la compilazione. Se usi Gnome, metti 'gnome' nelle tue USE flags. Se non usi Gnome e vuoi comunque utilizzare il monitor, metti 'gtk' nelle tue USE flags.

# emerge distcc
Configurare Portage per l'utilizzo di distcc

Configurare Portage per usare distcc è molto facile. È necessario seguire questi semplici passi per ogni computer sul quale desideri utilizzare distcc:

# emerge distcc
# nano -w /etc/make.conf
(Imposta N ad un numero adeguato alla tua configurazione)
(Un metodo piuttosto comune consiste nell'impostare N al doppio
del numero totale di CPU + 1)
MAKEOPTS="-jN"
(Aggiungere distcc a FEATURES)
FEATURES="distcc"
Specificare gli host da utilizzare

Per impostare la lista degli host puoi usare distcc-config. Ecco un esempio di alcuni host che potrebbero essere nella tua 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
(Esistono molti altri metodi per impostare gli host.
Si veda il man di distcc per ulteriori informazioni.)
Se desideri compilare anche in locale, devi aggiungere 'localhost'
all'elenco degli host. Al contrario, se non lo desideri (che è la scelta più
diffusa), non aggiungere nulla all'elenco. Su macchine poco prestanti la
compilazione in locale può rallentare parecchio il sistema. Ricordati di
controllare le impostazioni per non ridurre le prestazioni.

Potrebbe sembrare complicato, ma nella maggior parte dei casi una variante della riga 1 o 2 sarà sufficiente.

Dato che la maggior parte degli utenti non userà le righe 3 o 4, rimando chi fosse interessato alla documentazione di distcc.

Ad esempio, per impostare la riga 1 del listato precedente:

# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2
192.168.0.3"

Modifica /etc/conf.d/distccd secondo le tue esigenze e assicurati di impostare la direttiva --allow per usare soltanto gli host stabiliti. Per maggiore sicurezza dovresti usare anche la direttiva --listen per passare a distcc gli indirizzi IP da ascoltare (per sistemi multi-homed - connessi a diverse reti). Per ulteriori informazioni sulla sicurezza in distcc puoi consultare Distcc Security Design.

È importante usare --allow e --listen. Si consiglia quindi di leggere le pagine man di distcc o il documento sulla sicurezza appena citato.

A questo punto devi avviare il demone distcc su tutti i computer della rete:

(Aggiungere distcc al runlevel di default)
# rc-update add distccd default
(Avviare il demone distcc)
# /etc/init.d/distccd start
Configurare distcc per lavorare con automake

È generalmente più semplice rispetto alla configurazione di Portage. È necessario aggiornare la variabile d'ambiente PATH in modo che includa /usr/lib/distcc/bin prima della locazione di gcc (/usr/bin). Un avvertimento: se usi ccache devi mettere distcc dopo ccache:

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
Puoi aggiungere questa riga a .bashrc, o all'equivalente file di
configurazione della shell che stai usando, per impostare automaticamente
il PATH ogni volta che effettui il log in

A questo punto, invece di usare make, dovrai utilizzare make -jN (dove N è un intero). Il valore di N dipende dalla rete e dal tipo di computer che stai usando per compilare. Si consiglia di effettuare dei test sulla configurazione per trovare il numero che garantisce le prestazioni migliori.

Cross-Compiling

Il cross-compiling è l'utilizzo di un'architettura per compilare programmi per un'altra architettura. Questo potrebbe voler dire semplicemente utilizzare un Athlon (i686) per compilare un programma per un K6-2 (i585) oppure utilizzare una Sparc per compilare un programma per ppc. Il procedimento è documentato nella nostra DistCC Cross-compiling Guide.

Usare Distcc per il Bootstrap
1: Configurare Portage

È necessario effettuare il boot della nuova macchina con un LiveCD di Gentoo Linux e seguire la guida all'installazione fino al bootstrap. (Vedi la Gentoo FAQ per maggiori informazioni sul bootsprap.) Dopo ciò, si può continuare a configurare Portage per usare distcc.

# nano -w /etc/make.conf
(Aggiungere distcc a FEATURES)
FEATURES="distcc"
(Modificare MAKEOPTS con -jN, dove N rappresenta il numero dei
processori aumentato di 1)
MAKEOPTS="-jN"
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
2: Installare distcc

Prima di configurare distcc è necessario aggiungere l'utente 'distcc' a /etc/passwd:

# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >>
/etc/passwd
È importante notare che non è questo il metodo corretto per aggiungere un utente. Abbiamo seguito quest'altra via per il semplice motivo che in questa fase dell'installazione, useradd (da usare normalmente per lo scopo) non è ancora disponibile.

È ora possibile installare distcc:

# USE='-*' emerge --nodeps sys-devel/distcc
3: Configurare distcc

Per configurare distcc, esegui distcc-config --install.

(Sostituire host1, host2, ... con l'IP degli host che partecipano alla
compilazione)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3
..."
Per esempio: /usr/bin/distcc-config --set-hosts "localhost
192.168.0.4 192.168.0.6"

Adesso distcc è configurato per il bootstrap! Segui la guida ufficiale all'installazione ricordando di ri-emergere distcc dopo l'emerge system. Ciò serve per assicurarsi che vengano installate tutte le dipendenze.

Durante il bootstrap e l'emerge system distcc potrebbe non essere utilizzato. È normale, poichè alcuni ebuilds o pacchetti non funzionano bene con distcc, quindi lo disabilitano intenzionalmente.
Risoluzione dei Problemi
Mozilla e Xorg

Emergendo alcuni pacchetti, noterai che non vengono distribuiti (e quindi non vengono compilati in parallelo). Ciò è dovuto al fatto che gli sviluppatori di Mozilla e Xorg-X11 hanno disabilitato la compilazione parallela perchè causa di problemi.

La compilazione può fallire anche con altri pacchetti per lo stesso identico motivo. Se ti dovesse capitare, segnala un bug.

Usare versioni differenti di GCC

Se utilizzi versioni diverse di GCC sui tuoi host, avrai sicuramente strani problemi. Assicurati quindi che tutti gli host usino la stessa versione di GCC.

Le versioni più recenti di Portage usano ${CHOST}-gcc invece di gcc. Significa che potresti avere dei problemi usando macchine di tipo i686 insieme a macchine di altro tipo (i386, i586). Per aggirare il problema puoi eseguire export CC='gcc' CXX='c++' oppure puoi aggiungere il comando a /etc/make.conf.

Questa procedura ridefinisce il modo in cui agisce Portage e in futuro potrebbe portare a strani risultati. Seguila soltanto se stai usando CHOSTs differenti tra loro.
Gli Extra di Distcc
Monitorare distcc

Distcc contiene due monitor. Quello testuale, compilato di default, si chiama distccmon-text. Usarlo per la prima volta potrebbe essere un po' complicato, ma in realtà è molto semplice. Se viene lanciato senza parametri verrà eseguito una sola volta. Altrimenti, se gli viene passato un numero, verrà aggiornato ogni N secondi, dove N è l'argomento passato.

L'altro monitor viene abilitato se gtk o gnome sono presenti tra le USE flags. Questo monitor, piuttosto gradevole, è basato su GTK+ e gira sotto X. Sotto Gentoo è identificato come distccmon-gui per non generare confusione. Altrove potrebbe essere identificato come distccmon-gnome.

# distccmon-text N
(oppure)
# distccmon-gui
Per monitorare l'utilizzo di distcc da parte di Portage:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(oppure)
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui
Se la tua directory di distcc è altrove, modifica la variabile DISTCC_DIR in maniera opportuna.