La documentation de Distcc pour Gentoo Lisa Seelye Gérald FENOY 1.2.4 15 octobre 2003 Ce document sert de mini-guide pour utiliser distcc avec Gentoo. Introduction
Qu'est-ce que distcc ?

Distcc est un programme conçu pour distribuer les tâches de compilation au travers d'un réseau de machines qui participent. Il est composé d'un serveur, distccd et d'un programme client, distcc. Distcc, après une petite configuration, peut fonctionner de façon transparente avec ccache et Portage.

Installation
Dépendances
>=sys-apps/portage-2.0.46-r11
Distcc-2.11 and on require >=sys-apps/portage-2.0.49-r6
>=sys-devel/gcc-config-1.3.1
sys-apps/shadow
Lorsque vous utilsez gtk dans vos drapeaux USE, distcc a les dépendances optionnelles suivantes (comme pour la version 2.8 et supérieures jusqu'à 2.11)
>=x11-libs/gtk+-2.2.1
>=sys-apps/portage-2.0.49-r6
>=sys-devel/gcc-config-1.3.1
sys-apps/shadow
Dans cette version vous pouvez choisir entre une interface Gnome ou GTK pour le moniteur de supervision, ils ont les dépendances supplémentaires suivantes
Pour GTK:
>=x11-libs/gtk+-2.0.0
>=gnome-base/libglade-2.0.0
x11-libs/pango
Pour Gnome:
>=x11-libs/gtk+-2.0.0
>=gnome-base/libglade-2.0.0
x11-libs/pango
>=gnome-base/libgnomeui-2.0.0.0
>=gnome-base/libgnome-2.0.0
Installation de Distcc

L'installation de Distcc est vraiment simple. Simply set your USE flags and emerge distcc. Il y a néamoins quelques options que vous devriez connaître.

Distcc est fourni avec deux interfaces graphiques qui permettent la supervision des tâches que votre ordinateur envoi pour la compilation. Si vous utilisez Gnome alors il vous suffit d'ajouter 'gnome' à vos drapeaux USE. Cependant si vous n'utilisez pas gnome et que souhaitez néamoins avoir un outil de supervision alors vous pouvez ajouter 'gtk' à vos drapeaux USE.

Configurer Portage pour qu'il utilise Distcc

Configurer distcc pour l'utiliser avec portage est une chose vraiment aisée. Sur chaque ordinateur où vous voulez utiliser distcc suivez simplement les étapes suivantes :

# emerge distcc
# nano -w /etc/make.conf
Si vous utilisez distcc-2.11.1 ou supérieure avec >=portage-2.0.49-r6, tout ce que vous aurez à faire c'est de définir la liste de vos serveurs (allez au prochain bloc de code), modifiez MAKEOPTS dans /etc/make.conf, est ajoutez 'distcc' à vos FEATURES toujours dans (le même fichier) /etc/make.conf. Éditez vs drapeaux FEATURES pour y inclure "distcc" Vous devriez également décommenter la ligne qui content la variable PORTAGE_TMPDIR dans /etc/make.conf. Affectez DISTCC_DIR=${PORTAGE_TMPDIR}/portage/.distcc qui se trouve près de la fin du fichier

Ensuite vous devez définir quels sont les serveurs que vous voulez utiliser. Pour ce faire vous pouvez utiliser la commande distcc-config afin de créer la liste des serveurs. Voici un exemple de la définition de quelques serveurs qui pourraient se trouver dans votre liste :

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

ela peut sembler compliqué, mais dans la plupart des cas une variante des lignes 1 ou 2 suffira. Voici une explication de chaque lignes : la ligne 1 représente juste une liste de serveurs, délimités par un espace, qui utiliseront les options par défaut. La ligne 2 est une liste de serveurs qui indique le nombre maximum d'opérations, au moyen de l'option /N, à envoyer à ce serveur. Etant 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) :

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

L'étape finale pour intégrer distcc à portage consiste en la réouverture de votre fichier /etc/make.conf et en l'édition de la ligne qui contient MAKEOPTS pour y mettre -jN (où N est un entier). Typiquement vous placerez ici le nombre total des processeurs présents dans votre réseau plus un.

# nano -w /etc/make.conf
MAKEOPTS=-jN
N'oubliez pas de lancer le démon distcc ! avec la commande : /etc/init.d/distccd start
Configurer Distcc pour fonctionner avec Automake

Ceci est dans dans certain cas bien plus simple que la mise en place avec Portage. Ce que vous devez faire c'est mettre à jour 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, prennez garde à mettre le chemin de distcc après celui de ccache . Ce qui se fait de la façon suivante :

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

Enfin, pour les compilations où vous utilisiez make, vous devrez utiliser à présent : make -jN (où N est un entier). Une valeur sûre à utiliser pour N varie suivant votre réseau et le type d'ordinateurs que vous utilisez pour compiler. Pour ma part, j'ai un ordinateur à double processeur un P3 et un K6-2/400 qui compilent tout pour mon ordinateur de bureau (un Athlon Thunderbird 1200MHz), j'utilise -j5. Testez vos propres valeurs afin de trouver celle appropriée.

La compilation croisée (Cross-Compiling)
Une note sur la compilation croisée

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 créant un programme pour un ppc.

Une note personnelle sur la compilation croisée

J'aimerai être capable de prendre part à l'effort accompli par Gentoo pour la compilation croisée, mais je n'ai pas de machine d'un type différent des x86. Je peux créer des choses qui fonctionnent en théorie, mais je dois relayer à d'autres personnes les tests de ce que j'ai créé. Cela fonctionne jusqu'à un certain point mais c'est dur. ;-)

Dans un futur proche j'espère acquérir une Sparc et y mettre une gentoo.

Utiliser distcc pour l'amorçage (Bootstrap)
Étape 1: configuration sur votre nouvelle bécanne

Ensuite, vous devrez démarrer votre nouvelle bécanne avec le LiveCD de Gentoo et suivre toutes les étapes pécédentes jusqu'à l'amorçage (bootstrapping). Procédez alors à la petite installation préliminaire, qui suit, sur votre nouvelle bécanne.

Ici nous ajoutons distcc aux FEATURES
# nano -w /etc/make.conf
Ajouter "distcc" à FEATURES
Modifiez MAKEOPTS dans /etc/make.conf pour y affecter -jN (comme décrit précédemment)

Ensuite ajoutez l'utilisateur distcc à votre fichier /etc/passwd:

# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >>/etc/passwd
N'oubliez pas le `>>'
Étape 2: obtenir Distcc

Ensuite vous voudrez publier la commande suivante dans le chroot sur la nouvelle bécanne

# emerge --nodeps distcc
Étape 3: configurer Distcc lui-même

Maintenant configurez distcc lui-même...

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

distcc devrait maintenant être configuré pour l'amorçage (bootstrap) ! Continuez avec le guide officiel d'installation, et n'oubliez pas de re-emerger distcc après l'emerge system.

Problèmes fréquents
Mozilla et Xfree

Lors de divers emerges, vous noterez qu'ils ne sont pas tous distribués (et en effet pas créés en parallèle). C'est la faute des développeurs des ebuilds de Mozilla et Xfree qui ont désactivé la possibilité de génération en parallèle car ils sont connus pour poser des problèmes. Ceci n'est pas necessairement un problème de distcc.

Cela ne veut pas dire que parfois distcc entrainera l'echec d'une compilation.

Un mélange de serveurs hardened-gcc et de non-hardened-gcc sera défectueux

Avec un aussi long titre toute explication est presque hors de propos. Cependant, si vous envisagez d'utiliser distcc à travers des serveurs qui ont le PaX/hardened-gcc avec d'autres qui ne l'ont pas, vous allez avoir des problèmes.

La solution requiert un peu de prévoyance de votre part; vous devez exécuter hardened-gcc -R sur le serveur qui possède PaX/hardened-gcc, ou vous devez activer les protections PaX dans votre noyau et exécuter emerge hardened-gcc. Les deux sont de bonnes solutions du fait que la plupart des protections offertes par ces deux paquets sont bonnes et sont transparentes pour l'utilisateur.

Mélange de divers versions de GCC

Si vous avez différentes versions de GCC sur vos serveurs, il y aura probablement d'étranges problèmes. La solution est de s'assurer que tout les seveurs ont la même version de gcc.

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é, il s'appelle distccmon-text. À la première exécution il 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 seul fois. Cependant, si vous lui passez en argument un nombre N il réaffichera les informations toutes les N secondes.

L'autre moniteur est seulement installé si vous utilisez gtk ou gnome dans vos drapeaux USE. Celui-ci est en mode graphique (comme vous l'aviez sans doute deviné) et est basé sur la librairie GTK+, il est vraiment joli.

Mise en garde pour utiliser ces programmes : si vous souhaitez superviser tout les emerges, vous devez lancer les moniteurs de supervision de la façon suivante :

# DISTCC_DIR=/path/to/distccdir distccmon-text N
OU vous pouvez lancer le superviseur graphique ...
# DISTCC_DIR=/path/to/distccdir distccmon-gnome
Si vous utilisez Portage et que vous avez utilisé l'exemple précédent, l'affectation devra être DISTCC_DIR=/var/tmp/portage/.distcc. Si vous n'utilisez pas portage vous n'avez pas à spécifier de valeur pour DISTCC_DIR (i.e. lancez juste distccmon-text N).
Futurs plans pour Distcc et Gentoo
distcc-subnetscan

distcc-subnetscan est un programme perl en cours de développement qui sera capable de scanner un réseau de serveurs qui ont un démon distcc participant. Il sera également capable d'examiner si le démon en question se conformerais à un arrangement spécifique du CHOST pour faciliter la compilation croisée.

Le script perl est maintenu ici jusqu'à ce qu'un meilleur endroit soit trouvé.

distcc-config

distcc-config, l'outil de configuration de l'espace utilisateur n'est plus à jour. Il sera bientôt réecrit pour être utilisé avec la version courrante de distcc