SCHROOT(1) 2022 SCHROOT(1)

schroot - eine Chroot-Umgebung sicher betreten

ÜBERSICHT

schroot [-h|--help | -V|--version | -l|--list | -i|--info | --config | --location | --automatic-session | -b|--begin-session | --recover-session | -r|--run-session | -e|--end-session] [-f|--force] [-n Sitzungsname|--session-name=Sitzungsname] [-d Verzeichnis|--directory=Verzeichnis] [-u Benutzer|--user=Benutzer] [-p|--preserve-environment] [-s Shell|--shell=Shell] [-q|--quiet | -v|--verbose] [-c Chroot|--chroot=Chroot | [--all | --all-chroots | --all-source-chroots | --all-sessions] [--exclude-aliases]] [-o|--option=Schlüssel=Wert] [--] [BEFEHL [ ARG1 [ ARG2 [ ARGn]]]]

schroot ermöglicht dem Benutzer einen Befehl oder eine Login-Shell in einer Chroot-Umgebung auszuführen. Falls kein Befehl angegeben wurde, wird eine Login-Shell im aktuellen Arbeitsverzeichnis des Benutzers innerhalb der Chroot gestartet.

Der Befehl ist ein Programm plus so viele optionale Argumente wie benötigt. Jedes Argument kann separat in Anführungszeichen gesetzt werden.

Das Verzeichnis, in dem der Befehl oder die Login-Shell ausgeführt wird, hängt vom Kontext ab. Eine vollständige Beschreibung finden Sie nachfolgend unter der Option --directory.

Jede Chroot-Benutzung wird in den Systemprotokollen vermerkt. In einigen Situationen kann es nötig sein, dass sich der Benutzer selbst authentifizieren muss; lesen Sie dazu den nachfolgenden Abschnitt »Authentifizierung«.

Falls keine Chroot angegeben wurde, wird als Ausweichmöglichkeit der Name oder Alias »default« benutzt. Dies ist gleichbedeutend mit »--chroot=default«.

ÜBERBLICK

Es ist öfters nötig, Programme in einer virtualisierten Umgebung auszuführen, als direkt auf dem Wirtsystem. Anders als andere Virtualisierungssysteme wie kvm oder Xen virtualisiert Schroot nicht das ganze System; es virtualisiert nur das Dateisystem und einige Teile des Dateisystems können immer noch mit dem Wirt gemeinsam benutzt werden. Es ist daher schnell, leichtgewichtig und flexibel. Es virtualisiert jedoch keine anderen Aspekte des Systems wie gemeinsam genutzten Speicher, Netzwerk, Geräte etc. und könnte daher, abhängig von der geplanten Verwendung, weniger sicher sein als andere Systeme. Einige Beispiele existierender Verwendungen von Schroot beinhalten:

Ausführung eines nicht vertrauenswürdigen Programms in einer Sandbox, so dass es keine Dateien auf dem Wirtsystem beeinträchtigt. Dies kann außerdem benutzt werden, um den Schaden zu begrenzen, den ein kompromittierter Dienst dem Wirt zufügen kann.
Benutzung einer definierten und sauberen Umgebung, um die Reproduzierbarkeit und Integrität einer gegebenen Aufgabe zu garantieren
Verwendung unterschiedlicher Versionen eines Betriebssystems oder sogar unterschiedlicher Betriebssysteme zusammen, z.B. verschiedener GNU/Linux-Distributionen
Ausführen von 32-Bit-Programmen mittels einer 32-Bit-Chroot auf einem 64-Bit-Wirtsystem
Automatisches Bauen von Debian-Paketen mittels sbuild(1), das jedes Paket in einem unberührten Chroot-Schnappschuss baut, wenn LVM-Schnappschüsse oder Unions verwendet werden.
Unterstützung mehrerer System-Images in einer Cluster-Einrichtung, wobei das Ändern des Basis-Images zeitintensiv ist und/oder all die von Benutzern benötigten Konfigurationen zu unterstützen schwierig ist: Verschiedene Chroots können all die verschiedenen benötigten Konfigurationen unterstützen und Benutzern des Clusters kann Zugriff auf die von ihnen benötigten Chroots gegeben werden (was Root-Zugriff für vertrauenswürdige Benutzer zum Verwalten ihrer eigenen Images beinhalten kann).

Eine Chroot kann durch Ausführen von chroot(8) direkt durch Root benutzt werden, aber normale Anwender können diesen Befehl nicht verwenden. schroot gibt mit dem gleichen Mechanismus normalen Benutzern Zugriff auf Chroots, aber mit mehreren zusätzlichen Funktionen. Obwohl Schroot genau wie chroot(8) ein Verzeichnis als Chroot benutzt, erfordert es nicht, das es sich dabei um ein normales Verzeichnis im Dateisystem handelt. Obwohl dies vorgegeben ist, kann die Chroot ebenso aus einer Datei, einem Dateisystem einschließlich LVM- und Btrfs-Schnappschüsse sowie Loopback-Mounts bestehen oder aus UnionFS-Einblendungen zusammengestellt sein. Da es vom Benutzer erweiterbar ist, wird der Gültigkeitsbereich für das Erstellen von Chroots aus verschiedenen Quellen nur durch Ihre Fantasie begrenzt. Schroot führt Rechteprüfungen durch und ermöglicht zusätzlich eine automatisierte Einrichtung der Chroot-Umgebung, wie das Einhängen zusätzlicher Dateisysteme oder anderer Konfigurationsaufgaben. Diese automatisierte Einrichtung wird durch die Aktion von Einrichtungsskripten erledigt, die zum Durchführen der benötigten Aktionen angepasst und erweitert werden können. Typische Aktionen beinhalten das Einhängen des Home-Verzeichnisses des Benutzers, das Einrichten des Netzwerkzugangs und von Systemdatenbanken und sogar das Starten von Diensten. Diese können wiederum vollständig durch den Admin angepasst werden. Die Einrichtungsskripte werden für alle Typen von Chroots ausgeführt mit Ausnahme des Typs »plain«, des einfachsten Chroot-Typs, der gar keine automatisierten Einrichtungsfunktionen bietet. Die Einrichtung von Chroots wird ausführlicher in schroot.conf(5) behandelt.

schroot akzeptiert die folgenden Optionen:

zeigt eine Zusammenfassung der Hilfe.
gibt Versionsinformationen aus.
führt alle verfügbaren Chroots auf.
gibt detaillierte Informationen über die angegebenen Chroots aus.
gibt die Konfiguration der angegebenen Chroots aus. Dies ist nützlich, um zu prüfen, ob die gerade benutzte Konfiguration die selbe ist, wie die in der Konfigurationsdatei. Jegliche Kommentare der Originaldatei werden fehlen.
gibt dem Speicherort (Pfad) der angegebenen Chroots aus. Beachten Sie, dass Chroot-Typen, die nur innerhalb einer Sitzung benutzt werden können, keinen Speicherort haben werden, bis sie aktiv sind.

gibt nur wichtige Nachrichten aus.
gibt alle Nachrichten aus

gibt eine Chroot oder aktive Sitzung an, die benutzt werden soll. Diese Option kann zur Angabe mehrerer Chroots mehrfach angegeben werden. In diesem Fall sind die Auswirkungen ähnlich --all. Dem Chroot-Namen kann ein Namensraum vorangestellt werden; siehe den nachfolgenden Abschnitt »Chroot-Namensräume«.
wählt alle Chroots, Source-Chroots und aktiven Sitzungen aus. Wenn ein Befehl angegeben wurde, wird der Befehl in allen Chroots, Source-Chroots und aktiven Sitzungen ausgeführt. Falls --info benutzt wurde, werden Informationen über alle Chroots angezeigt. Diese Option ist bei Verwendung einer Login-Shell nicht sinnvoll (wird ausgeführt, falls kein Befehl angegeben wurde). Diese Option entspricht »--all-chroots --all-source-chroots --all-sessions«.
wählt alle Chroots aus; identisch mit --all, außer, dass Source-Chroots und aktive Sitzungen nicht berücksichtigt werden.
wählt alle aktiven Sitzungen aus; identisch mit --all, außer, dass Chroots und Source-Chroots nicht berücksichtigt werden.
wählt alle Source-Chroots aus; identisch mit --all, außer, dass Chroots und Sitzungen nicht berücksichtigt werden.
wählt keine Aliase zusätzlich zu Chroots aus. Dies stellt sicher, dass nur echte Chroots ausgewählt sind und nur einmal aufgeführt werden.

wechselt nach Verzeichnis innerhalb der Chroot, bevor der Befehl oder die Login-Shell ausgeführt wird. Falls Verzeichnis nicht verfügbar ist, wird Schroot mit einem Fehlerstatus beendet.
Das Standardverhalten ist wie folgt (alle Verzeichnispfade liegen innerhalb der Chroot): Eine Login-Shell wird im aktuellen Arbeitsverzeichnis ausgeführt. Falls dies nicht verfügbar ist, wird es der Reihe nach $HOME probieren (wenn --preserve-environment benutzt wird), dann das Home-Verzeichnis des Benutzers und dann / innerhalb der Chroot. Falls keines der Verzeichnisse verfügbar ist, wird Schroot mit einem Fehlerstatus beendet.
wird als anderer Benutzer ausgeführt. Standardmäßig wird es als aktueller Benutzer ausgeführt. Falls benötigt, kann vom Benutzer verlangt werden, dass er sich selbst mit einem Passwort authentifiziert. Weitere Informationen finden Sie im nachfolgenden Abschnitt »Authentifizierung«.
bewahrt die Umgebung des Benutzers innerhalb der Chroot-Umgebung auf. Standardmäßig wird eine saubere Umgebung benutzt. Diese Option kopiert die ganze Benutzerumgebung und setzt sie in der Sitzung. Die erlaubten Umgebungsvariablen sind Gegenstand mehrerer Einschränkungen. Siehe den nachfolgenden Abschnitt »Umgebung«.
benutzt Shell als Login-Shell. Wenn eine Login-Shell ausgeführt wird, werden mehrere mögliche Shells in dieser Reihenfolge berücksichtigt: der Befehl in der Umgebungsvariable SHELL (falls --preserve-environment benutzt wird oder preserve-environment aktiviert ist, die Shell des Benutzers in der Datenbank »passwd«, /bin/bash und am Ende /bin/sh. Diese Option setzt diese Liste außer Kraft und wird die angegebene Shell verwenden. Diese Option setzt außerdem den Konfigurationsschlüssel shell außer Kraft, falls gesetzt.
setzt eine Option. Der Wert ausgewählter Schlüssel in schroot.conf kann mittels dieser Option geändert werden. Der Schlüssel muss im Konfigurationsschlüssel user-modifiable-keys in schroot.conf vorhanden sein oder zusätzlich der Schlüssel user-modifiable-keys, falls es als Root-Benutzer ausgeführt wird (oder darauf umgeschaltet wird). Der hier gesetzte Schlüssel und Wert wird in der Umgebung der Einrichtungsskripte gesetzt und könnte daher benutzt werden, um die Chroot auf Sitzungsbasis anzupassen.

startet eine Sitzung, führt sie aus und beendet sie automatisch. Dies ist die Standardaktion und muss daher nicht bei normalen Transaktionen angegeben werden.
startet eine Sitzung. Ein eindeutiger Sitzungsbezeichner (Sitzungskennung) wird auf der Standardausgabe zurückgegeben. Die Sitzungskennung wird zum Benutzen der anderen Sitzungsoptionen benötigt. Beachten Sie, dass der Sitzungsbezeichner mit der Option --session-name angegeben werden kann.
stellt eine existierende Sitzung wieder her. Falls eine existierende Sitzung nicht mehr vorhanden war, zum Beispiel weil sie wegen eines Neustarts nicht mehr eingehängt war, wird diese Option die Sitzung wieder zur Benutzung verfügbar machen, beispielsweise durch erneutes Einhängen. Die Sitzungskennung wird mit der Option --chroot angegeben.
führt eine existierende Sitzung aus. Die Sitzungskennung wird mit der Option --chroot angegeben.
beendet eine existierende Sitzung. Die Sitzungskennung wird mit der Option --chroot angegeben.

benennt eine Sitzung. Der angegebene Sitzungsname ersetzt den Standardsitzungsnamen, der eine automatisch erzeugte Sitzungskennung enthält. Der Sitzungsname darf keinen Namensraumbezeichner enthalten, da Sitzungen immer im Namensraum »session:« erstellt werden. Der Sitzungsname ist außerdem Gegenstand der in schroot.conf(5) dokumentierten Chroot-Namensbeschränkungen.
erzwingt eine Sitzungstransaktion sogar dann, wenn sie andernfalls fehlschlagen würde. Dies kann benutzt werden, um eine Sitzung gewaltsam zu beenden, auch wenn sie aktive Benutzer hat. Dies gewährleistet nicht, dass die Sitzung ordnungsgemäß beendet wird. Es kann zum Beispiel vorkommen, dass Dateisysteme nicht ausgehängt werden.

--
beendet die Optionen; wird benutzt, um das Ende der Schroot-Optionen anzuzeigen. Alle nachfolgenden Optionen werden an den ausgeführten Befehl statt an Schroot übergeben.

Falls der Benutzer kein erlaubter Benutzer oder Mitglied der erlaubten Gruppen (oder beim Wechsel zu Root, kein erlaubter Root-Benutzer oder Mitglied der erlaubten Root-Gruppen) für die angegebene(n) Chroot(s) ist, wird die Erlaubnis sofort verweigert. Falls sich der Benutzer ändert und der Benutzer, der den Befehl ausführt, Zugriff hat, ist es nötig, dass sich der Benutzer selbst mittels der Anmeldedaten des Benutzers authentifizieren muss, zu dem gewechselt wird.

Auf Systemen, die anschließbare Authentifizierungsmodule (Pluggable Authentication Modules, PAM) unterstützen, wird Schroot PAM zur Authentifizierung und Autorisierung von Benutzern verwenden. Falls dies der Fall ist, wird Schroot nach einem Passwort fragen, wenn erforderlich. Falls PAM nicht verfügbar ist, wird jegliche Authentifizierung automatisch fehlschlagen (Benutzerwechsel ohne PAM wird nicht unterstützt).

Beachten Sie, dass dem Benutzer Root, falls PAM benutzt wird, standardmäßig keine Sonderrechte im Programm gewährt werden. Die Standard-PAM-Konfiguration erlaubt Root jedoch die Anmeldung ohne Passwort (pam_rootok.so). Dies kann aber deaktiviert sein, um Root daran zu hindern auf alle Chroots zuzugreifen, es sei denn, dies ist eigens erlaubt. In einer derartigen Situation muss Root zu den erlaubten Benutzern oder Gruppen hinzugefügt werden, wie andere Benutzer und Gruppen. Falls PAM nicht verfügbar ist, wird es dem Benutzer Root erlaubt sein, auf alle Chroots zuzugreifen, sogar, wenn nicht explizit Zugriff gewährt wurde.

Es gibt drei unterschiedliche Chroot-Typen: normale Chroots, Source-Chroots und Sitzungs-Chroots. Diese unterschiedlichen Typen von Chroots werden in unterschiedliche Namensräume aufgeteilt. Ein Namensraum ist ein Präfix eines Chroot-Namens. Derzeit gibt es drei Namensräume: »chroot:«, »source:« und »session:«. Benutzen Sie --list --all, um alle verfügbaren Chroots in allen Namensräumen aufzuführen. Da »:« als Trenner zwischen Namensräumen und Chroot-Namen benutzt wird, ist es nicht erlaubt, dieses Zeichen in Chroot-Namen zu verwenden.

Abhängig davon, welche Aktion Sie von Schroot abfragen, kann es nach der Chroot in einem der drei Namensräume nachsehen oder es könnte ein bestimmter Namensraum angegeben werden. Eine Chroot mit Namen »sid« heißt zum Beispiel tatsächlich »chroot:sid«, falls der Namensraum enthalten ist, der Namensraum kann aber für die meisten Aktionen weggelassen werden.

Einige Chroot-Typen, zum Beispiel LVM- und Btrfs-Schnappschüsse, stellen durch die Sitzung verwaltete Copy-On-Write-Schnappschüsse der Chroot bereit. Diese stellen außerdem eine Source-Chroot bereit, um einen einfachen Zugriff auf das Dateisystem zu ermöglichen, das als Quelle für Schnappschüsse verwendet wird. Dies sind ebenso normale Chroots, bei denen nur die Schnappschüsse deaktiviert sind. Für eine Chroot mit Namen »sid-snapshot« (d.h. mit einem vollqualifizierten Namen »chroot:sid-snapshot«) wird es auch eine entsprechende Source-Chroot mit Namen »source:sid-snapshot« geben. Frühere Versionen von Schroot stellten Source-Chroots mit einer Endung »-source« zur Verfügung. Diese werden aus Kompatibilitätsgründen ebenfalls bereitgestellt. In diesem Beispiel wäre dies »chroot:sid-snapshot-source«. Diese Kompatibilitätsnamen werden in zukünftigen Versionen fallengelassen, daher sollten Programme und Skripte zur Benutzung namensraumqualifizierter Namen wechseln, statt die alte Endung zu verwenden.

Alle Sitzungen, die mit --begin-session erzeugt wurden, werden innerhalb des Namensraums »session:« platziert. Ein Sitzungsname mit --session-name kann irgendeinen Namen haben, sogar den selben Namen wie die Chroot, aus der er erstellt wurde, vorausgesetzt, dass er innerhalb dieses Namensraums eindeutig ist. Dies war in früheren Versionen von Schroot, die keine Namensräume hatten, nicht erlaubt.

Alle Aktionen mit Ausnahme einiger Sitzungsaktionen benutzen »chroot:« als Standardnamensraum. --run-session, --recover-session und --end-session verwenden stattdessen »session:« als Standardnamensraum, da diese Aktionen mit Sitzungs-Chroots arbeiten. Das Ergebnis ist, dass der Namensraum normalerweise nie benötigt wird, es sei denn, Sie möchten mit einer Chroot in einem anderen als dem vorgegebenen Namensraum arbeiten, wie etwa wenn eine Source-Chroot benutzt wird. Um die Chroot-Auswahl unmissverständlich zu machen, ist es immer möglich, den vollständigen Namen einschließlich des Namensraums zu verwenden, sogar wenn dies nicht strikt erforderlich ist.

Auf einigen Dateisystemen, zum Beispiel Btrfs, ist die Leistung wegen der vielen durchgeführten Fsync-Transaktionen schlecht, wenn Dpkg ausgeführt wird. Dies kann durch die Installation des Pakets »eatmydata« und anschließendem Hinzufügen von »eatmydata« zum Konfigurationsschlüssel command-prefix, der alle Fsync-Transaktionen deaktiviert, gemildert werden. Beachten sie, dass dies in Schnappschuss-Chroots getan werden sollte, in denen Datenverlust kein Problem darstellt. Dies ist nützlich, wenn eine Chroot zum Beispiel zum Bauen von Paketen benutzt wird.

Schroot wird ein geeignetes Verzeichnis auswählen, das innerhalb der Chroot benutzt werden soll, abhängig davon, ob eine interaktive Login-Shell benutzt werden soll, welcher Befehl ausgeführt oder ob zusätzlich die Option --directory verwendet wird. Im Fall, dass Befehle direkt ausgeführt werden oder explizit ein Verzeichnis angegeben wird, wird aus Sicherheits- und Konsistenzgründen nur ein Verzeichnis benutzt, während für eine Login-Shell mehrere Möglichkeiten ausprobiert werden können. Die folgenden Unterabschnitte führen die Reserveabfolge für jeden Fall auf. CWD ist das aktuelle Arbeitsverzeichnis, DIR ist das mit --directory angegebene Verzeichnis.

Übergang
(Rechner → Chroot) Kommentar
CWD → CWD normales Verhalten (falls --directory nicht benutzt wird)
CWD → $HOME falls CWD nicht existiert und --preserve-environment benutzt wird
CWD → passwd pw_dir falls CWD nicht existiert (oder --preserve-environment benutzt wird und $HOME nicht existiert)
CWD → / keins davon existiert
FAIL falls / nicht existiert

Übergang
(Rechner → Chroot) Kommentar
CWD → CWD normales Verhalten (falls --directory nicht benutzt wird)
FAIL falls CWD nicht existiert

Unter irgendwelchen Umständen kann es vorkommen, dass keine Reserve existiert.

--directory benutzt

Übergang
(Rechner → Chroot) Kommentar
CWD → VERZ normales Verhalten
FAIL falls VERZ nicht existiert

Unter irgendwelchen Umständen kann es vorkommen, dass keine Reserve existiert.

Beachten Sie, dass --debug=Mitteilung die interne Reserveliste anzeigen wird, die für diese Sitzung berechnet wurde.

% schroot -l↵
chroot:default
chroot:etch
chroot:sid
chroot:testing
chroot:unstable

% schroot -i -c sid↵
  ——— Chroot ———
  Name                   sid
  Beschreibung           Debian sid (unstable)
  Typ                    plain
  Priorität              3
  Benutzer               rleigh
  Gruppen                sbuild
  Root-Benutzer
  Root-Gruppen           sbuild
  Alias-Kennungen        unstable unstable-sbuild unstable-powerpc-sbuild
  Umgebungsfilter        ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|
                         KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|
                         NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|
                         TERMINFO_DIRS|TERMPATH)$
  Einr.-Skripte ausf.    true
  Skript-Konfiguration   script-defaults
  Verwaltete Sitzung     true
  Persönlichkeit         linux32
  Ort                    /srv/chroot/sid

Verwenden Sie --all beziehungsweise mehrfach -c, um alle oder mehrere Chroots zu benutzen.

% schroot -c sid /bin/ls↵
[sid chroot] Befehl »/bin/ls« gestartet
CVS          sbuild-chroot.c   sbuild-session.h  schroot.conf.5
Makefile     sbuild-chroot.h   schroot.1         schroot.conf.5.in
Makefile.am  sbuild-config.c   schroot.1.in
Makefile.in  sbuild-config.h   schroot.c
pam          sbuild-session.c  schroot.conf
% schroot -c sid -- ls -1 | head -n 5↵
[sid chroot] Befehl »ls -1« gestartet
ABOUT-NLS
AUTHORS
COPYING
ChangeLog
INSTALL

benutzt --, um zu ermöglichen, dass Optionen, die im Befehl mit »-« oder »--« beginnen, in der Chroot ausgeführt werden. Dies verhindert, dass sie als Optionen für Schroot selbst interpretiert werden. Beachten Sie, dass die obere Zeile auf die Standardfehlerausgabe und die übrigen Zeilen auf die Standardausgabe ausgegeben werden. Dies ist beabsichtigt, so dass Programmausgaben von in der Chroot ausgeführten Befehlen weiter- und umgeleitet werden können, wenn nötig. Die Daten werden die selben sein, wie bei der Ausführung des Befehls direkt auf dem Wirtsystem.

% schroot -c sid -u root↵
Passwort:
[sid chroot] (rleigh→root) Login-Shell »/bin/bash«
gestartet:
#

Falls der Benutzer »rleigh« in root-users in /etc/schroot/schroot.conf war oder zu einer der Gruppen in root-groups gehörte, würde ihm Root-Zugriff gewährt, aber der PAM-Autorisierungsschritt wird immer noch angewandt.

Es könnte nötig sein, dass eine Chroot mehr als einen Befehl ausführt. Dies ist hauptsächlich dann nötig, wenn die Chroot direkt von einem LVM-LV oder einer Datei auf der Platte erstellt wurde, um sie während eine Aufgabe (oder ein Satz von Aufgaben) durchgeführt wird, beständig zu machen. Zu diesem Zweck existieren Sitzungen. Für einfache Chroot-Typen wie »plain« und »directory« können Sitzungen erstellt werden, sind aber nicht zwingend nötig.

Lassen Sie uns starten, indem wir uns eine sitzungsfähige Chroot ansehen:

% schroot -i -c sid-snap↵
  ——— Chroot ———
  Name                   sid-snap
  Beschreibung           Debian sid snapshot
  Typ                    lvm-snapshot
  Priorität              3
  Benutzer               maks rleigh
  Gruppen                sbuild
  Root-Benutzer
  Root-Gruppen           sbuild
  Aliase-Kennungen
  Umgebungsfilter        ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|
                         KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|
                         NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|
                         TERMINFO_DIRS|TERMPATH)$
  Einr.-Skripte ausf.    true
  Skript-Konfiguration   script-defaults
  Verwaltete Sitzung     true
  Persönlichkeit         linux
  Gerät                  /dev/hda_vg/sid_chroot
  Einbindungsoptionen    -o atime,async,user_xattr
  Quellbenutzer
  Quellgruppen           root rleigh
  Quell-Root-Benutzer
  Quell-Root-Gruppen     root rleigh
  LVM-Schnappschuss-Opt. --size 2G -c 128

Beachten Sie, dass die Option Verwaltete Sitzung auf »true« gesetzt ist. Dies ist eine Voraussetzung, um die Sitzungsverwaltung zu benutzen und wird von den meisten Chroot-Typen unterstützt. Als nächstes werden wir eine neue Sitzung erstellen:

% schroot -b -c sid-snap↵
sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f

Die Sitzungskennung der neu erstellten Sitzung wird auf der Standardausgabe zurückgegeben. Es ist üblich, sie wie hier gezeigt zu speichern:

% SESSION=$(schroot -b -c sid-snap)↵
% echo $SESSION↵
sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f

Die Sitzung kann genauso wie jede normale Chroot benutzt werden. Die Sitzung sieht etwa so aus:

% schroot -i -c sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f↵
  ——— Session ———
  Name                   sid-snap-46195b04-0893-49bf-beb8-0d\
4ccc899f0f
  Beschreibung           Debian sid snapshot
  Typ                    lvm-snapshot
  Priorität              3
  Benutzer               maks rleigh
  Gruppen                sbuild
  Root Users
  Root-Gruppen           root sbuild
  Alias-Kennungen
  Umgebungsfilter        ^(BASH_ENV|CDPATH|ENV|HOSTALIASES|IFS|KRB5_CONFIG|
                         KRBCONFDIR|KRBTKFILE|KRB_CONF|LD_.*|LOCALDOMAIN|
                         NLSPATH|PATH_LOCALE|RES_OPTIONS|TERMINFO|
                         TERMINFO_DIRS|TERMPATH)$
  Einr.-Skripte ausf.    true
  Skript-Konfiguration   script-defaults
  Verwaltete Sitzung     true
  Persönlichkeit         linux
  Einbindungsort         /var/lib/schroot/mount/sid-snap-461\
95b04-0893-49bf-beb8-0d4ccc899f0f
  Pfad                   /var/lib/schroot/mount/sid-snap-461\
95b04-0893-49bf-beb8-0d4ccc899f0f
  Einzubindendes Gerät   /dev/hda_vg/sid-snap-46195b04-0893-\
49bf-beb8-0d4ccc899f0f
  Gerät                  /dev/hda_vg/sid_chroot
  Einbindungsoptionen    -o atime,async,user_xattr
  Quellbenutzer
  Quellgruppen           root rleigh
  Quell-Root-Benutzer
  Quell-Root-Gruppen     root rleigh
  LVM-Schnappsch.-Gerät  /dev/hda_vg/sid-snap-46195b04-0893-\
49bf-beb8-0d4ccc899f0f
  LVM-Schnappschuss-Opt. --size 2G -c 128

Nun wurde die Sitzung erstellt, Befehle können darin ausgeführt werden:

% schroot -r -c sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f -- \
  uname -sr↵
I: [sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f chroot] Befehl \
»uname -sr« gestartet
Linux 2.6.18-3-powerpc
% schroot -r -c $SESSION -- uname -sr↵
I: [sid-snap-fe170af9-d9be-4800-b1bd-de275858b938 chroot] Befehl \
»uname -sr« gestartet
Linux 2.6.18-3-powerpc

Wenn alle Befehle, die in der Sitzung ausgeführt werden sollen, durchgeführt wurden, kann die Sitzung beendet werden:

% schroot -e -c sid-snap-46195b04-0893-49bf-beb8-0d4ccc899f0f
% schroot -e -c $SESSION

Letztendlich können Sitzungsnamen lang und unhandlich sein. Statt die automatisch erzeugte Sitzungskennung zu benutzen, kann ein Name angegeben werden.

% schroot -b -c sid-snap -n mein-Sitzungsname
mein-Sitzungsname

Falls etwas nicht funktioniert und aus den Fehlermeldungen nicht hervorgeht, was falsch ist, versuchen Sie die Option --debug=Stufe zu benutzen, um Debug-Meldungen einzuschalten. Dies gibt eine große Menge weiterer Informationen. Gültige Debug-Stufen sind »none« und »notice«, »info«, »warning« und »critical« nach zunehmender Schwere geordnet. Je niedriger der Schweregrad desto mehr wird ausgegeben.

Falls Sie immer noch Schwierigkeiten haben, können die Entwickler auf der Mailingliste kontaktiert werden:
Debian-Buildd-Tools-Entwickler
<buildd-tools-devel@lists.alioth.debian.org>

Auf den Architekturen mips und mipsel haben Linux-Kernel bis einschließlich Version 2.6.17 kaputte personality(2)-Unterstützung, die dazu führt, dass das Setzen der Persönlichkeit fehlschlägt. Dies wird als ein »Transaktion nicht erlaubt«-Fehler (EPERM) gesehen. Um dieses Problem zu umgehen setzen Sie personality auf »undefined« oder führen Sie ein Upgrade auf einen aktuelleren Kernel durch.

Standardmäßig werden die Umgebungsvariablen nicht aufbewahrt. Die folgenden sind definiert: HOME, LOGNAME, PATH, SHELL, TERM (aufbewahrt, falls bereits definiert) und USER. Die Umgebungsvariablen SCHROOT_COMMAND, SCHROOT_USER, SCHROOT_GROUP, SCHROOT_UID und SCHROOT_GID, die innerhalb der Chroot gesetzt sind, geben den ausgeführten Befehl, den Benutzernamen, den Gruppennamen, die Benutzer- beziehungsweise die Gruppenkennung an. Zusätzlich geben die Umgebungsvariablen SCHROOT_SESSION_ID, SCHROOT_CHROOT_NAME und SCHROOT_ALIAS_NAME die Sitzungskennung, den Original-Chroot-Namen vor dem Erstellen der Sitzung beziehungsweise den Alias, mit dem die ursprünglich ausgewählte Chroot identifiziert wird, an.

Die folgenden möglicherweise gefährlichen Umgebungsvariablen sind aus Sicherheitsgründen entfernt: BASH_ENV, CDPATH, ENV, HOSTALIASES, IFS, KRB5_CONFIG, KRBCONFDIR, KRBTKFILE, KRB_CONF, LD_.*, LOCALDOMAIN, NLSPATH, PATH_LOCALE, RES_OPTIONS, TERMINFO, TERMINFO_DIRS und TERMPATH. Falls gewünscht, wird der Konfigurationsschlüssel environment-filter das Ändern der Auschlussliste ermöglichen. Weitere Einzelheiten finden Sie unter schroot.conf(5).

/etc/schroot/schroot.conf
die systemweite Chroot-Definitionsdatei. Diese Datei muss dem Benutzer Root gehören und darf nicht durch andere beschreibbar sein.
/etc/schroot/chroot.d
Zusätzliche Chroot-Definitionen können in Dateien unterhalb dieses Verzeichnisses abgelegt werden. Sie werden auf exakt die gleiche Weise wie /etc/schroot/schroot.conf behandelt. Jede Datei kann eine oder mehrere Chroot-Definitionen enthalten. Beachten Sie, dass die Dateien in diesem Verzeichnis die gleichen Namensregeln wie run-parts(8) befolgen, wenn mit der Option --lsbsysinit gestartet wird.
/etc/schroot/setup.d
die systemweiten Verzeichnisse für Chroot-Einrichtungsskripte. Siehe schroot-setup(5).
/etc/pam.d/schroot
PAM-Konfiguration

/usr/lib/schroot
Verzeichnis, das von Einrichtungsskripten benutzte Hilfsprogramme enthält

Jedes Verzeichnis enthält ein Verzeichnis oder eine Datei mit dem Namen von jeder Sitzung. Nicht alle Chroot-Typen benutzen alle folgenden Verzeichnisse.

/var/lib/schroot/session
Verzeichnis, das die Sitzungskonfiguration für jede aktive Sitzung enthält
/var/run/schroot/mount
Verzeichnis, das zum Einhängen der durch jede aktive Sitzung benutzten Dateisysteme verwendet wird
/var/lib/schroot/union/underlay
Verzeichnis, das für vereinte (darunterliegende) Dateisystemquellen benutzt wird
/var/lib/schroot/union/overlay
Verzeichnis, das für vereinte beschreibbare Dateisystemeinblendungen benutzt wird
/var/lib/schroot/unpack
Verzeichnis, das zum Entpacken von Datei-Chroots benutzt wird

Roger Leigh

Copyright © 2005-2012 Roger Leigh <rleigh@codelibre.net>

schroot ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.

dchroot(1), sbuild(1), chroot(2), schroot.conf(5). schroot-setup(5), schroot-faq(7), run-parts(8),

14 Aug