Distcc/fr

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

Si vous envisagez d'utiliser pour vous aider à préparer la chaîne des outils de compilation pour une installation de Gentoo, assurez vous de lire préalablement la section concernant l'utilisation de distcc pour l'amorçage (compilation des outils de compilation).

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.

Vérifiez que tous les systèmes utilisent la même version de binutils (eselect binutils list) ou de nombreux paquets vont échouer à l'édition de liens avec différentes erreurs telles que des relocalisations de texte.

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
Afin de mettre en place le démarrage automatique de, suivez les instructions suivantes.

OpenRC
Éditez et assurez-vous de définir la directive   pour n'autoriser que les clients auxquels vous accordez votre confiance. Pour une sécurité renforcée, utilisez aussi la directive  afin de dire au daemon  quelles adresses IP écouter (pour les systèmes multi-adresses). Des informations complémentaires sur la sécurité avec sont disponibles à l'adresse 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
Éditez le fichier afin d'ajouter les clients au format CIDR. Voici un exemple ajoutant toutes les adresses IP du bloc 192.168.1.xxx :

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.

Voici quelques exemples de définition d’hôtes. Dans la plupart des cas, des variations des lignes 1 et 2 suffisent. Cette dernière inclue la syntaxe  afin d'informer  du nombre maximal de taches à lancer sur le nœud. Plus d'informations sur la syntaxe employée aux lignes 3 et 4 sont disponibles sur le manuel de distcc.

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

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 permet également un mode « pump », en invoquant la commande. Ce mode peut réduire le temps de compilation de manière significative lorsque plusieurs fichiers sont compilés en parallèle. Cela cache les entêtes pré-traitées sur le serveur et, par conséquent, évite les téléchargements et pré-traitements répétitifs de ces fichiers d’entête.

Pour configurer un hôte pour le mode « pump », ajoutez les suffixes  à la définition des hôtes. Le mode « pump » requiert les deux options  et   (que les fichiers soient en C ou C++).

Avec 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).

Définissez les variables MAKEOPTS et FEATURES comme indiqué ci-dessous.

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.

L'utilisation de  dans la variable MAKEOPTS empêchera la création d'un nombre trop élevé de taches lorsque certain hôtes de  sont indisponibles (augmentant alors la quantité de taches simultanées sur les autres systèmes) ou lorsqu'un ebuild est configuré de façon à interdire la compilation distante (tel qu'avec gcc). Cela est accompli en refusant le démarrage de taches supplémentaires lorsque la charge du système et égale ou supérieure à la valeur de

Par exemple, lorsqu'il y à deux hôtes quadruple cœur qui exécute et que le PC local possède un processeur double cœur, la variable MAKEOPTS peut ressembler à ceci :

CFLAGS et CXXFLAGS
Lors de l’édition de, assurez vous que les variables CFLAGS et CXXFLAGS ne contiennent pas. ne distribuera pas de taches aux autres machines si  a pour valeur. Une valeur approximative de  et d’options peut être obtenue en utilisant la commande suivante :

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

Un bogue de GCC a récemment été corrigé dans l’arbre de développement de la 8.0 qui fourni un mécanisme plus fiable et succinct pour extrapoler les options appropriées pour la machine. La correction a été reportée sur les branches 6 et 7 et devrait donc être prochainement publiée. Il reste quelques manipulations à faire et un script peut être trouvé dans le repo distccflags, ou par :

Utiliser distcc avec automake
Ceci est, dans certains cas, plus facile que de configurer Portage. Il n'y a besoin que de mettre la variable  à jour pour qu'elle inclue  en face du répertoire qui contient. Prenez garde cependant: si vous utilisez, mettez alors le répertoire contenant après celui de.

Placez ceci dans le fichier de l'utilisateur, ou son équivalent, pour une variable PATH définie à chaque entrée dans sa session, ou définissez la de manière globale avec un fichier dans.

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.

Utiliser distcc pour amorcer
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.

Étape 1: configurer 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 :

Mettez aussi à jour la variable  de votre session d'installation:

Étape 2: obtenir distcc
Installez :

Étape 3: configurer 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.

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

Surveillant distcc
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:

Une astuce consiste à définir  dans les variables d'environnement:

Mettez maintenant l'environnement à jour:

Pour finir, démarrez l'application graphique:

Utiliser SSH pour les communications de distcc
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 :

Réparez les permissions de fichiers:

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 :

Il est aussi possible de définir les variables  et   de  avec la liste de valeurs indiquée plus haut.

-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

 * Résolution de  pour distcc
 * Site web de distcc