Wie installiere ich distcc?

10

Ich habe gelesen, wie man eine GCC 4.7-Toolchain für das Cross-Compilieren erstellt. und haben erfolgreich ein einfaches Testprogramm erstellt, das auf meinem RPi funktioniert.

Dazu musste ich arm-unknown-linux-gnueabi-gcc hello.c -o helloauf meinem x86-Desktop und scpder ausführbaren Datei auf meinem RPi laufen. Das ist langsam und mühsam. Ich würde die Kompilierung lieber von meinem RPi aus steuern.

Ich habe darüber gelesen distcc, wie die Kompilierung von einem Computer auf einen anderen verteilt werden kann.

Wie installiere ich das? Ich habe sowohl Debian / Ubuntu- als auch Arch Linux-Desktops und beide Betriebssysteme auf SD-Karten installiert.

Alex Chamberlain
quelle
Ich habe auf jemanden gewartet, der nicht ich bin, um diese Frage zu stellen. Ich wollte es wirklich nicht tun. Gute Arbeit.
Jivings
export DISTCC_VERBOSE=1Danke dafür ! Es ist das, wonach ich suche, um meine distcc-Toolchain zu debuggen

Antworten:

12

Diese Anweisungen setzen voraus, dass Sie einen funktionierenden Cross-Compiler auf dem Slave haben. Lesen Sie Wie erstelle ich eine GCC 4.7-Toolchain für das Cross-Compilieren? wenn nicht. Es ist auch nützlich, makeauf dem Master installiert zu haben .

Installation

Zuerst müssen wir installieren distcc. Wir werden die vorgefertigten Pakete verwenden, die von den Paketverwaltungssystemen der Betriebssysteme geliefert werden. Sie können sie jedoch auch von der Quelle installieren, wenn Sie möchten!

Debian

sudo apt-get install distcc

Bogen

sudo pacman -S distcc

Aufbau

Sklave - Debian / Ubuntu

TODO: Ist das bei Arch auch so? Wenn nicht, wie konfigurieren wir Arch?

Wir müssen die Einstellungen in anpassen /etc/default/distcc. Öffnen Sie es in Ihrem Lieblingseditor als root. Ich rannte sudo vim /etc/default/distcc.

Sie müssen sich ändern STARTDISTCC, ALLOWEDNETSund LISTENER. Angenommen, Ihr Master und Ihr Slave befinden sich im selben Subnetz und dieses Subnetz befindet 192.168.0.0/24sich auf

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

Außerdem sollten Sie den Pfad zu Ihrem Compiler hinzufügen. Ich habe dazu die folgende Zeile hinzugefügt

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

Hinweis Der Daemon auf dem Slave wird als distccdBenutzer ausgeführt. Stellen Sie daher sicher, dass die entsprechenden Berechtigungen für Ihre ausführbaren Dateien konfiguriert sind. Ich gab jedem die Erlaubnis zur Ausführung.

Führen Sie den Daemon aus - er wird normalerweise beim Booten gestartet -, indem Sie ihn ausführen

sudo service distcc start

Meister - Bogen

TODO: Ist das bei Debian auch so? Wenn nicht, wie konfigurieren wir Debian?

Öffnen Sie ~/.distcc/hostsin Ihrem bevorzugten Texteditor und fügen Sie die IP-Adresse der Slaves hinzu. Meine hostsDatei bestand aus einer einzelnen Zeile, die lautete 192.168.0.22.

Hinweis Es ist möglicherweise eine gute Idee, Ihrem Slave eine statische IP-Adresse zuzuweisen. Andernfalls müssen Sie diese Datei ändern, wenn sich die IP-Adresse ändert.

Verwenden

Alles läuft gut, Sie sollten distcc ganz einfach verwenden können. Zum Beispiel kompilieren hello.czu hello.o, run

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

Beispiel: Hallo Welt!

Ich habe ein einfaches Beispiel in meinem Home-Verzeichnis eingerichtet, das aus 2 Dateien bestand.

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

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

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

Das Ausführen make hellowird lokal kompiliert. Sie sollten dies zuerst als Schnelltest tun. Weiter, ich werde warten.

Beim Ausführen make hello CC="distcc arm-unknown-linux-gnueabi-gcc"wird eine verteilte Kompilierung ausgeführt.

Hinweis Die Vorverarbeitung und Verknüpfung erfolgt weiterhin auf dem RPi.

Debuggen

Es hat eine Weile gedauert, bis dies richtig funktioniert hat, und das beste Debugging- Tool, das ich gefunden habe, war eine einfache Umgebungsvariable. Wenn du

export DISTCC_VERBOSE=1

Der distccClient gibt viele nützliche Informationen aus.

Dies ist ein langer Beitrag, daher wäre jedes Feedback dankbar. Ich hoffe ich habe mich an alle Schritte erinnert!

Alex Chamberlain
quelle
Hervorragende Antwort. Ich werde dies für meine RPi-Entwicklung bookmarken.
Jivings
@AlexChamberlain Distcc unterstützt jetzt den "Pump-Modus", mit dem auch die Vorverarbeitung verteilt werden kann.
Teraquendya
@teraquendya Sie tun es in der Tat, ich bin noch nicht dazu gekommen, Details darüber zu veröffentlichen. Ich möchte sicherstellen, dass ich ohne Pumpenmodus alles richtig gemacht habe.
Alex Chamberlain