Gentoo Logo

Documentazione Distcc per Gentoo

Indice:

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
(Impostare N ad un numero adeguato alla propria 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 è 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
(Esistono molti altri metodi per impostare gli host.
Vedere il man di distcc per ulteriori informazioni.)
Se si desidera compilare anche in locale, bisogna aggiungere
'localhost' all'elenco degli host. Al contrario, se non lo si desidera (che è la
scelta più diffusa), non aggiungere nulla all'elenco. Su macchine poco prestanti
la compilazione in locale può rallentare parecchio il sistema. Ricordarsi 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, 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

(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 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}"
Si può aggiungere questa riga a .bashrc, o all'equivalente file di
configurazione della shell in uso, per impostare automaticamente il PATH ogni
volta che si effettua il log in

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
(Aggiungere distcc a FEATURES)
FEATURES="distcc"
(Modificare MAKEOPTS con -jN, dove N rappresenta il numero dei processori aumentato di 1)
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

(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! 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
(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 propria directory di distcc è altrove, modificare opportunmente la variabile DISTCC_DIR.



Stampa

Aggiornato il 24 luglio 2012

La versione originale di questo documento non è più mantenuta

Oggetto: Guida di riferimento per l'uso di distcc con Gentoo Linux.

Lisa Seelye
Autore

Mike Frysinger
Redazione

Erwin
Redazione

Sven Vermeulen
Redazione

Lars Weiler
Redazione

Tiemo Kieft
Revisione

Joshua Saddler
Redazione

Gilberto De Faveri
Traduzione

Massimo Canali
Traduzione

Cristiano Chiucchiolo
Traduzione

Luigi 'Comio' Mantellini
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.