Gentoo Logo

Distcc pour Gentoo

Table des matières :

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
(Utiliser une valeur pour N qui correspond à votre environnment.)
(Une valeur courante est 2 fois le nombre total de processeurs plus 1.)
MAKEOPTS="-jN"
(Ajouter distcc à la variable FEATURES.)
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
(D'autres méthodes existent pour définir des serveurs.)
(Veuillez consulter la page man pour plus d'informations.)
Si vous voulez aussi compiler sur la machine locale, vous devez ajouter
« localhost » à la liste des hôtes. Inversement, si vous ne voulez
pas utiliser la machine locale (ce qui est souvent le cas), omettez-le de la liste.
Sur une machine lente, utiliser le localhost peut même ralentir les choses. C'est
une bonne idée de tester les performances de la configuration.

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 (man distcc) pour de plus amples d'informations, qui inclut d'être capable d'exécuter distcc sur une connexion SSH.

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

(Ajouter distccd au niveau d'exécution par défaut.)
# rc-update add distccd default
(Démarrer le démon distcc.)
# /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}"
(Vous pouvez mettre ceci dans votre fichier ~/.bashrc ou équivalent pour que la
variable PATH soit automatiquement configurée à chaque fois que vous vous
connectez.)

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
(Ajouter distcc aux FEATURES.)
FEATURES="distcc"
(Ajouter l'option -jN à MAKEOPTS où N vaut le double du nombre de processeurs plus un.)
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

(Remplacer les host1, host2... par les adresses IP des machines.)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
Par exemple : /usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.4

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.

-march=native

Depuis GCC 4.3.0, le compilateur supporte le paramètre -march=native qui permet de détecter automatiquement le CPU et les optimisations qui valent la peine d'être activées pour le processeur sur lequel GCC s'exécute. C'est un problème pour distcc puisqu'il permet de produire du code optimisé pour différents processeurs (comme les AMD Athlon et les Intel Pentium). N'utilisez pas -march=native ou -mtune=native dans votre variable CFLAGS ou CXXFLAGS si vous compilez avec distcc.

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
  (Ou)
# distccmon-gui
Pour surveiller l'activité de Portage :
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
  (Ou)
# 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.



Imprimer

Dernière mise à jour le 14 juin 2009

Une version originale plus récente datée du 24 juillet 2012 existe.

Résumé : Ce document est un mini-guide pour utiliser distcc avec Gentoo.

Lisa Seelye
Auteur

Mike Frysinger
Correcteur

Erwin
Correcteur

Sven Vermeulen
Correcteur

Joshua Saddler
Correcteur

Tiemo Kieft
Relecteur

Gérald Fenoy
Traducteur

Bertrand Coppa
Traducteur

Donate to support our development efforts.

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