Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Mit schroot ("securely enter a chroot environment") kann man Befehle oder eine Login-Shell in einer chroot-Umgebung ausführen.
Das Programm schroot wurde als Ersatz für dchroot geschrieben und bietet eine größere Funktionalität, die Optionen sind aber ähnlich. Der Befehl dchroot ist noch als Wrapper um schroot vorhanden.
Merkmale:
Ausführen von Befehlen in einer chroot-Umgebung als normaler Benutzer
Automatisches Bereitstellen von Einhängepunkten in der chroot-Umgebung
Automatisches Kopieren von Dateien in die chroot-Umgebung
chroot-Umgebungen in Verzeichnissen, tar-Archiven und Partitionen
"Source chroots": Bei jedem Start wird eine Kopie der chroot-Umgebung erstellt, so dass Befehle bei jedem Start eine unveränderte Umgebung vorfinden. Unterstützt werden (komprimierte) tar-Archive, LVM-Snapshots, Btrfs-Snapshots und Overlay-Dateisysteme wie aufs, UnionFS und OverlayFS.
Das Verhalten beim Starten und Beenden kann über Skripte angepasst werden.
Dieser Artikel beschreibt nur die grundlegende Verwendung von schroot. Für weitere Informationen kann man die Manpages zu Rate ziehen.
Folgende Pakete müssen installiert werden [1]:
debootstrap (zur Einrichtung von chroot-Umgebungen)
schroot (universe [2])
mit apturl
Paketliste zum Kopieren:
sudo apt-get install debootstrap schroot
sudo aptitude install debootstrap schroot
Zuerst erstellt man eine chroot-Umgebung, indem man folgenden Befehl in einem Terminal [3] ausführt:
sudo debootstrap precise /chroot-precise http://de.archive.ubuntu.com/ubuntu/
Der Befehl kann eine Weile dauern. Anschließend befindet sich in dem Verzeichnis /chroot-precise eine Minimalinstallation von Ubuntu 12.04. Statt precise
kann man den Codenamen einer beliebigen Ubuntu- oder Debian-Version einsetzen.
Da bei dem Vorgang ein komplettes Basis-System in dem chroot-Verzeichnis installiert wird, sollte man darauf achten, dass genug Speicherplatz vorhanden ist. Eine Minimalinstallation benötigt ungefähr 500 MB. Will man später graphische Programme installieren, sollte man mindestens 1,5 GB einplanen.
Dann muss man noch schroot für diese chroot-Umgebung konfigurieren. Dazu öffnet man die Datei /etc/schroot/schroot.conf in einem Texteditor [5] mit Root-Rechten [4] und fügt einen Abschnitt mit folgendem Inhalt ein:
1 2 3 4 5 | [precise-test] description=Beschreibung der chroot-Umgebung type=directory directory=/chroot-precise users=BENUTZER |
In der ersten Zeile steht in eckigen Klammern der Name der chroot-Umgebung. Hinter directory=
steht das Verzeichnis, in dem man die chroot-Umgebung mit debootstrap installiert hat. BENUTZER
ersetzt man mit einer durch Kommas getrennten Liste der Benutzer, die auf die chroot-Umgebung zugreifen dürfen, in der Regel den eigenen Benutzernamen. Eine genauere Beschreibung der verwendeten Einstellungen kann man in der Manpage für schroot.conf
nachlesen.
Alternativ kann man die Konfiguration auch unter /etc/schroot/chroot.d/ ablegen. Dazu erstellt man dort eine neue Datei mit diesem Inhalt. Der Dateiname kann zwar frei gewählt werden, die Datei aber keine Dateierweiterung haben, da sie sonst eventuell ignoriert wird (Das Verhalten hängt von der Version ab).
Grundsätzlich ist die chroot-Umgebung jetzt einsatzbereit. Hinweise für bestimmte Einsatzgebiete findet man im Abschnitt Anwendungsbeispiele.
In die chroot-Umgebung wechselt man mit dem folgenden Befehl:
schroot -c precise-test
Der aktuelle Verzeichnisnamen ist derselbe, falls er in der chroot-Umgebung vorhanden ist. Verlassen kann man die chroot-Umgebung mit dem Befehl exit
oder über die Tastenkombination
Strg +
D .
Einen einzelnen Befehl führt man so aus:
schroot -c precise-test ls
Enthält der Befehl Optionen, muss --
vorangestellt werden, damit schroot die Optionen nicht selbst interpretiert:
schroot -c precise-test -- ls -l
Zuerst sollte man sicherstellen, dass man alle chroot-Umgebungen verlassen hat und alle Sitzungen auch korrekt beendet wurden. Siehe dazu auch unter Hinweise. Außerdem kann man mit dem Befehl mount
überprüfen, ob noch Verzeichnisse von schroot eingebunden sind (schroot bindet Verzeichnisse unter /var/lib/schroot/mount/ ein).
Es ist sehr wichtig, dies zu überprüfen, da sonst Datenverlust droht.
Das Verzeichnis kann man nun löschen mit dem Befehl
sudo rm -r /chroot-precise/
Über die Datei /etc/schroot/default/fstab wird festgelegt, welche Einhängepunkte in der chroot-Umgebung zur Verfügung stehen. Sie kann nach Bedarf geändert werden und folgt der Syntax der /etc/fstab.
Standardmäßig wird auch das Homeverzeichnis eingebunden, sodass die Anwendung in der chroot-Umgebung vollen Zugriff auf die persönlichen Daten hat. Sollte man dies nicht wollen, kann man die entsprechende Zeile aus der Datei entfernen. Sollen gar keine Verzeichnisse eingehängt werden, ersetzt man besser in der Konfiguration der chroot-Umgebung die Zeile type=directory
durch type=plain
.
Die Datei /etc/schroot/default/copyfiles enthält eine Liste von Dateien, die beim Start in die chroot-Umgebung kopiert werden. Damit lassen sich Konfigurationsdateien in der chroot-Umgebung mit denen im Hauptsystem synchron halten.
Die in diesem Kapitel beschriebenen Einstellungen sind zunächst für alle chroot-Umgebungen wirksam. Mit Profilen können verschiedene chroot-Umgebungen für unterschiedliche Einsatzzwecke auch unterschiedlich konfiguriert werden.
Profile sind Verzeichnisse in /etc/schroot. Einige unterschiedliche Profile sind schon vorhanden:
default: Standardwert, wenn kein Profil angegeben
minimal: Minimale Konfiguration
desktop: für Desktop-Anwendungen, mehr Funktionalität des Host-Systems verfügbar
sbuild und buildd: für das Bauen von Debian-Paketen
Ein eigenes Profil erstellt man, indem man eines der Verzeichnisse kopiert und den Inhalt den eigenen Wünschen anpasst.
Man fügt in die Konfiguration der entsprechenden chroot-Umgebung folgende Zeile ein:
1 | script-config=Profil/Dateiname |
Der Vorgabewert ist default/config. Das Dateiformat wird in der Manpage schroot-script-config
beschrieben.
Man fügt in die Konfiguration der entsprechenden chroot-Umgebung folgende Zeile ein:
1 | profile=Profil |
Der Vorgabewert ist default.
Es kann passieren, dass die zu Befehlen gehörenden schroot-Sitzungen nicht korrekt beendet werden (z.B. nach einem Absturz des Betriebssystems oder des Terminalprogramms). Die offenen Sitzungen kann man anzeigen lassen mit
schroot -l --all-sessions
und schliessen mit
schroot -e --all-sessions
Normalerweise werden die Umgebungsvariablen nicht in die chroot-Umgebung übernommen, sondern eine minimale Menge an Umgebungsvariablen wird neu gesetzt. Sollen die Umgebungsvariablen erhalten bleiben, fügt man die Zeile
1 | preserve-environment=true |
in die Konfiguration ein. Dies betrifft u.a.
PATH
: Inhalt ist kürzer, so dass bestimmte spezielle Befehle nicht gefunden werden.
DISPLAY
: Diese Variable ist notwendig, um graphische Programme in der chroot-Umgebung auszuführen.
Sicherheit: chroot-Umgebungen sind kein Sicherheitsmerkmal, denn für entsprechend geschriebene Programme ist es durchaus möglich, aus einer chroot-Umgebung auszubrechen. Will man allerdings nur eine Anwendung daran hindern, auf bestimmte Daten zuzugreifen oder sein System vor fehlerhaften Anwendungen schützen, kann eine chroot-Umgebung durchaus nützlich sein.
Bei Verwendung mehrerer chroot-Umgebungen kann der Einsatz von Lokalen Paket-Caches nützlich sein. Bei Verwendung von Apt-Cacher-ng kann man die Datei /etc/apt/apt.conf.d/01proxy in die Datei /etc/schroot/copyfiles-defaults eintragen, und hat damit den Cache für alle chroot-Umgebungen konfiguriert.
Die getrennte Verwendung von D-Bus innerhalb einer chroot-Umgebung ist wahrscheinlich nicht möglich. Dadurch kann es vorkommen, dass Programme, die D-Bus verwenden, nicht oder nur eingeschränkt funktionieren. Andererseits ist es möglich, die chroot-Umgebung so zu konfigurieren, dass die Programme mit dem D-Bus des Hauptsystems kommunizieren.
Wenn man ein Programm verwenden will, das in der aktuellen Ubuntu-Version noch nicht (oder nicht mehr) vorhanden ist oder man eine ältere Version parallel verwenden will, kann eine chroot-Umgebung hilfreich sein. Auch für Software aus unsicheren Quellen (z.B. PPA, nicht paketierte Programme) kann man eine chroot-Umgebung verwenden, um zu vermeiden die Stabilität seines System zu gefährden. Ebenso kann man Debian in einer chroot-Umgebung installieren.
Man sollte aber bedenken, dass die Konfigurationsdateien verschiedener Programmversionen möglicherweise nicht kompatibel sind. Daher sollte man in diesem Fall darauf verzichten, das Home-Verzeichnis einzubinden (siehe auch Erweiterte Konfiguration).
Als Benutzer der AMD64-Version von Ubuntu sieht man sich mitunter mit dem Problem konfrontiert, dass man bestimmte Programme benötigt, die jedoch nur in einer 32-Bit-Version vorliegen. Da die AMD64-Technologie in der Hinsicht abwärtskompatibel ist, dass auch unter einem 64-Bit-System gleichzeitig 32-Bit-Programme ausgeführt werden können, steht dem Einsatz derartiger Programme prinzipiell nichts im Weg (siehe auch 64bit-Architektur). Häufig jedoch benötigen "größere" Programme (wie beispielsweise der Firefox-Browser) noch zusätzliche Systembibliotheksdateien, um tatsächlich funktionieren zu können, von diesen Bibliotheken muss dann ebenfalls eine 32-Bit-Version vorliegen. Wenngleich es zwar prinzipiell auch möglich ist, gleichzeitig 32-Bit-Versionen und 64-Bit-Versionen von Bibliotheksdateien auf dem System zu installieren, ist dies in der Praxis sehr umständlich und daher nur in individuellen Einzelfällen interessant. Dieser Abschnitt beschreibt die Besonderheiten einer 32-Bit-chroot-Umgebung auf einem 64-Bit-System.
Zum Erstellen der chroot-Umgebung verwendet man folgenden Befehl:
sudo debootstrap --arch i386 precise /chroot-precise32 http://de.archive.ubuntu.com/ubuntu/
Man kann folgende schroot-Konfiguration benutzen:
für Ubuntu 12.04:
1 2 3 4 5 6 7 8 | [precise32] description=Ubuntu 12.04 Precise Pangolin (32 Bit) directory=/chroot-precise32 users=BENUTZER type=directory script-config=desktop/config personality=linux32 preserve-environment=true |
ab Ubuntu 14.04:
1 2 3 4 5 6 7 8 | [trusty32] description=Ubuntu 14.04 Trusty Tahr (32 Bit) directory=/chroot-trusty32 users=BENUTZER type=directory profile=desktop personality=linux32 preserve-environment=true |
Weitere Hinweise:
Damit die Anwendungen auf deutsch sind, sollten die entsprechenden Sprachpakete in der chroot-Umgebung installiert werden, siehe dazu im Artikel Spracheinstellungen.
Damit graphische Anwendungen genauso aussehen, wie außerhalb der chroot-Umgebung, muss das entsprechende Design installiert sein. Die Standard-Ubuntu-Designs Ambiance und Radiance befinden sich im Paket light-themes.
Die 32-Bit-Version des Paketmanagers Synaptic kann man mittels
sudo apt-get install synaptic
in der chroot-Umgebung installieren.
Für graphische Programme kann man einen Programmstarter erstellen. Unter "Befehl" stellt man schroot -c precise32 --
dem Befehlsnamen voran. Bei Programmen, die Root-Rechte [4] brauchen, muss der gksu-Teil vor schroot stehen, zum Beispiel für Synaptic:
gksu --description /usr/share/applications/synaptic.desktop -- schroot -c precise32 -- /usr/sbin/synaptic
Eine chroot-Umgebung kann nützlich sein beim
Testen von Kompilieranleitungen
Testen, ob Pakete in einer Minimalumgebung installierbar und voll funktionsfähig sind
Testen von Programmen auf anderen Distributionen und Versionen.
Testen von Programmen aus Entwicklerversionen.
Beschreibung | Ubuntu 12.04 | Ubuntu 14.04 |
Der schroot-Befehl | schroot | schroot |
Dateiformat für chroot-Beschreibungen | schroot.conf | schroot.conf |
Dateiformat für chroot-Profile | schroot-script-config | schroot-script-config |
Schroot setup-Skripte | schroot-setup | schroot-setup |
Häufige Fragen | schroot-faq | schroot-faq |
Diese Revision wurde am 27. Januar 2016 10:34 von frustschieber erstellt.