schroot - eine Chroot-Umgebung sicher betreten
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«.
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:
-
-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.
-
-q, --quiet
- gibt nur wichtige Nachrichten aus.
-
-v, --verbose
- gibt alle Nachrichten aus
-
-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.
-
-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.
- --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.
-
-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.
- --
- 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.
Ü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
<
[email protected]>
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/x86_64-linux-gnu/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 <
[email protected]>
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),