SCHROOT(1)

BEZEICHNUNG
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]]]]

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

OPTIONEN
schroot akzeptiert die folgenden Optionen:

  Aktionen

-h, --help
    zeigt eine Zusammenfassung der Hilfe.

-V, --version
    gibt Versionsinformationen aus.

-l, --list
    führt alle verfügbaren Chroots auf.

-i, --info
    gibt detaillierte Informationen über die angegebenen Chroots aus.

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

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

  Allgemeine Optionen

-q, --quiet
    gibt nur wichtige Nachrichten aus.

-v, --verbose
    gibt alle Nachrichten aus

  Chroot-Auswahl

-c, --chroot=Chroot
    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«.

-a, --all
    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«.

--all-chroots
    wählt alle Chroots aus; identisch mit --all, außer, dass Source-Chroots und aktive Sitzungen nicht berücksichtigt werden.

--all-sessions
    wählt alle aktiven Sitzungen aus; identisch mit --all, außer, dass Chroots und Source-Chroots nicht berücksichtigt werden.

--all-source-chroots
    wählt alle Source-Chroots aus; identisch mit --all, außer, dass Chroots und Sitzungen nicht berücksichtigt werden.

--exclude-aliases
    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.

  Chroot-Umgebung

-d, --directory=Verzeichnis
    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.

-u, --user=Benutzer
    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«.

-p, --preserve-environment
    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«.

-s, --shell=Shell
    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.

-o, --option=Schlüssel=Wert
    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.

  Sitzungsaktionen

--automatic-session
    startet eine Sitzung, führt sie aus und beendet sie automatisch. Dies ist die Standardaktion und muss daher nicht bei normalen Transaktionen angegeben werden.

-b, --begin-session
    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.

--recover-session
    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.

-r, --run-session
    führt eine existierende Sitzung aus. Die Sitzungskennung wird mit der Option --chroot angegeben.

-e, --end-session
    beendet eine existierende Sitzung. Die Sitzungskennung wird mit der Option --chroot angegeben.

  Sitzungsoptionen

-n, --session-name=Sitzungsname
    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.

-f, --force
    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.

  Trenner

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

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

CHROOT-NAMENSRÄUME

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

  Source-Chroots
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.

  Sitzungs-Chroots
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.

  Aktionen und Standardnamensräume
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.

LEISTUNG

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.

RESERVEVERZEICHNISSE

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.

  Login-Shell
Ü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

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

  Fehlersuche

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

BEISPIELE

  Aufführen verschiedener Chroots
    % schroot -l↵
    chroot:default
    chroot:etch
    chroot:sid
    chroot:testing
    chroot:unstable

  Informationen über die Chroot abfragen
    % 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.

  Befehle in einer Chroot ausführen
    % 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.

  Benutzer wechseln
    % 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.

  Sitzungen
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

FEHLERBEHEBUNG
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>

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

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

DATEIEN

  Konfigurationsdateien

/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

  Systemverzeichnisse

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

  Sitzungsverzeichnisse
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

AUTOR
Roger Leigh

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

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