Soo, nun will ich mal ein Tutorial über Icecream schreiben, womit man einen 'Compiling-Cluster' aufbauen kann um schwache Rechner beim Kompilieren zu unterstützen. Das ganze funktioniert zum Beispiel gut, wenn man auf einem Rechner Gentoo (nicht binär) installieren möchte, dieser aber einem zu lange zum Kompilieren braucht. Das ganze funktioniert aber natürlich auch auf (allen) anderen Distributionen und hilft überall, wo was kompiliert wird.
Vorweg: Es ist nur sinnvoll, wenn der/die unterstützende(n) Rechner stärker ist, denn sonst wird der Prozess verlangsamt. Icecream balanciert es so aus, dass auf dem Rechner am meisten Kompiliert wird, wo auch die meisten Ressourcen zur Verfügung stehen. Hängt man also einen schlechteren Rechner mit in den Cluster, so wird lediglich auf dem (ich nenne ihn mal) Host-Rechner kompiliert und dadurch, dass Icecream läuft geht Zeit verloren. Eigentlich ja ganz logisch :P Weiterhin ist es auch so, dass man nicht sagen kann, dass wenn ein zweiter, sagen wir mal gleich starker Rechner, mitarbeitet, dass sich die Kompilierungszeit halbiert, da es imer drauf ankommt, wie gut sich alles parallelisieren lässt. Aber nun zum eigentlichen Tutorial:
Als erstes mal wird Icecream (auf allen Rechnern) installiert:
Ubuntu:
# sudo apt-get install icecc icecc-monitor
Gentoo:
# emerge -av sys-devel/icecream
from source: ftp://ftp.suse.com/pub/projects/icecream/
# tar -xjvf icecc-0.9.1.tar.bz2
# cd icecc-0.9.1
# ./configure --prefix=/opt/icecream
# make
# make install
Somit wäre Icecream schonmal installiert. Bei dem Befehl für Ubuntu wurde auch gleich der Icecream Monitor mitinstalliert, der ganz gut zum Überwachen ist, worauf ich aber ertsmal nicht weiter eingehe.
Jetzt gillt es festzulegen, welcher Rechner die Aufgabe des 'Servers' übernimmt. Es ist nicht zwingend notwending, dass der sog. Scheduler auf dem Rechner läuft, der den Kompilierauftrag stellt. Optimalerwiese sollte dieser auf dem schnellsten Rechner laufen. Nun editieren wir die Konfigurationsdatei:
Ubuntu:
# sudo gedit /etc/icecc/icecc.conf
Gentoo:
# nano /etc/conf.d/icecream
Auf dem Rechner, auf dem der Scheduler laufen soll muss folgende Zeile in der Konfiguration enthalten sein:
ICECREAM_RUN_SCHEDULER="yes"
Hier wird die maximale Anzahl an parallelen Kompiliervorgängen für die betreffende Maschine angegeben (optimalerweise Anzahl der CPUs x 2, hier Beispiel für Dualcore):
ICECREAM_MAX_JOBS="4"
Wenn der Scheduler nicht auf dem Rechner läuft, vom dem der Kompilierauftrag stammt muss diese Zeile vorhanden sein:
ICECREAM_ALLOW_REMOTE="yes"
Hat man das alles, so sollte zumindest schonmal das Kompilieren eines Gentoo System mit der Hilfe eines Ubuntu Systems funktionieren. Allerdings müssen dafür beide Betriebssysteme auf der gleichen Architektur laufen, ansonsten wirds komplizierter.
Jetzt wird der Scheduler, bzw. der Daemon (neu)gestartet:
Ubuntu:
# sudo /etc/init.d/icecc restart
Gentoo:
# /etc/init.d/icecream restart
from source:
Scheduler:
# ./scheduler -d
Daemon:
# ./iceccd -
Zu allerletzt muss noch die PATH-Variable auf dem Rechner geändert werden, der kompilieren möchte:
Ubuntu & Gentoo:
# export PATH=/usr/lib/icecc/bin:$PATH
from source:
# export PATH=/opt/icecream/bin:$PATH
An sich kann es so jetzt schon losgehen, wenn man aber noch (sinnvollerweise) möchte, dass auf Gentoo Portage auch über Icecream läuft muss folgene Zeile in die make.conf hinzugefügt werden:
PREROOTPATH=/usr/lib/icecc/bin
Und die Anzahl der Prozesse (-jN) angepasst werden. Hier wird die Gesamtzahl aller Prozesse, die parallel über Icecream laufen definiert. Die Zahl sollte allerdings nicht über 10 gesetzt werden (außer es existieren tatsächlich so viele Rechner), denn dadurch steigt die Netzwerkbelastung und alles wird ausgebremst.
Falls noch es noch Fragen gibt einfach hier stellen.
Gruß
Daniel
Waaaa, was macht dein Tutorial denn in dieser Kategorie??? Da hätt ich mir das ja auch sparen können :P Aber ganz ehrlich, verschieb das mal ;)
jetzt haben wir es zweimal... :D
http://lug-schaumburg.de/?q=node/117