Chroot
Chroot (Change root) (zu deutsch etwa: ändere Wurzel) ist ein Unix-Dienstprogramm, mit dem das scheinbare Root-Verzeichnis geändert werden kann. Damit wird eine neue Umgebung geschaffen, die logisch vom Root-Verzeichnis des Hauptsystems getrennt ist. Dieses neue Umfeld wird als "chroot jail" (zu deutsch etwa: chroot-Gefängnis) bezeichnet. Ein Benutzer, der innerhalb des Gefängnisses arbeitet, kann keine Dateien außerhalb der Umgebung, in die er gesperrt wurde, sehen oder darauf zugreifen.
Einer der Einsatzschwerpunkte von chroot ist ein separates Linux-System auf dem aktuellen zum Zwecke des Testens oder der Software-Kompatibilität zu erstellen. Chroot wird oft als eine leichtgewichtige Alternative zur Virtualisierung gesehen, weil es ohne den Ballast eines Hypervisors auskommt.
Voraussetzungen
Die Umgebung aufsetzen
Damit ein neues chroot-Setup erstellt werden kann, wird zunächst ein Verzeichnis benötigt, in dem sich das chroot befinden kann. Beispielsweise könnte ein chroot in /mnt/mychroot erstellt werden:
user $
mkdir /mnt/mychroot
user $
cd /mnt/mychroot
Um eine existierende Installation von einer Partition zu mounten, kann der folgende Befehl ausgeführt werden. Stellen Sie sicher die <DEVICE>
Zeichenkette im Beispiel unterhalb durch das Laufwerk und die Partition der existierenden Installation zu ersetzten:
user $
mkdir /mnt/mychroot
user $
mount /dev/<DEVICE> /mnt/mychroot
Wenn zuvor bereits eine Installation in einem Unterverzeichnis des aktuellen Root-Dateisystems erzeugt wurde, können Sie die Schritte oberhalb überspringen.
Installieren der Systemdateien und des Portage-Baumes (Neuinstallation)
Bei einer Neuinstallation besteht der nächste Schritt darin, den stage3- und Portage-Tarball herunterzuladen und in der Chroot-Umgebung zu entpacken. Weiterführende Informationen sind unter Stage-Tarball herunterladen und Stage-Tarball entpacken im Gentoo Handbuch zu finden.
root #
links http://distfiles.gentoo.org/releases/amd64/autobuilds/
root #
tar xvjpf stage3-*.tar.bz2 -C /mnt/mychroot
Konfiguration
Vor dem Eintreten in chroot müssen einige Verzeichnisse gemountet werden:
root #
mount --rbind /dev /mnt/mychroot/dev
root #
mount --make-rslave /mnt/mychroot/dev
root #
mount -t proc /proc /mnt/mychroot/proc
root #
mount --rbind /sys /mnt/mychroot/sys
root #
mount --make-rslave /mnt/mychroot/sys
root #
mount --rbind /tmp /mnt/mychroot/tmp
Einige grundlegende Konfigurationsdateien müssen vom Host kopiert werden. Kopieren Sie make.conf nicht, wenn Sie eine bestehende Installation verwenden:
user $
cp /etc/portage/make.conf /mnt/mychroot/etc/portage # Wenn Sie eine bestehende Installation verwenden, überspringen Sie diesen Befehl.
user $
cp /etc/resolv.conf /mnt/mychroot/etc
Bedienung
Wenn Sie dies getan haben, betreten Sie die Chroot-Umgebung durch die Ausführung der folgenden Befehle:
root #
chroot /mnt/mychroot /bin/bash
root #
env-update && . /etc/profile
root #
export PS1="(chroot) $PS1"
Falls Sie eine neue Installation erstellen, sollte Portage synchronisiert werden um sicherzustellen, dass alles aktuell ist.
(chroot) root #
emerge-webrsync
(chroot) root #
emerge --sync
Das System ist jetzt bereit. Fühlen Sie sich frei Software zu installieren, mit Einstellungen herumzuspielen, Experimentelle Pakete und Konfigurationen zu testen, ohne negative Effekte auf das Haupt-System fürchten zu müssen. Um das chroot zu verlassen geben Sie einfach exit ein, oder drücken Sie Ctrl+d. Dieses Vorgehen wird die Konsole zurück zur normalen Umgebung bringen. Vergessen Sie nicht die Verzeichnisse auszuhängen (unmount), die Sie gemountet haben.
Init-Skripte
Wenn das Aufsetzen von chroots eine Aufgabe ist, die oft durchgeführt werden muss, ist es möglich, das Mounten der Verzeichnisse durch das Verwenden eines Init-Skripts zu beschleunigen. Das Skript kann zum Standard-Runlevel hinzugefügt und somit automatisch beim Systemstart eingerichtet werden:
/etc/init.d/mychroot
#!/sbin/openrc-run
depend() {
need localmount
need bootmisc
}
start() {
ebegin "Mounte chroot-Verzeichnisse"
mount -o rbind /dev /mnt/mychroot/dev > /dev/null &
mount -t proc none /mnt/mychroot/proc > /dev/null &
mount -o bind /sys /mnt/mychroot/sys > /dev/null &
mount -o bind /tmp /mnt/mychroot/tmp > /dev/null &
eend $? "Beim Mounten der chroot-Verzeichnisse ist ein Fehler aufgetreten"
}
stop() {
ebegin "Unmounte chroot-Verzeichnisse"
umount -f /mnt/mychroot/dev > /dev/null &
umount -f /mnt/mychroot/proc > /dev/null &
umount -f /mnt/mychroot/sys > /dev/null &
umount -f /mnt/mychroot/tmp > /dev/null &
eend $? "Beim Unmounten der chroot-Verzeichnisse ist ein Fehler aufgetreten"
}
Falls Sie ein ein anderes Verzeichnis oder eine andere Partition verwenden, fügen Sie die notwendigen Mount-Befehle in die Funktion start()
hinzu und ändern Sie /mnt/chroot auf den passenden Namen.
Siehe auch
- Project:X86/Chroot Guide — provides instructions on how to create chroots to assist in testing Gentoo packages for stabilization.
- Knowledge Base:Chrooting returns exec format error
- Chroot-Proxy-Dienste
- Chrooting und virtuelle Server
- PRoot — a user-space implementation of chroot, mount --bind, and binfmt_misc.