Distcc/fr

Distcc is a program designed to distribute compiling tasks across a network to participating hosts. It is comprised of a server,, and a client program,. Distcc can work transparently with ccache, Portage, and Automake with a small amount of setup.

When planning on using to help bootstrap a Gentoo installation, make sure to read Using distcc to bootstrap.

Installation
Avant de configurer, commençons par nous intéresser à l'installation de sur tous les hôtes.

Dépendances communes à tous les hôtes
Afin d'utiliser, 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.

Emerge
Distcc comprend un utilitaire de surveillance graphique des tâches de compilation externes envoyées par un ordinateur. La présence de celui-ci est contrôlée par l'option  de la variable.

Une fois la variable USE configurée, installez le packet.

Service
In order to have started automatically follow the next set of instructions.

OpenRC
Edit and make sure to set the   directive to allow only trusted clients. For added security, use the  directive to tell the  daemon what IP to listen on (for multi-homed systems). More information on security can be found at Distcc security notes.

L'exemple suivant autorise les clients distcc tournant sur  et   à se connecter au serveur  local.

Maintenant démarrez votre daemon sur tous les ordinateurs participants :

systemd
Edit the file to add the allowed clients in CIDR format. Matching the example will add all IP addresses in the 192.168.1.xxx range:

Recharger les nouvelles configurations:

Activer le démarrage automatique de et démarrer le service :

Spécification des hôtes participants
Utilisez la commande pour définir la liste des participants.

The following is an example list of host definitions. In most cases, variants of lines 1 and 2 suffice. The latter uses the  syntax to inform  about the maximum amount of jobs to be launched on this node. More information about the syntax used in lines 3 and 4 can be found in the distcc manual page.

There are also several other methods of setting up hosts. See the man page  for more details.

Si la machine locale doit elle aussi compiler, indiquez  dans la liste des hôtes participants. À l'inverse, si la machine locale ne participe pas à la compilation (ce qui est souvent le cas), omettez la de la liste. Sur une machine lente, utiliser  peut ralentir les choses. Assurez vous de la performance de votre configuration en effectuant des tests.

Configurons afin d'utiliser les hôtes mentionnés par la première ligne de l'exemple :

Distcc also supports a pump mode, by invoking the command. This may significantly reduce build time when multiple files are compiled in parallel. It caches preprocessed headers on the server side and, as a result, gets rid of repeated uploading and preprocessing of these header files.

To configure a host for pump mode, add the  suffix to the hosts definitions. Pump mode requires both  and   flags (regardless of the files being C or C++).

With Portage
Il est aisé de configurer Portage pour qu'il utilise. Il suffit pour cela d'activer la fonctionnalité et de choisir une valeur décente pour le nombre de taches de compilation simultanées (étant donné que  augmente le nombre de ressources disponible pour la compilation).

Set the MAKEOPTS variable and FEATURES variable as shown below.

Une stratégie courante consiste à
 * mettre pour valeur de  le double du nombre "total" (locaux + distants) de cœurs du processeur + 1, et
 * mettre pour valeur de  le nombre de cœurs du processeur local.

The use of  in the MAKEOPTS variable will prevent spawning too many tasks when some of the  cluster hosts are unavailable (increasing the amount of simultaneous jobs on the other systems) or when an ebuild is configured to disallow remote builds (such as with gcc). This is accomplished by refusing to start additional jobs when the system load is at or above the value of.

For instance, when there are two quad-core host PCs running and the local PC has a dual core CPU, then the MAKEOPTS variable could look like this:

CFLAGS and CXXFLAGS
While editing the file, make sure that it does not have   in the CFLAGS or CXXFLAGS variables. will not distribute work to other machines if  is set to. An approximate set of  and machine flags can be obtained by running the following command:

Pour plus d'information, consultez Résolution de  pour distcc

A GCC bug has recently been fixed in the 8.0 dev tree which facilitates a more reliable and succinct mechanism for extrapolating appropriate machine flags. The fix has been backported to the 6 and 7 branches and should be released fairly soon. Some processing is still required and a script can be found in the distccflags repo, or via wget:

With automake
This is, in some cases, easier than the Portage setup. All that is needed is to update the PATH variable to include in front of the directory that contains. However, there is a caveat. If is used, then put the  location after the  one:

Put this in the user's or equivalent file to have the PATH set every time the user logs in, or set it globally through an  file.

Au lieu de simplement appeler, ajoutez s'y un paramètre d'invocation  (où   est un entier naturel). La valeur de  dépend du réseau et du type des ordinateurs utilisés pour la compilation. Une approche heuristique pour trouver la bonne valeur a été donné plus tôt dans cet article.

To bootstrap
Utiliser pour amorcer (c'est à dire construire une chaîne d'outils avant d'installer le reste du système) requiert quelques étapes supplémentaires.

Step 1: Configure Portage
Démarrez la nouvelle machine avec un LiveCD de Gentoo Linux et suivez les instructions d'installation tout en tenant compte des instructions sur le démarrage présentes dans la FAQ de Gentoo comme source d'information sur l'amorçage. Configurez ensuite Portage pour utiliser :

Update the PATH variable in the installation session as well:

Step 2: Getting distcc
Installez :

Step 3: Setting up distcc
Exécutez la commande pour configurer distcc; remplacez les   de l'exemple par les adresses IP ou les noms d'hôte des nœuds participant.

Distcc est maintenant configuré pour l’amorçage ! Continuez avec les instructions d'installation officielles et n'oubliez pas de lancer  après avoir fait. Cela permet d'être sûr que toutes les dépendances nécessaires sont installées.

Extras
L'application a quelques fonctionnalités supplémentaires et des outils pour aider à travailler dans un environnement.

Monitoring utilities
Distcc arrive avec deux utilitaires de surveillance. L'un, à base de texte, est toujours compilé et est appelé. Le lancer pour la première fois peut paraître confus, mais il est en fait facile à utiliser. Si le programme est utilisé sans paramètre, il ne s'actionnera qu'une seule fois. Cependant, s'il lui est passé un nombre, il se mettra à jour toutes les   secondes (avec   l'argument qui lui a été passé).

L'autre utilitaire de surveillance n'est activé qu'à travers l'option  de la variable. Celui-ci est basé sur GTK+, tourne dans un environnement X et est très agréable. Pour Gentoo, le surveillant graphique a été renommé pour éviter la confusion. Il était originellement appelé.

Pour surveiller l'utilisation de par Portage:

A trick is to set DISTCC_DIR in environment variables:

Mettez maintenant l'environnement à jour:

Pour finir, démarrez l'application graphique:

SSH for communication
Configurer distcc via SSH demande d'éviter quelques pièges. Tout d'abord, générez une paire de clés SSH sans définir le mot de passe. Restez conscient du fait que Portage compile les programmes en tant que l'utilisateur Portage (ou en tant que root si  n'est pas défini). Le dossier home de l'utilisateur Portage est, ce qui veut dire que les clés doivent être stockées dans.

Ensuite, créez une section pour chacun des hôtes dans le fichier de configuration SSH :

Envoyez la clef publique à chaque nœud de compilation:

Assurez-vous également que chaque hôte est disponible dans le fichier :

Fix the file ownership as follows:

Pour mettre en place les hôtes  et , lancez:

Notez le signe  (symbole @) qui spécifie les hôtes SSH à distcc.

Pour finir, indiquez à quel binaire SSH utiliser"

Il n'est pas nécessaire de lancer le script d'initialisation (initscript) sur les hôtes lorsque communique via SSH.

Testing
To test, write a simple Hello distcc program and run in verbose mode to see if it communicates properly.

Next, turn on verbose mode, compile the program using and link the generated object file into an executable:

There should be a bunch of output about finding its configuration, selecting the host to connect to, starting to connect to it, and ultimately compile. If the output does not list the desired hosts, check the configuration.

Finally, ensure the compiled program works properly. To test each host, enumerate each compile host in the hosts file.

Dépannage
Si un problème apparaît lors de l'utilisation de, cette section pourra peut être aider à le résoudre.

ERROR: failed to open
Au jour du 22 Janvier 2015, la création du fichier dans  echoue lors de l'emergement. Ceci semble n'affecter que la version 3.1-r8 de distcc. Ce bug est en cours de correction (plus plus d'information, voir ). Il est possible de contourner le problème en créant manuellement le fichier de log, lui assigner un propriétaire convenable et redémarrer le daemon de distcc.

Continuez par mettre à jour le chemin de présent dans le fichier de configuration de   afin de pointer vers le dossier  créé dans l’étape précédente.

Pour finir, redémarrez le service distccd:

Quelques paquets n'utilisent pas distcc
Lorsque certains paquets sont installés, les utilisateurs remarqueront que la compilation de certain d'entre-eux n'est pas répartie (et ils ne sont pas compilés en parallèle). Ceci peut survenir du fait que le du paquet ne prenne pas en charge les opérations en parallèle, ou que le mainteneur du ebuild les ai explicitement désactivées suite à un problème connu.

Parfois peut faire échouer la compilation d'un paquet. Si cela arrive, ayez s'il vous plaît l’amabilité de le rapporter.

Versions mélangées de GCC
Si l'environnement héberge plusieurs versions différentes de GCC, il est probable que des problèmes étranges se produisent. La solution est alors de faire en sorte que tous les hôtes aient la même version de GCC.

De récentes mises à jour de Portage ont fait que Portage utilise  (tiret gcc) au lieu de. Ceci veut dire que si des machines i686 sont mélangées avec d'autres types (i386, i586), des soucis de compilation se présenteront. Un contournement à cela peut consister à lancer :

It is also possible to set the CC and CXX variables in to the values list in the command above.

-march=native
À partir de GCC 4.3.0, le compilateur prend en charge l'option, qui active l’auto-détection des processeurs et les optimisations qui valent la peine d’être activées sur le processeur faisant tourner GCC. Cela pose un problème lors de l'utilisation de, car cela engendre le mélange de codes optimisés pour différents processeurs. Par exemple, faire tourner avec   sur un réseau de nœuds contenant un système utilisant un AMD Athlon et un système utilisant un Intel Pentium mélangera du code compilé sur chacun des hôtes. Une partie du code compilé sera alors optimisée pour AMD Athlon tandis qu'une autre sera optimisée pour Intel Pentium.

Prenez garde à cette avertissement:

See the CFLAGS and CXXFLAGS section and Inlining  for distcc for more information.

Get more output from emerge logs
It is possible to obtain more logging by enabling verbose mode. This is accomplished by adding DISTCC_VERBOSE to :

The verbose logging can then be found in.

Keep in mind that the first invocation visible in  isn’t necessary the first  call during a build process. For example a build server can get a one-minute backoff period during the configuration stage when some checks are performed using a compiler ( sets a backoff period when compilation on a remote server failed, it doesn’t matter whether it failed on local machine or not).

Dig into the directory to investigate such situations. Find other logs, or call explicitly from within the working directory.

Another interesting variable to use is DISTCC_SAVE_TEMPS. When set, it saves the standard output/error from a remote compiler which, for Portage builds, results in files in the directory.

Articles connexes

 * Le Guide de la compilation croisée avec distcc explique comment utiliser une architecture pour compiler des programmes pour une autre architecture avec . Cela peut simplement concerner l'utilisation d'un Athlon (i686) pour compiler un programme destiné à un K6-2 (i586), ou l'utilisation d'un SPARC pour compiler un programme destiné à un PowerPC.

Ressources externes

 * Inlining  for distcc
 * Distcc homepage