So führen Sie mehrere Linux-Distributionen ohne Virtualisierung aus
Vor ein paar Wochen habe ich einen Artikel zum Thema „So führen Sie mehrere X-Sitzungen ohne Virtualisierung aus“ geschrieben, in dem gezeigt wurde, wie Sie mehrere Desktop-Umgebungen gleichzeitig auf demselben Computer ausführen und per Knopfdruck zwischen ihnen wechseln können. Ich gebe zu, das war eine Art Aufwärmübung für die eigentliche Show – wie man mehrere Linux-Distributionen gleichzeitig laufen lässt, ohne sich mit den Nachteilen von Virtualisierungssoftware auseinandersetzen zu müssen.
Heute werden wir Chroot verwenden, um bestimmte Teile Ihres Linux-Dateisystems als (fast) vollständig isolierte Systeme zu behandeln. Auf diese Weise können Sie alle möglichen interessanten Dinge tun, wie zum Beispiel ein vollständiges Gentoo-System von Ihrem Ubuntu-System aus mit geringem oder gar keinem Leistungsverlust ausführen.
Wie es funktioniert
Bevor wir beginnen, wäre es eine gute Idee, genau zu besprechen, was wir tun und wie alles funktioniert. Wenn Sie Ihren Linux-Computer starten, durchlaufen Sie zum Hochfahren eine Reihe von Schritten. GRUB, Ihr Bootloader, lädt den Kernel, der in der GRUB-Konfigurationsdatei angegeben ist, hängt ihn an Ihre Root-Partition an und führt die dort gespeicherten Init-Skripte aus. Von da an wird Ihr System von dieser Root-Partition aus ausgeführt.
Wir werden ein Host-Linux-System verwenden (ich mache es von Debian aus, aber die Schritte sollten unabhängig von der Distribution weitgehend identisch sein), das den normalen Startvorgang durchläuft, dann aber einen bestimmten Teil Ihres Dateisystems behandelt ( wie /mnt/guest) als eigene isolierte Installation. Dieses Gastsystem durchläuft den Bootvorgang nicht, lädt keinen Kernel und führt keine Init-Skripte aus. Sie sagen Ihrem Host einfach: „Verbinden Sie sich mit diesem Verzeichnis, als wäre es die neue Root-Partition.“ Das folgende Diagramm soll helfen, zu veranschaulichen, was ich meine.
Ungefähr so werden die Dateien auf Ihrem System angeordnet, sie liegen einfach wie normale Dateien auf einer normalen Partition da und werden genauso behandelt wie alle anderen Dateien, bis wir sie mit „chroot“ zu etwas Besonderem machen.
Aber sobald wir chroot (CHange ROOT) verwenden und es auf /mnt/guest (oder wo auch immer wir die Dateien im nächsten Schritt ablegen) verweisen, ist dieses Verzeichnis nun sein eigenes Root-Dateisystem. Das Host-System wird völlig ignoriert. Alle Programme und Befehle, die in diesem neuen Root ausgeführt werden, basieren auf der Software in diesem neuen Zweig.
Wenn Sie beispielsweise in /mnt/guest gechrootet sind und „ls“ eingeben, liest es den „ls“-Befehl aus dieser chrootierten Umgebung, ohne dass der „ls“-Befehl auf dem Hostsystem bekannt ist. Wenn Sie „firefox“ eingeben, wird Firefox im neuen Stammverzeichnis ausgeführt, unabhängig davon, ob Firefox auf dem Host installiert ist oder nicht.
Erhalten und Verwenden der Gastdistribution
Damit dies funktioniert, benötigen Sie lediglich das Basisdateisystem einer Linux-Distribution, egal um welche Distribution es sich handelt. Debian hat für diesen Zweck ein großartiges Tool namens Debbootstrap, das die Basisdateien herunterlädt und sie an einem beliebigen Ort ablegt. Um die Sache interessant zu halten und zu demonstrieren, was Chroot kann, verwenden wir a Gentoo Dateisystem für unseren Gast. Um die Sache einfach und direkt zu halten, füge ich den Download des Tarballs als einen der Schritte ein, die wir in der Befehlszeile ausführen.
Diese Schritte werden alle Basisdateien für ein Gentoo-System herunterladen, sie in unser Zielverzeichnis extrahieren (ich verwende /mnt/guest, aber Sie können alles verwenden, was Sie möchten) und dann in dieses Verzeichnis chrooten, damit es als behandelt wird neues Stammverzeichnis (/). Für einige der folgenden Befehle benötigen Sie möglicherweise Root-Berechtigungen (sudo).
mkdir /mnt/guest cd /mnt/guest wget http://distfiles.gentoo.org/releases/x86/2008.0/stages/stage3-x86-2008.0.tar.bz2 tar -jxvf stage3-x86-2008.0.tar.bz2 chroot /mnt/guestDiese Befehle führen die folgenden Schritte in der Reihenfolge der Zeilennummer aus:
- Schaffen Sie den Raum, in dem unser Gastsystem leben kann
- Begib dich in diesen Raum
- Laden Sie die Gentoo-Systemdateien herunter
- Extrahieren Sie sie
- Behandeln Sie diesen neuen Speicherplatz als Stammverzeichnis (/).
Der folgende Screenshot soll verdeutlichen, dass unser neues Verzeichnis, nachdem wir es mit chroot als Root verbunden haben, nun von den vorherigen Zweigen im Dateisystembaum isoliert ist.
Um den Screenshot zu erklären, beginnen wir mit einer normalen Eingabeaufforderung auf dem Hostsystem. Ich verwende pwd, um mein aktuelles Verzeichnis anzuzeigen, in dem sich alle Gentoo-Dateien als einfache alte Dateien ohne besondere Bedeutung befinden. Ich verwende dann chroot, um dieses Verzeichnis als neues Root-Verzeichnis zu behandeln, und Sie können jetzt visuell sehen, dass sich meine Eingabeaufforderung geändert hat, da die Befehlszeile jetzt alle Informationen (einschließlich der Art und Weise, wie die Eingabeaufforderung gezeichnet wird) aus der Root-Umgebung von Gentoo abruft. ALLE Befehle und Aktionen, die ich im Chroot-Modus ausführe, hängen von den Befehlen ab, die in diesem neuen Dateibaum vorhanden sind. Wenn ich erneut „pwd“ eingebe, steht dort nicht mehr „/mnt/guest“, denn soweit diese Shell weiß, existiert nichts anderes als das, was sie in diesem Baum sieht.
Dinge, die Sie beachten sollten
Wie ich oben angedeutet habe, ist dies nicht zu 100 % vom Hostsystem isoliert. Die chroot-Umgebung wurde nie „gebootet“, also hat sie nie ihren eigenen Kernel geladen und nie ihre eigenen Init-Skripte ausgeführt. In unserem Beispiel läuft Gentoo auf dem Kernel, mit dem der Host (in meinem Fall Debian) gestartet ist.
Diese Methode ist sicherlich nicht ein Ersatz für die Virtualisierung und kann nicht alles, was VM-Software kann. Das Gastsystem „bootet“ nie wirklich oder führt Init-Skripte aus, und es ist möglich, dass Ihr Gastbetriebssystem einige Funktionen benötigt, die Ihr Host-Kernel nicht bietet.
Wozu?
Wenn ich diese Technik in der Vergangenheit Leuten gegenüber erwähnt habe, haben sie oft etwas in der Art gesagt: „Das ist cool, aber wofür würdest du sie verwenden?“. Persönlich habe ich mehrere Verwendungsmöglichkeiten für Chroot gefunden:
- Testen Sie Entwicklungssoftware in einer makellosen Umgebung
- Führen Sie Software aus, die für eine andere Distribution bestimmt ist
- Führen Sie Software aus, die eine ältere oder neuere Version Ihrer aktuellen Distribution erfordert
- Greifen Sie auf eine Linux-Installation auf einer anderen Partition zu, ohne einen Neustart durchführen zu müssen
- Starten Sie eine Live-CD und reparieren Sie Ihre Installation oder GRUB mit chroot
- Greifen Sie auf ein Laufwerk zu, dessen Benutzer/Pass Sie vergessen haben
- Führen Sie eine 32-Bit-App in einer 64-Bit-Umgebung aus
Und ich bin mir sicher, dass es noch viele weitere gibt, an die ich noch nie gedacht habe. Haben Sie jemals Chroot verwendet, um mehrere Distributionen auszuführen? Wie wäre es mit der Reparatur eines Linux-Systems von einer Live-CD? Lass es uns in den Kommentaren wissen.
Schreibe einen Kommentar