Emerge über NFS auf anderem Rechner ausführen
Verfasst: 15.05.2009, 12:23
Um Gentoo-Systeme auch auf langsamen Rechner ohne großen Zeitaufwand aktuell zu halten, kann man die nötigen compile-Vorgänge ohne großen Aufwand auch auf einem anderen Rechner laufen lassen. Eine Möglichkeit ist z.B. das Root-Filesystem des langsamen Rechners per NFS zu exportieren, auf einem schnelleren Rechner zu mounten und per chroot die entsprechenden emerge-Vorgänge zu starten.
Damit das funktionieren kann, muss der schnellere Rechner allerdings binärkompatibel zu dem langsamen System sein. Kurz, die CPU muss die Binaries des langsamen Rechners ausführen können.
Weitere Vorraussetzung: NFS muss eingerichtet sein und funktionieren. Des weiteren sollte die Netzwerkverbindung zw. beiden Rechner einigermaßen schnell sein, da viele Daten hin und her gehen werden. Also langsames WLAN ist nicht zu empfehlen.
1. Schritt: Root-Filesystem des langsamen Systems exportieren
Dazu wird in der /etc/exports folgendes ergänzt:
Wobei <ip_fast> mit der IP-Adresse oder dem Hostnamen des schnellen System zu ersetzen ist. Danach kann mit exportfs -a oder /etc/init.d/nfs restart der neue Export aktiviert werden.
2. Mounten des Root-Filesystem auf dem schnellen System
(Alle weiteren Aktionen erfolgen jetzt auf dem schnellen System)
<ip_slow> ist dabei der Hostname des langsamen Systems.
3. /proc und /dev mounten
Um ein funktionierendes Root-FS zu bekommen müssen noch proc und dev mit Leben erfüllt werden:
4. Beschleunigen: Lokales tmp-Verzeichnis und distfiles benutzen
Damit nicht unötig Daten zwischen den System hin und her geschaufelt werden, empfiehlt es sich, das Portage-Tmp lokal auf dem schnellen System vorzhalten, sowie auch den Distfiles-Ordner des schnelleren System zu benutzen:
5. chroot
Nun kann das chroot in das gemountete Root-FS des langsamen Systems ausgeführt werden:
Handelt es sich bei dem schnellen System um ein 64-Bit bei dem langsamen um ein 32-Bit System, empfiehlt sich allerdings die Verwendung von linux32 um Probleme mit Paketen zu vermeiden, die zur Kompile-Zeit die Systemsarchitektur abfragen:
6. Laufzeitumgebung laden
Nun muss im chroot-Jail noch die Laufzeitumgebung des langsamen Systems geladen werden:
7. Emerge
Jetzt können beliebige emerge-Vorgänge in der chroot-Umgebung für das langsame System auf dem schnellen System ausgeführt werden. Je nach Leistungsunterschied der beiden System ist hier ein erheblicher Geschwindigkeitsvorteil zu erzielen. Einige wenige Pakete lassen sich nicht übersetzen. Die muss man dann auf dem langsamen System nochmal seperat durchlaufen lassen.
Um die chroot-Umgebung zu verlassen, reicht ein einfaches exit. Danach kann man das Root-Fs des langsamen System wieder sauber aushängen, in man einfach alle umounts in der umgekehrten Reihenfolge der mounts ausführt.
Damit das funktionieren kann, muss der schnellere Rechner allerdings binärkompatibel zu dem langsamen System sein. Kurz, die CPU muss die Binaries des langsamen Rechners ausführen können.
Weitere Vorraussetzung: NFS muss eingerichtet sein und funktionieren. Des weiteren sollte die Netzwerkverbindung zw. beiden Rechner einigermaßen schnell sein, da viele Daten hin und her gehen werden. Also langsames WLAN ist nicht zu empfehlen.
1. Schritt: Root-Filesystem des langsamen Systems exportieren
Dazu wird in der /etc/exports folgendes ergänzt:
Code: Alles auswählen
/ <ip_fast>(rw,no_root_squash,sync,no_subtree_check)
2. Mounten des Root-Filesystem auf dem schnellen System
(Alle weiteren Aktionen erfolgen jetzt auf dem schnellen System)
Code: Alles auswählen
mount <ip_slow>:/ <mntpoint> -o rsize=1024,wsize=1024,rw,nolock
3. /proc und /dev mounten
Um ein funktionierendes Root-FS zu bekommen müssen noch proc und dev mit Leben erfüllt werden:
Code: Alles auswählen
mount -o bind /dev <mntpoint>/dev
mount -t proc none <mntpoint>/proc
Damit nicht unötig Daten zwischen den System hin und her geschaufelt werden, empfiehlt es sich, das Portage-Tmp lokal auf dem schnellen System vorzhalten, sowie auch den Distfiles-Ordner des schnelleren System zu benutzen:
Code: Alles auswählen
mount -o bind /var/tmp/portage <mntpoint>/var/tmp/portage
mount -o bind /usr/portage/distfiles <mntpoint>/usr/portage/distfiles
Nun kann das chroot in das gemountete Root-FS des langsamen Systems ausgeführt werden:
Code: Alles auswählen
chroot <mntpoint>
Code: Alles auswählen
linux32 chroot <mntpoint>
Nun muss im chroot-Jail noch die Laufzeitumgebung des langsamen Systems geladen werden:
Code: Alles auswählen
source /etc/profile; env-update
Jetzt können beliebige emerge-Vorgänge in der chroot-Umgebung für das langsame System auf dem schnellen System ausgeführt werden. Je nach Leistungsunterschied der beiden System ist hier ein erheblicher Geschwindigkeitsvorteil zu erzielen. Einige wenige Pakete lassen sich nicht übersetzen. Die muss man dann auf dem langsamen System nochmal seperat durchlaufen lassen.
Um die chroot-Umgebung zu verlassen, reicht ein einfaches exit. Danach kann man das Root-Fs des langsamen System wieder sauber aushängen, in man einfach alle umounts in der umgekehrten Reihenfolge der mounts ausführt.