Gentoo Linux e Distcc

Contenuti:

1.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.

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 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.

Esempio 1: Installare distcc

# 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:

Esempio 2: Integrare distcc e Portage

# 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:

Esempio 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
(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:

Esempio 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"

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: È 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:

Esempio 5: Avvio del demone distcc

(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:

Esempio 6: Configurazione del path

# 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.

3.Cross-Compiling

Una nota sul 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.

Introduzione al cross-compiling 

Se vuoi provare il cross-compiling puoi riferirti a The Cross Compile HOWTO; Crossdev è deprecato.

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. Dopodichè si può continuare a configurare Portage per usare distcc.

Esempio 7: Configurazione preliminare

# 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"

Esempio 8: Impostare il path

# 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:

Esempio 9: Creare l'utente distcc

# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >>
/etc/passwd

Importante: È 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:

Esempio 10: Installare distcc

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

3: Configurare distcc 

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

Esempio 11: Configurazione finale di distcc

(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.

Nota: 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.

5.Risoluzione dei Problemi

Mozilla e Xfree 

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 Xfree 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 contemporaneamente host con hardened-gcc e non-hardened-gcc causa problemi 

Con un titolo così lungo, ogni ulteriore spiegazione è superflua. Comunque, se prevedi di usare distcc in una rete in cui alcuni host usano PaX/hardened-gcc ed altri no, avrai problemi.

Per evitare rischi dovrai organizzare il lavoro in anticipo: dovrai eseguire hardened-gcc -R sugli host che hanno PaX/hardened-gcc, oppure dovrai abilitare le protezioni PaX nel tuo kernel e lanciare emerge hardened-gcc. Sono entrambe soluzioni valide dato che offrono una buona protezione e sono trasparenti all'utente.

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.

Importante: 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.

6.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.

Esempio 12: Avvio dei monitor

# 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

Importante: Se la tua directory di distcc è altrove, modifica la variabile DISTCC_DIR in maniera opportuna.



Ultimo aggiorn.:
2005-07-01
Lisa Seelye
Autore

Mike Frysinger
Redazione

Erwin
Redazione

Sven Vermeulen
Redazione

Lars Weiler
Redazione

Tiemo Kieft
Revisione

Gilberto De Faveri
Traduzione

Massimo Canali
Revisione

Sommario:  Guida di riferimento per l'uso di distcc con Gentoo Linux.
- 2002 Gentoo.it - Domande, commenti e/o correzioni? Email gentoo-dev@gentoo.it.