Vor ein paar Wochen habe ich einen Artikel über die Ausführung mehrerer X-Sitzungen ohne Virtualisierung geschrieben, in dem gezeigt wird, wie Sie mehrere Desktop-Umgebungen gleichzeitig auf demselben Computer ausführen und auf Knopfdruck zwischen ihnen wechseln können. Ich gebe zu, das war ein bisschen Aufwärmen für die echte Show - wie man mehrere Linux-Distributionen gleichzeitig laufen lässt, ohne sich mit den Nachteilen der Virtualisierungssoftware auseinandersetzen zu müssen.

Heute werden wir chroot verwenden, um bestimmte Teile Ihres Linux-Dateisystems als (fast) vollständig isolierte Systeme zu behandeln. Dadurch können Sie alle möglichen interessanten Dinge tun, wie zum Beispiel ein komplettes Gentoo-System von Ihrem Ubuntu-System mit wenig bis keinen Leistungsverlust betreiben.

Wie es funktioniert

Bevor wir anfangen, wäre es eine gute Idee, genau zu besprechen, was wir tun und wie alles funktioniert. Wenn Sie Ihren Linux-Computer starten, durchlaufen Sie eine Reihe von Schritten zum Booten. 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 diesem Zeitpunkt an läuft Ihr System innerhalb dieser Root-Partition.

Wir werden ein Host-Linux-System verwenden (ich werde es von Debian aus tun, aber die Schritte sollten unabhängig von der Verteilung ziemlich identisch sein), das diesen normalen Startvorgang durchläuft, aber dann einen bestimmten Teil Ihres Dateisystems behandelt ( wie / mnt / guest) als eigene isolierte Installation. Dieses Gastsystem wird den Boot-Prozess nicht durchlaufen, 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 zeigen, was ich meine.

Dies ist ungefähr so, wie die Dateien auf Ihrem System angelegt werden, einfach dort als normale Dateien auf einer normalen Partition sitzen und genauso behandelt werden wie alle anderen Dateien, bis wir "chroot" verwenden, um sie zu etwas Besonderem zu machen.

Aber sobald wir chroot (CHange ROOT) benutzen und auf / mnt / guest zeigen (oder wo auch immer wir die Dateien im nächsten Schritt ablegen), ist dieses Verzeichnis jetzt ein eigenes root-Dateisystem. Es wird dem Host-System völlig vergesslich. Alle Programme und Befehle, die innerhalb dieses neuen Stamms ausgeführt werden, werden basierend auf der Software in diesem neuen Zweig ausgeführt.

Wenn Sie beispielsweise in / mnt / guest gechroot sind und "ls" eingeben, liest es den Befehl "ls" aus dieser chroot-Umgebung heraus und ist sich des "ls" -Befehls auf dem Host-System nicht bewusst. Wenn Sie "firefox" eingeben, wird der Firefox innerhalb des neuen Stammverzeichnisses ausgeführt, unabhängig davon, ob Sie Firefox auf dem Host installiert haben oder nicht.

Verwenden und Verwenden des Guest Distro

Damit das funktioniert, brauchen Sie nur das Basis-Dateisystem einer Linux-Distribution, egal welche Distribution es ist. Debian hat zu diesem Zweck ein großartiges Tool namens debbootstrap, das die Basisdateien herunterlädt und sie dort ablegt, wo Sie möchten . Um die Dinge interessant zu halten und zu demonstrieren, was chroot kann, werden wir ein Gentoo-Dateisystem für unseren Gast verwenden. Um die Dinge einfach und direkt zu halten, werde ich den Download des Tarballs als einen der Schritte, die wir an der Befehlszeile ausführen werden, einbeziehen.

Diese Schritte werden alle Basis-Dateien für ein Gentoo-System herunterladen, sie in unser Zielverzeichnis extrahieren (ich benutze / mnt / guest, aber Sie können alles verwenden, was Sie wollen) und dann in dieses Verzeichnis chroot, so dass es als das behandelt wird neues root-Verzeichnis (/) Sie benötigen möglicherweise root (sudo) Berechtigungen für einige der folgenden Befehle.

 mkdir / mnt / gast cd / mnt / gast 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 / Gast 

Diese Befehle führen die folgenden Schritte in der Reihenfolge der Zeilennummer aus:

  1. Schaffen Sie den Raum, in dem unser Gastsystem leben kann
  2. Bewege dich in diesen Raum
  3. Laden Sie die Gentoo Systemdateien herunter
  4. Extrahiere sie
  5. Behandeln Sie diesen neuen Speicherplatz als Root-Verzeichnis (/)

Der folgende Screenshot soll demonstrieren, dass, sobald wir chroot verwendet haben, um unser neues Verzeichnis als root zu verbinden, es nun von den vorherigen Zweigen in der Dateisystemstruktur isoliert ist.

Um den Screenshot zu erklären, beginnen wir mit einer normalen Eingabeaufforderung auf dem Host-System. Ich benutze pwd, um mein aktuelles Verzeichnis anzuzeigen, wo alle Gentoo-Dateien als einfache alte Dateien ohne besondere Bedeutung sitzen. Dann benutze ich chroot, um dieses Verzeichnis als neues root zu behandeln, und du kannst jetzt visuell sehen, dass sich meine Eingabeaufforderung geändert hat, weil die Befehlszeile jetzt alle ihre Informationen (einschließlich des Zeichnens der Eingabeaufforderung) aus der Root-Umgebung von Gentoo zieht. ALLE Befehle und Aktionen, die ich während des chroot-Vorgangs unternehme, hängen von den Befehlen ab, die in diesem neuen Dateibaum vorhanden sind. Wenn ich pwd noch einmal tippe, heißt es nicht mehr / mnt / guest, denn soweit diese Shell weiß, existiert nichts anderes als das, was sie in diesem Baum sieht.

Dinge im Auge behalten

Wie ich oben angedeutet habe, ist dies nicht zu 100% vom Wirtssystem isoliert. Die chroot-Umgebung wurde nie "hochgefahren", also hat sie niemals ihren eigenen Kernel geladen und niemals ihre eigenen Init-Skripte ausgeführt. In unserem Beispiel läuft Gentoo auf dem Kernel, mit dem der Host (in meinem Fall Debian) gebootet hat.

Diese Methode ist sicherlich kein Ersatz für die Virtualisierung und kann nicht alles, was VM-Software leisten kann. Das Gastsystem bootet oder init-Skripte nicht wirklich und es ist möglich, dass Ihr Gast-Betriebssystem einige Funktionen benötigt, die Ihr Host-Kernel nicht bietet.

Wozu?

In der Zeit, in der ich diese Technik den Menschen in der Vergangenheit erwähnt habe, haben sie oft etwas in der Art gesagt: "Das ist cool, aber wofür würden Sie es verwenden?". Persönlich habe ich mehrere Anwendungen für chroot gefunden :

  • Testen Sie Entwicklungssoftware in einer unberührten Umgebung
  • Run Software für eine andere Distribution
  • Führen Sie Software aus, die eine ältere oder neuere Version Ihrer aktuellen Distribution benötigt
  • 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 verwenden Sie chroot, um Ihre Installation oder GRUB zu reparieren
  • Greifen Sie auf ein Laufwerk zu, auf dem Sie den Benutzer / Ausweis vergessen haben
  • Führen Sie eine 32-Bit-App in einer 64-Bit-Umgebung aus

Und ich bin mir sicher, dass es noch viel mehr gibt, was ich noch nie gesehen habe. Hast du jemals chroot benutzt, um mehrere Distributionen zu betreiben? Wie wäre es, ein Linux-System von einer Live-CD zu reparieren? Lassen Sie es uns in den Kommentaren wissen.