ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

schroot

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

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. Ab Hardy ist dchroot nur noch ein Wrapper um schroot.

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 (ab Ubuntu 10.10) und Overlay-Dateisysteme wie aufs, UnionFS und OverlayFS (ab Ubuntu 12.04).

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

Einrichtung

Folgende Pakete müssen installiert werden [1]:

  • debootstrap (zur Einrichtung von chroot-Umgebungen)

  • schroot (universe [2])

Wiki/Vorlagen/Installbutton/button.png 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 lucid /chroot-lucid http://de.archive.ubuntu.com/ubuntu/ 

Der Befehl kann eine Weile dauern. Anschließend befindet sich in dem Verzeichnis /chroot-lucid eine Minimalinstallation von Lucid. Statt lucid 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:

[lucid-test]
description=Beschreibung der chroot-Umgebung
type=directory
directory=/chroot-lucid
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).

Achtung!

Aufgrund eines Bugs kann die Verwendung von Upstart innerhalb einer chroot-Umgebung mit Lucid die Stabilität des ganzen Systems beeinträchtigen.

Daher ist es unter Lucid notwendig, vor dem Installieren von Paketen in der chroot-Umgebung folgende Befehle auszuführen:

sudo dpkg-divert --local --rename --add /sbin/initctl
sudo ln -s /bin/true /sbin/initctl 

Die Befehle verhindern, dass versucht wird Upstart-Jobs zu starten. Siehe dazu auch die Veröffentlichungs-Hinweise für Lucid {en} und den Bugreport in Launchpad {en}. Ab Ubuntu 11.04 ist der Bug behoben.

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 lucid-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 lucid-test ls 

Enthält der Befehl Optionen, muss -- vorangestellt werden, damit schroot die Optionen nicht selbst interpretiert:

schroot -c lucid-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-lucid/ 

Erweiterte Konfiguration

Dateisysteme einbinden

Über die Datei /etc/schroot/mount-defaults (bis Ubuntu 10.04) oder /etc/schroot/default/fstab (ab Ubuntu 11.04) 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 Home-Verzeichnis 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/copyfiles-defaults (bis Ubuntu 10.04) oder /etc/schroot/default/copyfiles (ab Ubuntu 11.04) 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. Manchmal sollen verschiedene chroot-Umgebungen für unterschiedliche Einsatzzwecke auch unterschiedlich konfiguriert werden. Dazu fügt man in die Konfiguration der entsprechenden chroot-Umgebung folgende Zeile ein:

script-config=Dateiname

Der Dateiname ist relativ zu /etc/schroot, der Vorgabewert ist script-defaults bis Ubuntu 10.04 und default/config ab Ubuntu 11.04. Das Dateiformat wird in der Manpage schroot-script-config beschrieben.

Ab Ubuntu 11.04 wird der Vorgang erleichtert, indem einige unterschiedliche Profile schon vorhanden sind:

  • default/config: Standardwert, wenn kein Profil angegeben

  • minimal/config: Minimale Konfiguration

  • desktop/config: für Desktop-Anwendungen, mehr Funktionalität des Host-Systems verfügbar

  • sbuild/config und buildd/config (ab Ubuntu 11.10): 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.

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, kann man dies entweder mit der Option -p erreichen oder (ab Ubuntu 11.04) man fügt die Zeile

    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). 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 lucid /chroot-lucid32 http://de.archive.ubuntu.com/ubuntu/ 

Für Ubuntu 10.04 kann man folgende schroot-Konfiguration benutzen:

[lucid32]
description=Ubuntu 10.04 Lucid Lynx (32 Bit)
directory=/chroot-lucid32
users=BENUTZER
type=directory
personality=linux32

und ab Ubuntu 11.04 folgende:

[natty32]
description=Ubuntu 11.04 Natty Narwhal (32 Bit)
directory=/chroot-natty32
users=BENUTZER
type=directory
script-config=desktop/config
personality=linux32
preserve-environment=true

Da unter Ubuntu 10.04 die Konfigurationszeile preserve-environment=true nicht vorhanden ist, muss man dort die Option -p auf der Kommandozeile zusätzlich verwenden.

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, siehe dazu im Artikel GNOME Desktop anpassen. 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 lucid32 -p -- bzw. schroot -c natty32 -- 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 natty32 -- /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.

ubuntuusers.local › Wikischroot