Distcc pour Gentoo
1.
Introduction
Qu'est-ce que distcc ?
Distcc est un programme conçu pour distribuer les tâches de compilation entre
plusieurs machines en réseau. Il est composé d'un serveur, distccd, et
d'un programme client, distcc. Distcc, après une petite étape de
configuration, peut fonctionner de façon transparente avec ccache, Portage et automake.
Utiliser distcc lors de l'installation de Gentoo
Si vous comptez utiliser distcc pour accélérer l'installation de Gentoo,
veuillez consulter la section Utiliser distcc pour
l'installation plus loin dans ce document.
2.
Installation
Dépendances
Pour utiliser distcc, tous vos ordinateurs doivent utiliser la même version du
compilateur GCC. Plusieurs versions 3.3.x avec différentes valeurs pour
x fonctionneront, mais, si vous mélangez des versions 3.3.x et 3.2.x,
vos programmes pourraient ne pas se compiler ou contenir des erreurs à
l'exécution.
Installation de distcc
L'installation de distcc est vraiment simple. Il y a néanmoins quelques options
que vous devriez connaître.
Distcc est fourni avec deux interfaces graphiques qui permettent la supervision
des tâches que votre ordinateur envoie pour la compilation. Si vous utilisez
Gnome, alors il vous suffit d'ajouter gnome à vos options USE.
Cependant, si vous n'utilisez pas Gnome et que vous souhaitez néanmoins avoir
un outil de supervision, alors vous pouvez ajouter gtk à vos options
USE.
Exemple de code 2.1 : Installer distcc |
# emerge distcc distcc-config
|
Important :
N'oubliez pas que vous devez installer distcc sur toutes les machines
participantes.
|
Configurer Portage pour qu'il utilise distcc
Configurer distcc est très simple avec Portage. Sur chaque ordinateur où vous
voulez utiliser distcc, suivez simplement les étapes suivantes :
Exemple de code 2.2 : Intégrer distcc à Portage |
# emerge distcc
# nano -w /etc/make.conf
MAKEOPTS="-jN"
FEATURES="distcc"
|
Définir les hôtes à utiliser
Ensuite, vous devez définir quels sont les serveurs que vous voulez utiliser.
Pour ce faire, vous pouvez utiliser la commande distcc-config pour créer
la liste des serveurs. Voici un exemple de la définition de quelques serveurs
qui pourraient se trouver dans votre liste :
Exemple de code 2.3 : Exemples de liste de serveurs |
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
|
Cela peut sembler compliqué, mais dans la plupart des cas, une variante de la
ligne 1 ou 2 suffira.
Étant donné que la plupart des gens n'utiliseront pas les lignes 3 et 4, je
vous prierai de vous référer à la documentation de distcc
pour de plus amples d'informations.
Un exemple d'utilisation de la commande pour ajouter des serveurs (pour la
ligne 1) :
Exemple de code 2.4 : Exemple de commande pour ajouter des serveurs |
# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"
|
Ensuite, modifiez le fichier /etc/conf.d/distccd en fonction de
votre environnement et n'oubliez pas l'option --allow qui permet de
n'autoriser l'accès qu'aux machines que vous connaissez. De plus, vous devriez
utiliser l'option --listen pour indiquer au démon distcc sur quelle
adresse IP il doit répondre aux demandes de compilation (surtout sur les
systèmes qui ont plusieurs cartes réseau). Vous trouverez plus d'information
dans le Distcc Security
Design.
Important :
Il est important d'utiliser --allow et --listen. Veuillez lire le manuel de
distccd ou le document au sujet de la sécurité cité ci-dessus pour plus
d'informations.
|
Ensuite, lancez le démon distcc sur chaque machine :
Exemple de code 2.5 : Démarrer le démon distcc |
# rc-update add distccd default
# /etc/init.d/distccd start
|
Configurer distcc pour fonctionner avec automake
C'est encore plus simple que la mise en place avec Portage. Il vous suffit de
modifier votre variable d'environnement PATH pour y insérer
/usr/lib/distcc/bin avant le chemin où se trouve gcc
(/usr/bin). Cependant, si vous utilisez ccache, prenez garde à
mettre le chemin de distcc après celui de ccache, ce qui se fait de la façon
suivante :
Exemple de code 2.6 : Configurer votre PATH |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Ceci fait, au lieu de lancer make, vous devez utiliser make -jN
(où N est un entier). Une valeur sûre pour N varie selon votre réseau et le
type d'ordinateurs que vous utilisez pour compiler. Testez vos propres valeurs
afin de trouver la plus appropriée.
3.
La compilation croisée (« Cross-Compiling »)
La compilation croisée utilise un certain type d'architecture afin de générer
des programmes pour un autre type d'architecture. Ceci peut être aussi simple
que d'utiliser un Athlon (i686) pour générer des programmes pour un K6-2 (i586)
ou d'utiliser une Sparc pour compiler un programme pour un ppc. Veuillez
consulter notre Guide de
compilation croisée avec DistCC pour plus d'informations.
4.
Utiliser distcc pour l'installation (« bootstrap »)
Étape 1 : configurer votre nouvelle machine
Vous devez démarrer votre nouvelle machine avec le LiveCD de Gentoo et suivre
toutes les étapes
jusqu'au « bootstrap ». Vous trouverez quelques détails sur cette
méthode qui n'est plus recommandée dans notre FAQ. Procédez ensuite à la petite
installation préliminaire qui suit sur votre nouvelle machine.
Exemple de code 4.1 : Configuration préliminaire |
# nano -w /etc/make.conf
FEATURES="distcc"
MAKEOPTS="-jN"
|
Étape 2 : obtenir distcc
Installer distcc :
Exemple de code 4.2 : Installer distcc sur la nouvelle machine |
# USE='-*' emerge --nodeps sys-devel/distcc
|
Étape 3 : configurer distcc
Ensuite, utilisez la commande distcc-config --install pour configurer
distcc :
Exemple de code 4.3 : Configuration finale de distcc |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
Distcc devrait maintenant être configuré pour le « bootstrap » !
Reprenez le guide officiel d'installation où vous l'avez laissé et n'oubliez
pas d'exécuter à nouveau emerge pour distcc après la commande emerge
system.
Note :
Veuillez remarquer que distcc ne sera pas utilisé pour toutes les compilations
pendant le « bootstrap » et le emerge system. Son utilisation
a été volontairement désactivée dans certains paquets qui ne peuvent pas être
compilés via distcc.
|
5.
Problèmes fréquents
Certains paquets n'utilisent pas Distcc
Parfois, vous noterez que vos compilations de paquets ne sont pas toutes
distribuées (et en effet pas créées en parallèle). La raison est soit que le
fichier make du paquet ne supporte pas la compilation en parallèle, soit que
les développeurs des ebuilds ont désactivé la possibilité de génération en
parallèle, car ces paquets sont connus pour poser des problèmes.
Cela veut dire que parfois distcc peut entraîner l'échec d'une compilation. Si
cela se produit, veuillez le signaler via http://bugs.gentoo.org.
Mélange de diverses versions de GCC
Si vous avez différentes versions de GCC sur vos serveurs, d'étranges problèmes
surviendront. La solution est de vous assurer que tous les serveurs ont la même
version de gcc.
Des versions récentes de Portage utilisent ${CHOST}-gcc au lieu de
gcc. Cela signifie que si vous utilisez des machines i686 avec d'autres
telles que des i386 ou i586, vous recontrerez des problèmes. Une solution
semble être d'utiliser export CC='gcc' CXX='c++' ou de le définir dans
le fichier /etc/make.conf.
Important :
Faire ceci redéfinit explicitement le comportement de Portage et cela pourrait
donner des résultats étranges plus tard. Ne faites ceci que si vous mélangez
des CHOST.
|
6.
Les suppléments de distcc
Les outils de supervision distcc
Distcc est fourni avec deux outils de supervision. Une version qui fonctionne
en mode texte est automatiquement installée ; elle s'appelle
distccmon-text. À la première exécution, l'outil peut paraître déroutant
mais il est en fait très simple d'utilisation. Si vous l'exécutez sans
paramètre, il s'exécutera une seule fois. Cependant, si vous lui passez un
nombre N en argument, il affichera les informations toutes les N secondes.
L'autre moniteur est seulement installé si vous utilisez gtk ou
gnome dans vos options USE. Celui-ci est en mode graphique (comme
vous l'aviez sans doute deviné), est basé sur la bibliothèque GTK+ et est
vraiment joli. Pour Gentoo, ce moniteur se nomme distccmon-gui pour
moins de confusion. Ailleurs, il est parfois appelé distccmon-gnome.
Exemple de code 6.1 : Démarrer la supervision |
# distccmon-text N
# distccmon-gui
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui
|
Important :
Si le répertoire de distcc est ailleurs sur votre système, définissez la
variable DISTCC_DIR en conséquence.
|
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|