Documentazione Distcc per Gentoo
1.
Introduzione
Cos'è distcc?
Distcc è un programma ideato per distribuire i processi 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 un'installazione Gentoo,
vedere la relativa sezione all'Usare Distcc per il
Bootstrap di questo documento.
2.
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 processi che il
proprio computer sta distribuendo per la compilazione. Se si usa Gnome, mettere
'gnome' nelle proprie flag USE. Se non si usa Gnome e si vuole comunque
utilizzare il monitor, mettere 'gtk' nelle proprie flag USE.
Codice 2.1: Installare distcc |
# emerge distcc
|
Importante:
Ricordarsi di installare distcc su tutte le macchine partecipanti.
|
Configurare Portage per l'utilizzo di distcc
Configurare Portage per usare distcc è molto facile. È necessario seguire questi
semplici passi per ogni computer sul quale si desidera utilizzare distcc:
Codice 2.2: Integrare distcc e Portage |
# emerge distcc
# nano -w /etc/portage/make.conf
MAKEOPTS="-jN"
FEATURES="distcc"
|
Specificare gli host da utilizzare
Per impostare la lista degli host è possibile usare distcc-config. Ecco
un esempio di alcuni host che potrebbero essere nella propria lista:
Codice 2.3: Esempio di definizione degli host |
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
|
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, si rimanda chi
fosse interessato alla documentazione di
distcc (man distcc), che include le informazioni su come eseguire distcc
tramite una connessione SSH.
Ad esempio, per impostare la riga 1 del listato precedente:
Codice 2.4: Comando di esempio per impostare gli host |
# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2
192.168.0.3"
|
Modificare /etc/conf.d/distccd secondo le proprie esigenze e
assicurarsi di impostare la direttiva --allow per usare soltanto gli host
stabiliti. Per maggiore sicurezza bisognerebbe usare anche la direttiva
--listen per passare a distcc gli indirizzi IP da ascoltare (per sistemi
connessi a diverse reti). Per ulteriori informazioni sulla sicurezza in distcc
consultare Distcc Security
Design.
Importante:
È 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 avviare il demone distcc su tutti i computer della rete:
Codice 2.5: Avvio del demone distcc |
# rc-update add distccd default
# /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 viene usato ccache bisogna mettere
distcc dopo ccache:
Codice 2.6: Configurazione del path |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
A questo punto, invece di usare make, bisogna utilizzare make -jN
(dove N è un intero). Il valore di N dipende dalla rete e dal tipo di computer
in uso per la compilazione. Si consiglia di effettuare dei test sulla
configurazione per trovare il numero che garantisce le prestazioni migliori.
3.
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 DistCC Cross-compiling
Guide.
4.
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. (Vedere le FAQ Gentoo per maggiori informazioni sul
bootstrap.) Dopo ciò, si può continuare a configurare Portage per usare distcc.
Codice 4.1: Configurazione preliminare |
# nano -w /etc/portage/make.conf
FEATURES="distcc"
MAKEOPTS="-jN"
|
Codice 4.2: Impostare il path |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
2: Installare distcc
Installare distcc:
Codice 4.3: Installare distcc |
# USE='-*' emerge --nodeps sys-devel/distcc
|
3: Configurare distcc
Per configurare distcc, eseguire distcc-config --install.
Codice 4.4: Configurazione finale di distcc |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
Adesso distcc è configurato per il bootstrap! Seguire la guida ufficiale
all'installazione ricordando di ri-emergere distcc dopo l'emerge system.
Ciò serve per assicurarsi che vengano installate tutte le dipendenze.
Nota:
Durante il bootstrap e l'emerge system distcc potrebbe non essere
utilizzato. È normale, poichè alcuni ebuild o pacchetti non funzionano bene con
distcc, quindi lo disabilitano intenzionalmente.
|
5.
Risoluzione dei Problemi
Alcuni pacchetti non usano distcc
Emergendo alcuni pacchetti, si noterà che non vengono distribuiti (e quindi non
vengono compilati in parallelo). Ciò può accadere perché il Makefile del
pacchetto non supporta le operazioni parallele, oppure perché il mantenitore
dell'ebuild le ha disabilitate intenzionalmente a causa di un problema noto.
La compilazione può fallire anche con altri pacchetti per lo stesso identico
motivo. Se dovesse capitare, segnalare un
bug.
Usare versioni differenti di GCC
Se si utilizzano versioni diverse di GCC sui propri host, si avranno sicuramente
strani problemi. Assicurarsi 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 si potrebbero avere dei problemi usando macchine di
tipo i686 insieme a macchine di altro tipo (i386, i586). Per aggirare il
problema si può eseguire export CC='gcc' CXX='c++' oppure aggiungere
il comando a /etc/portage/make.conf.
Importante:
Questa procedura ridefinisce il modo in cui agisce Portage e in futuro potrebbe
portare a strani risultati. Seguirla soltanto se si sta usando CHOST differenti
tra loro.
|
-march=native
A partire da GCC 4.3.0, il compilatore supporta l'opzione -march=native
che abilita l'autoidentificazione della CPU e delle relative ottimizzazioni che
possono essere valide per il processore sul quale è in esecuzione GCC. Questo
crea un problema con distcc in quanto permette di mescolare codici
ottimizzati per processori differenti (come AMD Athlon e Intel Pentium).
Non usare -march=native o -mtune=native nelle proprie
CFLAGS o CXXFLAGS quando si sta compilando con distcc.
6.
Gli Extra di Distcc
Monitorare distcc
Distcc contiene due monitor. Quello testuale, compilato in modo predefinito, 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 flag USE. 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.
Codice 6.1: Avvio dei monitor |
# distccmon-text N
# distccmon-gui
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui
|
Importante:
Se la propria directory di distcc è altrove, modificare opportunmente la
variabile DISTCC_DIR.
|
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|