Comment installer distcc?


10

J'ai lu Comment construire une chaîne d'outils GCC 4.7 pour la compilation croisée? et ont réussi à créer un programme de test simple qui fonctionne sur mon RPi.

Pour ce faire, j'ai dû exécuter arm-unknown-linux-gnueabi-gcc hello.c -o hellosur mon bureau x86 et scpl'exécutable sur mon RPi. C'est lent et compliqué. Je préfère contrôler la compilation depuis mon RPi.

J'ai lu distcc, qui peut être utilisé pour distribuer la compilation d'une machine à une autre.

Comment installer cela? J'ai à la fois des bureaux Debian / Ubuntu et Arch Linux et les deux systèmes d'exploitation installés sur des cartes SD.


J'ai attendu que quelqu'un qui n'est pas moi poste cette question. Je ne voulais vraiment pas le faire. Bon travail.
Jivings

export DISTCC_VERBOSE=1Merci pour cela ! C'est ce que je recherche pour déboguer ma chaîne d'outils distcc

Réponses:


12

Ces instructions supposent que vous disposez d'un compilateur croisé fonctionnel sur l'esclave. Veuillez lire Comment construire une chaîne d'outils GCC 4.7 pour la compilation croisée? si ce n'est pas le cas. Il est également utile d'avoir makeinstallé sur le maître.

Installation

Tout d'abord, nous devons installer distcc. Nous utiliserons les packages prédéfinis fournis par les systèmes de gestion des packages des systèmes d'exploitation, mais vous êtes libre d'installer à partir des sources si vous le souhaitez!

Debian

sudo apt-get install distcc

Cambre

sudo pacman -S distcc

Configuration

Esclave - Debian / Ubuntu

TODO: Est-ce la même chose pour Arch? Sinon, comment configurer Arch?

Nous devons ajuster les paramètres /etc/default/distcc. Dans votre éditeur préféré, ouvrez-le en tant que root; J'ai couru sudo vim /etc/default/distcc.

Vous devez changer STARTDISTCC, ALLOWEDNETSet LISTENER. En supposant que votre maître et votre esclave se trouvent sur le même sous-réseau et que ce sous-réseau soit 192.168.0.0/24, ils doivent être définis sur

STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"

En outre, vous devez ajouter le chemin d'accès à votre compilateur. Je l'ai fait en ajoutant la ligne suivante

PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin

Remarque Le démon sur l'esclave s'exécutera en tant distccdqu'utilisateur, assurez-vous donc que les autorisations appropriées sont configurées sur vos exécutables; J'ai donné à tout le monde la permission d'exécuter.

Exécutez le démon - il serait normalement démarré au démarrage - en exécutant

sudo service distcc start

Maître - Arch

TODO: Est-ce la même chose pour Debian? Sinon, comment configurer Debian?

Ouvrez ~/.distcc/hostsdans votre éditeur de texte préféré et ajoutez l'adresse IP des esclaves. Mon hostsdossier était composé d'une seule ligne, qui se lisait 192.168.0.22.

Remarque Il peut être judicieux d'attribuer une adresse IP statique à votre esclave, sinon vous devrez modifier ce fichier chaque fois que l'adresse IP change.

Utilisation

Tout va bien, vous devriez pouvoir utiliser distcc tout simplement. Par exemple, pour compiler hello.cà hello.o, terme

distcc arm-unknown-linux-gnueabi-gcc    -c -o hello.o hello.c

Exemple: Bonjour tout le monde!

J'ai mis en place un exemple simple dans mon répertoire personnel, composé de 2 fichiers.

# file: Makefile
hello.o: hello.c
hello: hello.o

# file: hello.c
#include <stdio.h>

int main() {
  printf("Hello World!\n");
  return 0;
}

L'exécution make hellose compilera localement; vous devez d'abord le faire comme un test rapide. Allez, je vais attendre.

Running make hello CC="distcc arm-unknown-linux-gnueabi-gcc"exécutera une compilation distribuée.

Remarque Le prétraitement et la liaison se produisent toujours sur le RPi.

Débogage

Il m'a fallu un certain temps pour que cela fonctionne correctement, et le meilleur outil de débogage que j'ai trouvé était une simple variable d'environnement. Si vous

export DISTCC_VERBOSE=1

le distccclient produira des charges d'informations utiles.

Ceci est un long post, donc tous les commentaires seront reçus avec gratitude. J'espère que je me suis souvenu de toutes les étapes!


Excellente réponse. Je vais mettre ceci en signet pour mon développement RPi.
Jivings

@AlexChamberlain Distcc prend désormais en charge le "mode pompe" qui lui permet également de distribuer le prétraitement.
teraquendya

@teraquendya En effet, je n'ai pas encore eu le temps de publier des détails à ce sujet. Je veux m'assurer que j'ai tout bien sans le mode pompe d'abord.
Alex Chamberlain
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.