ubuntuusers.de

schroot

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Artikel für fortgeschrittene Anwender

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:

Dieser Artikel beschreibt nur die grundlegende Verwendung von schroot. Für weitere Informationen kann man die Manpages zu Rate ziehen.

Einrichtung

Folgende Pakete müssen installiert werden [1]:

  • debootstrap (zur Einrichtung von chroot-Umgebungen)

  • schroot (universe [2])

Befehl zum Installieren der Pakete:

sudo apt-get install debootstrap schroot 

Oder mit apturl installieren, Link: apt://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.

Benutzung

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 

Entfernen

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).

Achtung!

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/ 

Erweiterte Konfiguration

Dateisysteme einbinden

Ü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.

Dateien übernehmen

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.

Mehrere chroot-Umgebungen unterschiedlich konfigurieren

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.

Profile ab Ubuntu 14.04

Man fügt in die Konfiguration der entsprechenden chroot-Umgebung folgende Zeile ein:

1
profile=Profil

Der Vorgabewert ist default.

Hinweise

  • 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.

Anwendungsbeispiele

Programme in einer anderen Version installieren

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).

32-Bit-Programme in einer 64-Bit-Installation verwenden

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 (Abschnitt „32-Bit-Programme-erzwingen“)). 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:

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 

Entwickeln und Testen von Software

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.

Manpages zu schroot

Beschreibung Ubuntu 14.04
Der schroot-Befehl schroot 🇬🇧
Dateiformat für chroot-Beschreibungen schroot.conf 🇬🇧
Dateiformat für chroot-Profile schroot-script-config 🇬🇧
Schroot setup-Skripte schroot-setup 🇬🇧
Häufige Fragen schroot-faq 🇬🇧

Diese Revision wurde am 6. Februar 2020 18:57 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Shell, chroot, Server