Gentoo Logo

Gentoo Distcc Dokumentation

Inhalt:

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
(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.

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
(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}"

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

(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.

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
(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.



Drucken

Seite aktualisiert 14. Juni 2009

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: Dieses Dokument dient als Leitfaden, um distcc mit Gentoo Linux zu benutzen.

Lisa Seelye
Autor

Mike Frysinger
Bearbeiter

Erwin
Bearbeiter

Sven Vermeulen
Bearbeiter

Lars Weiler
Bearbeiter

Tiemo Kieft
Korrektor

Joshua Saddler
Bearbeiter

Christian Hartmann
Übersetzer

Jens Schittenhelm
Korrektor

Dennis Nienhüser
Übersetzer

Jan Hendrik Grahl
Korrektor

Tobias Heinlein
Übersetzer

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.