Important: You are required to change your passwords used for Gentoo services and set an email address for your Wiki account if you haven't done so. See the full announcement and Wiki email policy change for more information.

Distcc

From Gentoo Wiki
Revision as of 12:11, 20 September 2013 by Jaaf (Talk | contribs)

Jump to: navigation, search
Other languages:English 100% • ‎español 100% • ‎français 87% • ‎italiano 86% • ‎한국어 98% • ‎русский 100% • ‎Türkçe 86%

Distcc est un programme conçu pour répartir les tâches de compilation à travers un réseau à des hôtes participants. Il comprend un serveur, distccd et un client, distcc. Distcc peut travailler en toute transparence avec ccache, Portage et Automake moyennant un minimum de configuration.

Si vous envisagez d'utiliser distcc pour vous aider à préparer la chaîne des outils de compilation pour une installation de Gentoo, lisez d'abord la section Utiliser Distcc pour compiler les outils de compilation.

Configuration

Dépendances

Afin d'utiliser Distcc, tous les ordinateurs sur votre réseau doivent posséder la même version de GCC. Pour être plus précis, mélanger 3.3.x (avec x variable) est accepté, mais mélanger 3.3.x avec 3.2.x peut conduire à des erreurs de compilation ou des erreurs en exécution.

Installer Distcc

Il y a quelques options dont vous devriez être conscient avec d'installer distcc.

Distcc arrive avec un surveillant graphique pour surveiller les tâches que votre ordinateur envoie à l'extérieur pour compilation. Si vous utilisez Gnome, alors mettez 'gnome' dans les options de votre variable USE. Cependant, si vous n'utilisez pas Gnome et désirez quand-même avoir le surveillant, vous devriez mettre 'gtk' dans ces options.

root # emerge --ask distcc
Important
Rappelez-vous que vous devez installer distcc sur tous les ordinateurs participants.

Configurer Portage pour l'utilisation de Distcc

Configurer Portage pour l'utilisation de distcc est simple. Exécutez les étapes suivantes sur chacun des systèmes qui devraient participer à la compilation distribuée :

root # emerge --ask distcc

Maintenant, définissez les variables MAKEOPTS et FEATURES comme indiqué ci-dessous. Pour MAKEOPTS, utilisez un nombre convenable pour votre configuration particulière. Une stratégie courante est de définir N comme étant deux fois le nombre de total de processeurs disponibles +1.

root # nano -w /etc/portage/make.conf
MAKEOPTS="-jN"
FEATURES="distcc"

Spécifier les hôtes participants

Utilisez la commande distcc-config pour définir la liste des participants. Voici un exemple de quelques hôtes qui pourraient se trouver dans votre liste :

CodeExemples de définition d'hôtes participant

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

Il y a aussi plusieurs autres méthodes pour définir les hôtes. Reportez-vous à la page de manuel pour plus de détail.

Si vous désirez compiler sur la machine locale, vous devriez mettre 'localhost' dans la liste des participants. Inversement, si vous ne voulez pas que la machine locale participe (ce qui est souvent le cas) omettez la de la liste. Sur une machine lente, utiliser localhost peut ralentir les choses. Vérifiez la performance de votre configuration.

Cela peut paraître compliqué, mais dans la plupart des cas, une variante des lignes 1 ou 2 fonctionne.

Comme la plupart des gens n'utilisent pas les lignes 3 ou 4, reportez-vous à à la documentation de distcc (man distcc) pour une information plus complète qui inclut comment exécuter distcc à travers une connexion SSH.

Par exemple, pour définir la première ligne de l'exemple précédent :

root # /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"

Éditez le fichier /etc/conf.d/distccd en fonction de vos besoins et assurez-vous de définir la directive --allow pour seulement les hôtes auxquels vous accordez votre confiance. Pour une sécurité renforcée, vous devriez utiliser aussi la directive --listen afin de dire au démon distcc quelles adresses IP écouter (pour des systèmes multi-adresses). Une information complémentaire sur la sécurité avec distcc est disponible à l'adresse Distcc Security Design .

Important
Il est important d'utiliser --allow et --listen. Lisez la page de manuel de distcc (distccd manpage) ou le document cité précédemment sur la sécurité pour en savoir plus.

Maintenant démarrez votre démon distcc sur tous les ordinateurs participants :

root # rc-update add distccd default
root #
/etc/init.d/distccd start

Configurer Distcc pour qu'il fonctionne avec Automake

Ceci est, dans certains cas, plus facile que de configurer Portage. Ce que vous avez à faire, c'est mettre votre variable PATH à jour pour qu'elle inclut /usr/lib/distcc/bin en face du répertoire qui contient gcc ( /usr/bin ). Cependant, il faut savoir que si vous utilisez ccache, vous devez placer distcc après la partie ccache :

root # export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

Vous pouvez placer ceci dans votre fichier ~/.bashrc, ou son équivalent, pour avoir une variable PATH définie à chaque entrée dans la session.

Ensuite, là où vous taperiez normalement make , vous devriez taper make -jN (où N est un entier).

Compilation croisée

La compilation croisée consiste à compiler les programmes sur une architecture pour les exécuter sur une autre architecture. C'est aussi simple que d'utiliser un Athlon (i686) pour compiler les programmes destinés à un K6-2 (i586), ou d'utiliser un Sparc pour compiler un programme destiné à un ppc. Ceci est documenté dans notre Guide de compilation croisée avec DistCC .

Utiliser Distcc pour compiler les outils de compilation

Étape 1: Configurer Portage

Démarrez votre nouvel machine avec un LiveCD de Gentoo et suivez les instructions d'installation jusqu'à la partie compiler la chaîne des outils de compilation (bootstraping). Puis configurer Portage pour l'utilisation de distcc :

root # nano -w /etc/portage/make.conf
FEATURES="distcc"
MAKEOPTS="-jN"
root # export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

Étape 2: Obtenir Distcc

Installez distcc:

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

Étape 4: Configurer Distcc

Exécutez distcc-config --install pour configurer distcc ; remplacez host* par l'adresse IP ou le nom d'hôte des nœuds participants de distcc.

root # /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."

Distcc est désormais configuré pour la compilation de la chaîne des outils de compilation ! Continuez avec l'installation officielle et n'oubliez pas de ré-installer distcc après emerge system . Ceci pour être sûr que toutes des dépendances désirées sont aussi installées.

Note
Pendant la compilation de la chaîne des outils de compilation et l'exécution de emerge system, distcc peut apparaître comme non utilisé. Ceci n'est pas surprenant dans la mesure où quelques ebuilds ne fonctionnent pas bien avec distcc et le désactivent intentionnellement.

Dépannage

Quelques paquets n'utilisent pas Distcc

Tandis que vous installez des paquets divers, vous noterez que la compilation de quelques uns d'entre-eux n'est pas distribuée (et qu'ils ne sont pas compilés en parallèle). Ceci peut arriver parce que le Makefile du paquet ne prend pas en charge les opérations en parallèle ou que le mainteneur de l'ebuild a explicitement désactivé les opérations en parallèle à cause de problèmes identifiés.

Parfois, distcc peut provoquer un échec de la compilation d'un paquet. Si cela vous arrive, rapportez-le nous.

Verisons mélangées de GCC

Si vous avez différentes versions de GCC sur vos hôtes, vous rencontrerez très probablement d'étranges problèmes. La solution est d'installer la même version de GCC sur tous les hôtes.

Des mises à jour récentes de Portage ont fait que Portage utilise ${CHOST}-gcc à la place de gcc. Ceci signifie que si vous mélangez des machines i686 avec d'autres types de machines (i386, i586), vous allez rencontrer des problèmes. Un façon de contourner cela peut être d'utiliser la commande export CC='gcc' CXX='c++' ou de la mettre dans votre fichier /etc/portage/make.conf .

Important
Faire ceci explicitement redéfinit quelques comportements de Portage et peut avoir d'étranges conséquences dans le futur. Ne faites cela que si vous utilisez des CHOSTs différents.

-march=native

Depuis GCC 4.3.0, le compilateur prend en charge le commutateur -march=native qui active la détection automatique du processeur et les optimisations qui valent la peine d'être activées pour le processeur sur lequel GCC tourne. Ceci est un problème avec distcc dans la mesure où ça autorise le mélange de code optimisés pour différents processeurs (comme AMD Athlon et Intenl Pentium). N'utilisez-pas -march=native ou -mtune=native dans les options de votre variable CFLAGS lorsque vous compilez avec distcc.

Pour connaître l'option que GCC activerait s'il était appelé avec -march=native, exécutez ce qui suit :

user $ gcc -march=native -E -v - </dev/null 2>&1 | grep cc1
/usr/libexec/gcc/x86_64-pc-linux-gnu/4.7.3/cc1 -E -quiet -v - -march=corei7-avx \
  -mcx16 -msahf -mno-movbe -mno-aes -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma \
  -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 \
  -mno-lzcnt -mno-rdrnd -mno-f16c -mno-fsgsbase --param l1-cache-size=32 \
  --param l1-cache-line-size=64 --param l2-cache-size=6144 -mtune=corei7-avx

Compléments à Distcc

Surveillants Distcc

Distcc est fourni avec deux surveillants. Le surveillant textuel est toujous compilé et est appelé distccmon-text. L'exécuter pour la première fois peut générer un peu de trouble, mais il est réellement facile à utiliser. Si vous exécutez le programme sans paramètre, il s'exécutera une fois. Cependant, si vous lui passez un nombre N, il fera une mise à jour toute les N secondes.

L'autre surveillant n'est activé que si vous avez activé les options gtk ou gnome de votre variable USE. Celui-ci est basé sur GTK+, tourne dans un environnement X et est très agréable. Pour Gentoo, le surveillant graphique a été appelé distccmon-gui pour éviter les confusions. Dans d'autres distributions, il peut être appelé distccmon-gnome.

root # distccmon-text N

ou exécutez distccmon-gui:

root # distccmon-gui

Pour surveiller l'utilisation du distcc de Portage, vous pouvez utiliser :

root # DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
root #
DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui
Important
Si votre répertoire distcc se trouve ailleurs, changez la variable DISTCC_DIR en conséquence.

Remerciements

Nous tenons à remercier les auteurs, éditeurs et traducteurs suivants pour leur contribution à ce guide :

  • Lisa Seelye
  • Mike Frysinger
  • Erwin
  • Sven Vermeulen
  • Lars Weiler
  • Tiemo Kieft
  • nightmorph
  • jaaf