Distcc ist ein Programm, welches sich um die Verteilung von Kompilierungsprozessen an teilnehmende Rechner kümmert. Es besteht aus einem Serverteil, distccd und einem Clientprogramm, distcc. Mit etwas Konfigurationsaufwand funktioniert distcc mit ccache, Portage und Automake zusammen.
Distcc beim Bootstrap einsetzen
Wenn Sie distcc während des Bootstraps einsetzen möchten, lesen Sie bitte den Abschnitt Distcc beim Bootstrap weiter unten.
Um distcc einsetzen zu können, müssen alle Computer im Netzwerk die gleiche GCC-Version benutzen. Sie können verschiedene 3.3.x Versionen (wobei x variiert) verwenden, aber ein gleichzeitiger Gebrauch von 3.3.x und 3.2.x kann zu Fehlern bei der Kompilierung oder Ausführung von Programmen führen.
Sie sollten über einige Optionen Bescheid wissen, bevor Sie distcc installieren.
Distcc kommt mit einem grafischen Überwachungstool, um einzelne Aufgaben, die an andere PCs verteilt werden, aufzuzeichnen. Als Gnome Benutzer sollten sie 'gnome' in Ihren USE Flags setzen. Verwenden Sie kein Gnome, wollen jedoch die Funktionalität des grafischen Tools nicht missen, dann sollten Sie 'gtk' in den USE Flags gesetzt haben.
Befehlsauflistung 2.1: distcc installieren |
# emerge distcc
|
Wichtig: Denken Sie daran, dass Sie sicherstellen, dass Sie distcc auf allen teilnehmenden Rechnern installieren. |
Portage so einrichten, dass es Distcc benutzt
Distcc unter Portage einzurichten ist sehr einfach. Führen Sie die nachfolgenden Schritten auf jedem Computer aus, der am verteilten Kompilieren teilnehmen soll:
Befehlsauflistung 2.2: Distcc in Portage integrieren |
# emerge distcc # nano -w /etc/make.conf (Setzen Sie N auf eine Zahl, die zu Ihrem individuellem System passt.) (Häufig wird hier die doppelte Zahl beteiligter CPUs + 1 gewählt) MAKEOPTS="-jN" (Fügen Sie distcc zu Ihren FEATURES hinzu) FEATURES="distcc" |
Die teilnehmenden Hosts festlegen
Benutzen Sie distcc-config, um die Liste der Hosts festzulegen. Dies ist ein Beispiel für einige Hosts, die in Ihrer Liste sein könnten:
Befehlsauflistung 2.3: Beispielhafte Liste der Rechnerdefinition |
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 Es gibt noch verschiedene andere Methoden um die Hosts zu konfigurieren. Schauen Sie für mehr Details in die distcc Manpage. Wenn Sie auf dem lokalen Rechner kompilieren möchten, dann sollten Sie 'localhost' in die Hosts Datei aufnehmen. Umgekehrt sollten Sie den lokalen Rechner nicht in der Liste der Hosts aufnehmen, wenn Sie diesen nicht fürs kompilieren verwenden wollen (dies ist oft der Fall). Auf einem langsamen Rechner kann die Verwendung von localhost den Prozess sogar verlangsamen. Sie sollten auf jeden Fall die Performance Ihrer Einstellungen testen. |
Das mag nun alles etwas kompliziert aussehen, aber in den meisten Fällen wird eine Variation aus Zeile 1 oder 2 für Sie funktionieren.
Da wohl die meisten Benutzer Zeile 3 und 4 nicht benutzen werden, verweise ich für weitere Informationen auf die Distcc Dokumentation (man distcc), welche unter anderem erklärt, wie man distcc über eine SSH-Verbindung verwendet.
Folgendes Beispiel zeigt die Einrichtung der Konfiguration, wie sie in Zeile 1 zu sehen ist:
Befehlsauflistung 2.4: Beispielaufruf, um teilnehmende Rechner bekannt zu geben (Beispiel: Zeile 1) |
# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"
|
Passen Sie /etc/conf.d/distccd an Ihre Bedürfnisse an. Vergessen Sie nicht, durch die --allow Anweisung die Hosts anzugeben, denen Sie vertrauen. Noch mehr Sicherheit erhalten Sie durch Einsatz der --listen Anweisung, die dem distcc Dämon mitteilt, auf welche IP-Adressen er lauschen soll. Weitere Informationen zur Sicherheit von distcc finden sich im Distcc Sicherheitsdesign.
Wichtig: Es ist wichtig --allow und --listen zu verwenden. Bitte lesen die distccd man Seite oder das obige Sicherheitsdokument für weitere Informationen. |
Starten Sie jetzt den distcc Dämon auf allen teilnehmenden Computern:
Befehlsauflistung 2.5: Den distcc Dämon starten |
(distccd zum default Runlevel hinzufügen) # rc-update add distccd default (den distcc Dämon starten) # /etc/init.d/distccd start |
Distcc so einrichten, dass es mit Automake funktioniert
Dies ist in manchen Fällen einfacher als die Einrichtung des Portage-Teiles. Sie müssen zunächst Ihre PATH Umgebungsvariablen so anpassen, dass /usr/lib/distcc/bin vor dem Pfad von gcc (/usr/bin) gestellt wird. Wie auch immer, es gibt eine Vorsichtsmaßnahme zu beachten. Wenn Sie ccache benutzen, so müssen Sie den Distcc-Teil hinter den ccache-Teil stellen. Dies würde in etwa wie folgt aussehen:
Befehlsauflistung 2.6: PATH setzen |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}" (Sie können dies in Ihrer ~/.bashrc oder einer äquivalenten Datei platzieren um PATH jedes mal zu setzen, wenn Sie sich einloggen.) |
Dann, wenn Sie normalerweise make eingeben würden, geben Sie make -jN (wobei N eine Ganzzahl ist) ein. Der Wert für N hängt von Ihrem Netzwerk und den Computern ab, die Sie für den Kompilierprozess verwenden. Probieren Sie einige Variationen aus, um den Wert zu finden, der für Sie die beste Performance erbringt.
Beim Cross-Kompilieren erstellt man auf einer Architektur Programme für eine andere. So könnte man einen Athlon (i686) benutzen, um Programme für einen K6-2 (i586) zu kompilieren, oder einen Sparc um Programme für einen ppc zu erstellen. Dies ist dokumentiert in unserem DistCC Cross-compiling Guide.
Schritt 1: Portage konfigurieren
Booten Sie Ihr neues System mit Hilfe einer Gentoo Linux LiveCD und folgen Sie den Installationsanweisungen bis zum Bootstrap-Abschnitt (siehe auch die Gentoo FAQ für weitere Informationen zu Bootstrapping). Konfigurieren Sie Portage dann so, dass es distcc verwendet:
Befehlsauflistung 4.1: Einrichtung |
# nano -w /etc/make.conf (Fügen Sie distcc zu FEATURES hinzu) FEATURES="distcc" (Ändern Sie MAKEOPTS so, dass es -jN enthält; wobei N die doppelte Zahl der verfügbaren CPUs +1 ist.) MAKEOPTS="-jN" |
Befehlsauflistung 4.2: Den Pfad setzen |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Installieren Sie nun distcc:
Befehlsauflistung 4.3: Distcc auf dem neuen System installieren |
# USE='-*' emerge --nodeps sys-devel/distcc
|
Rufen Sie distcc-config --install auf, um distcc einzurichten.
Befehlsauflistung 4.4: Letzte Einstellungen zur distcc Einrichtung |
(Ersetzen Sie host1, host2, ... durch die IP Adressen der teilnehmenden Hosts) # /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..." (Beispiel: /usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.6") |
Distcc ist nun zum Bootstrap bereit! Fahren Sie mit den offiziellen Installationsanweisungen fort und vergessen Sie nicht distcc nach dem emerge system erneut zu emergen. Dadurch können Sie sicher sein, das alle Abhängigkeiten ebenfalls installiert sind.
Notiz: Während des Bootstraps und während emerge system wird distcc teilweise nicht genutzt: Einige Ebuilds oder Pakete arbeiten nicht gut mit distcc zusammen und deaktivieren distcc aus diesem Grund. |
Einige Pakete verwenden distcc nicht
Wenn Sie verschiendene Pakete emergen werden Sie bemerken, dass nicht alle verteilt kompiliert (und vor allem noch nicht einmal parallel gebaut) werden. Dies kann dadurch verursacht werden, dass das Makefile eines Pakets parallele Arbeiten nicht unterstützt oder der Maintainer eines Ebuilds parallele Arbeiten wegen einem bekannten Problem explizit deaktiviert hat.
Manchmal verursacht distcc auch Kompilierungsfehler. Wenn das auf Ihrem System passiert, teilen Sie es uns bitte mit.
Wenn Sie verschiedene GCC Versionen auf Ihren Rechnern installiert haben, können sehr seltsame Probleme auftreten. Die Lösung ist sicherzustellen, dass auf allen Rechnern die gleiche GCC Version vorhanden ist.
Neuere Versionen von Portage benutzen ${CHOST}-gcc anstelle von gcc. Das bedeutet, dass Sie auf Probleme stoßen, wenn Sie i686 Systeme mit anderen Typen (i386, i586) zusammen einsetzen. Ein Workaround dafür könnte sein, export CC='gcc' CXX='c++' auszuführen bzw. dieses in /etc/make.conf einzufügen.
Wichtig: Dies ändert explizit das Verhalten von Portage und kann unter Umständen zu einigen seltsamen Resultaten in der Zukunft führen. Tun Sie dies nur, wenn Sie CHOSTs mixen. |
Beginnend mit GCC 4.3.0 unterstützt der Compiler den Parameter -march=native, welcher CPU-Autoerkennung und Optimierungen einschaltet, welche es wert sind auf dem Prozessor, auf dem GCC läuft, eingeschaltet zu werden. Dies ist ein Problem mit distcc, da es das Mixen von für unterschiedliche Prozessoren optimierten Code erlaubt (z.B. AMD Athlon und Intel Pentium). Benutzen Sie -march=native oder -mtune=native in Ihren CFLAGS oder CXXFLAGS nicht, wenn Sie mit distcc kompilieren.
Distcc wird mit zwei Überwachungstools ausgeliefert. Das textbasierte wird immer mit gebaut und heißt distccmon-text. Wenn Sie dieses zum ersten Mal starten, mag es etwas verwirrend wirken, aber im Prinzip ist es sehr einfach zu benutzen. Wenn Sie das Programm ohne Parameter ausführen, startet es sofort. Wenn Sie aber eine Zahl als Parameter übergeben, wird es sich alle N Sekunden aktualisieren. Hierbei ist N der Wert, den Sie beim Aufruf übergeben haben.
Das andere Überwachungstool wird nur gebaut, wenn Sie gtk in den USE-Flags stehen haben. Dieses basiert auf GTK+ und läuft unter X und ist wirklich sehr nett. Unter Gentoo heißt der GUI Monitor distccmon-gui um Verwirrungen zu vermeiden. Anderswo wird es unter anderem als distccmon-gnome bezeichnet.
Befehlsauflistung 6.1: Überwachung starten |
# distccmon-text N (oder) # distccmon-gui (Um die distcc Nutzung von Portage zu überwachen:) # DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N (oder) # DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui |
Wichtig: Wenn Ihr distcc Verzeichnis sich an einer anderen Stelle befindet, dann ändern Sie die DISTCC_DIR Variable bitte entsprechend. |
Die Inhalte dieses Dokuments sind unter der Creative Commons - Namensnennung / Weitergabe Lizenz lizenziert.