Gentoo Distcc Dokumentation
1.
Einleitung
Was ist distcc?
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.
2.
Einrichtung
Abhängigkeiten
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.
Distcc installieren
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
MAKEOPTS="-jN"
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
|
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 |
# rc-update add distccd default
# /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}"
|
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.
3.
Cross-Kompilierung
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.
4.
Distcc beim Bootstrap
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
FEATURES="distcc"
MAKEOPTS="-jN"
|
Befehlsauflistung 4.2: Den Pfad setzen |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Schritt 2: Distcc aufsetzen
Installieren Sie nun distcc:
Befehlsauflistung 4.3: Distcc auf dem neuen System installieren |
# USE='-*' emerge --nodeps sys-devel/distcc
|
Schritt 3: Distcc einrichten
Rufen Sie distcc-config --install auf, um distcc einzurichten.
Befehlsauflistung 4.4: Letzte Einstellungen zur distcc Einrichtung |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
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.
|
5.
Problembehebung
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.
Verschiedene GCC Versionen
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.
|
-march=native
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.
6.
Distcc Extras
Distcc Überwachung
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
# distccmon-gui
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# 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, sofern nicht explizit
anders genannt, unter der Creative Commons -
Namensnennung / Weitergabe Lizenz lizenziert. Die Gentoo Name and Logo
Usage Guidelines treffen zu.
|