BEZEICHNUNG
schroot - häufig gestellte Fragen
BESCHREIBUNG
Diese Handbuchseite deckt viele verschiedene häufig gestellte Fragen über die Konfiguration und Benutzung von Schroot ab.
KONFIGURATION
Warum
überschreibt Schroot Konfigurationsdateien in der
Chroot?
Standardmäßig kopiert Schroot die NSS-Datenbanken
des Systems (»passwd«, »shadow«,
»group«, »gshadow«,
»services«, »protocols«,
»networks« und »hosts«, etc.) in die
Chroot hinein. Der Grund dafür ist, dass die
Chroot-Umgebung kein vollständig separates System ist
und es durch das Kopieren synchron gehalten wird. Dies ist
jedoch nicht immer erwünscht, insbesondere, wenn ein
Paket in die Chroot installiert wird, das Systembenutzer und
Gruppen erzeugt, die auf dem Wirtsystem nicht vorhanden
sind, da diese beim nächsten Herüberkopieren der
Datenbanken verschwinden werden.
Die hier vorgeschlagene Behelfslösung besteht darin, das Kopieren zu deaktivieren, indem der Schlüssel setup.nssdatabases in schroot.conf geleert wird. In früheren Veröffentlichungen von Schroot wurde dies durch Auskommentieren der Datei NSSDATABASES für die Chroot erreicht (standardmäßig /etc/schroot/default/config). Die Datenbankliste kann ebenfalls durch Bearbeiten der Datei angepasst werden, die die Datenbankliste enthält (standardmäßig /etc/schroot/default/nssdatabases.
In Zukunft wird an einem besseren Schema gearbeitet, um die Rechner- und Chroot-Datenbanken synchron zu halten. Es kann Einträge zusammenführen, anstatt die ganze Datenbank zu überschreiben, wodurch Chroot-spezifische Änderungen erhalten bleiben.
Soll ich
einen einfachen oder einen Verzeichnis-Chroot-typ
verwenden?
Diese beiden Chroot-Typen sind im Grunde identisch, da sie
beide nur Verzeichnisse im Dateisystem sind.
»plain« ist sehr einfach und führt keine
Einrichtungsaufgaben durch. Der einzige Grund, aus dem Sie
es möglicherweise verwenden würden, ist, wenn Sie
ein Upgrade eines Programms wie dchroot(1) oder
chroot(8) durchführen, das nichts anderes tut,
als einen Befehl oder eine Shell in einem Verzeichnis
ausführen. Demgegenüber führen
Verzeichnis-Chroots Einrichtungsskripte aus, die
zusätzliche Dateisysteme einhängen und andere
Einrichtungsaufgaben erledigen können.
FORTGESCHRITTENE KONFIGURATION
Was sind
Schnappschüsse und Unions?
Einige Chroot-Typen unterstützen das Klonen. Das
heißt, dass Sie, wenn Sie eine Sitzung starten, eine
Kopie der Chroot erhalten, die nur während der
Lebensdauer der Sitzung besteht. Dies ist nützlich,
wenn Sie vorübergehend eine saubere Kopie des Systems
für eine einzelne Aufgabe möchten, die dann
automatisch gelöscht wird, wenn Sie damit fertig sind.
Die Debian-Paketbau-Dæmons führen zum Beispiel
sbuild(1) aus, um Debian-Pakete zu bauen und dieses
Programm verwendet Schroot, um eine saubere Bau-Umgebung
für jedes einzelne Paket zu erstellen. Ohne
Schnappschüsse müsste die Chroot am Ende jedes
Bauens auf ihren Anfangszustand zurückgesetzt werden,
um für das nächste bereit zu sein und jedes
zurückgelassene Überbleibsel vom Entfernen des
Pakets oder früherem Bauen könnte mit dem
nächsten Bauen wechselwirken.
Die am häufigsten benutzte Methode zum Erstellen von Schnappschüssen ist die Verwendung von LVM-Schnappschüssen (Chroot-Typ »lvm-snapshot«). In diesem Fall muss die Chroot auf einem logischen LVM-Laufwerk (LV) existieren. Schnappschüsse eines LV können während der Sitzungseinrichtung mit lvcreate(8) erstellt werden. Diese verbrauchen jedoch viel Platz auf der Platte. Eine neuere Methode ist die Verwendung von Btrfs-Schnappschüssen (Chroot-Typ »btrfs-snapshot«), die viel weniger Plattenplatz beanspruchen und zuverlässiger als LVM-Schnappschüsse sind. Btrfs ist allerdings immer noch experimentell, aber es besteht die Hoffnung, dass es die empfohlene Methode wird, wenn es reift.
Unions sind eine Alternative zu Schnappschüssen. In dieser Situation wird, anstatt eine Kopie des Chroot-Dateisystems zu erstellen, ein vorübergehendes Schreib-/Lesedateisystem oben auf das Chroot-Dateisystem gelegt, so dass Änderungen im darüberliegenden Dateisystem gespeichert werden und das Original-Chroot-Dateisystem unberührt bleibt. Der Linux-Kernel muss erst die Unterstützung von Union-Dateisystemen wie Aufs und Unionfs integrieren, daher sind LVM-Schnappschüsse derzeit immer noch die empfohlene Methode.
AUFRUF
Wie kann ich
Dæmons in einer Chroot ausführen?
Ein häufiges Problem beim Versuch einen Dæmon in
einer Chroot auszuführen ist, dass Sie bemerken, dass
er gar nicht läuft. Typischerweise wurde der
Dæmon kurz nach dem Start gekillt.
Wenn Schroot ausgeführt wird, startet es eine Sitzung, führt den angegebenen Befehl oder die Shell aus, wartet auf das Beenden des Befehls oder der Shell und beendet dann die Sitzung. Für einen normalen Befehl oder eine Shell funktioniert das sehr gut. Dæmons starten normalerweise jedoch im Hintergrund und lösen sich vom steuernden Terminal. Sie tun dies, indem sie sich zweimal verzweigen und den Elternprozess enden lassen. Unglücklicherweise bedeutet dies, dass Schroot das Beenden des Programms bemerkt (der Dæmon ist ein verwaister Enkel dieses Prozesses) und dann die Sitzung beendet. Teil des Beendens der Sitzung ist das Killen aller Prozesse, die innerhalb der Chroot laufen, was wiederum bedeutet, dass der Dæmon beim Beenden der Sitzung gekillt wird.
Als Folge davon ist es nicht möglich, einen Dæmon direkt mit Schroot auszuführen. Sie können es dennoch tun, wenn Sie eine Sitzung mit --begin-session erstellen und dann den Dæmon mit --run-session ausführen. Es liegt dann in Ihrer Verantwortung, die Sitzung mit --end-session zu schließen, wenn der Dæmon beendet wurde und Sie ihn nicht länger benötigen.
Wie kann ich
eine kaputte Sitzung von Hand aufräumen?
Gelegentlich kann es nötig sein, Sitzungen von Hand
aufzuräumen. Falls sich etwas auf Ihrem System
ändert, das ein Fehlschlagen des Einrichtungsskripts
beim Beenden der Sitzung zur Folge hat, zum Beispiel das
Entfernen einer benötigten Datei oder eines
Verzeichnisses, ist es Schoot möglicherweise nicht
möglich, alles automatisch aufzuräumen. Für
jedes im Abschnitt
»Sitzungsverzeichnisse« in
schroot(1) aufgeführte Sitzungsverzeichnis
müssen alle Dateien mit dem Namen der Sitzungskennung
gelöscht und alle Verzeichnisse mit dem Namen der
Sitzungskennung ausgehängt (falls es darunter
eingehängte Dateisysteme gibt) und dann auch
gelöscht werden.
Um zum Beispiel die Sitzung mit Namen meine-Sitzung von Hand zu entfernen:
• |
die Konfigurationsdatei der Sitzung entfernen |
% rm /var/lib/schroot/session/meine-Sitzung↵
• |
auf eingehängte Dateisysteme prüfen |
% /usr/lib/i386-linux-gnu/schroot/schroot-listmounts -m \
/var/run/schroot/mount/meine-Sitzung↵
• |
eingehängte Dateisysteme aushängen | ||
• |
/var/run/schroot/mount/meine-Sitzung entfernen | ||
• |
dies für andere Verzeichnisse wie /var/lib/schroot/union/underlay, /var/lib/schroot/union/overlay und /var/lib/schroot/unpack wiederholen |
HINWEIS: Entfernen Sie keine Verzeichnisse, ohne zu prüfen, ob darunter irgendwelche Dateisysteme eingehängt sind, da Dateisysteme wie /home immer noch mit der Option »bind« eingehängt sein könnten. Dies dennoch zu tun, könnte zum Verlust unwiederbringlicher Daten führen.
FORTGESCHRITTENE BENUTZUNG
Wie verwende
ich Sitzungen?
Im normalen Betrieb führen Sie einen Befehl
ähnlich diesem aus:
% schroot -c squeeze -- Befehl↵
Dadurch würde der Befehl Befehl in der Chroot squeeze ausgeführt. Während es hier nicht offensichtlich ist, dass eine Sitzung benutzt wird, unternimmt Schroot die folgenden Schritte:
• |
Es wird mittels der Chroot squeeze eine Sitzung erstellt. Dieser wird automatisch ein eindeutiger Name wie squeeze-57a69547-e014-4f5d-a98b-f4f35a005307 gegeben, obwohl Sie normalerweise nichts darüber wissen möchten. | ||
• |
Einrichtungsskripte werden zum Erstellen der Sitzungs-Chroot ausgeführt und richten sie Ihnen ein. | ||
• |
Der Befehl Befehl wird innerhalb der Sitzungs-Chroot ausgeführt. | ||
• |
Zum Aufräumen der Sitzungs-Chroot werden Einrichtungsskripte ausgeführt. | ||
• |
Die Sitzung wird gelöscht. |
Falls Sie nun
mehr als einen Befehl ausführen wollen, können Sie
eine Shell starten und die Befehle interaktiv starten oder
Sie können sie in ein Shell-Skript schreiben und
stattdessen dieses ausführen. Aber möglicherweise
wollen Sie dazwischen etwas tun, wie etwa beliebige Befehle
von einem Programm oder Skript ausführen, von dem Sie
vorher noch nicht wissen, welche Befehle Sie ausführen
müssen. Außerdem möchten Sie vielleicht den
Zustand der Chroot zwischen zwei Befehlen konservieren,
wobei die normale automatische Erstellung von Sitzungen den
Zustand zwischen jedem Befehl wieder zurücksetzen
würde. Das ist der Grund für die Sitzungen: Sobald
sie erstellt sind, ist die Sitzung beständig und wird
nicht entfernt. Mit einer Sitzung können Sie so viele
Befehle ausführen, wie Sie wollen, Sie müssen aber
die Sitzung von Hand erstellen und löschen, da Schroot
selbst nicht wissen kann, wann Sie damit fertig sind,
außer im obigen Fall mit dem einzelnen Befehl. Dies
ist ziemlich einfach:
% schroot --begin-session -c squeeze↵
squeeze-57a69547-e014-4f5d-a98b-f4f35a005307
Dies erzeugt
eine neue Sitzung, die auf der Chroot squeeze
basiert. Der eindeutige Name der Sitzung, die
Sitzungskennung, wird auf der Standardausgabe ausgegeben,
daher kann er gleichzeitig als Shell-Variable gesichert
werden wie hier:
% SESSION=$(schroot --begin-session -c
squeeze)↵
% echo $SESSION↵
squeeze-57a69547-e014-4f5d-a98b-f4f35a005307
Nun wurde die
Sitzung erstellt und hat eine Sitzungskennung. In ihr
können Befehle mittels der Sitzungskennung
ausgeführt werden:
% schroot --run-session -c
squeeze-57a69547-e014-4f5d-a98b-f4f35a005307 \
-- Befehl1↵
oder
% schroot --run-session -c "$SESSION" --
Befehl1↵
und dann so
viele andere Befehle wie gewünscht
% schroot --run-session -c "$SESSION" --
Befehl2↵
% schroot --run-session -c "$SESSION" --
Befehl3↵
% schroot --run-session -c "$SESSION" --
Befehl4↵
etc.
Wenn die
Sitzung vorüber ist, kann sie mit --end-session
entfernt werden:
% schroot --end-session -c
squeeze-57a69547-e014-4f5d-a98b-f4f35a005307↵
oder
% schroot --end-session -c
"$SESSION"↵
Da die automatisch generierten Sitzungsnamen lang und unhandlich sein können, ermöglicht Ihnen die Option --session-name Ihren eigenen Namen zu vergeben:
% schroot
--begin-session -c squeeze --session-name
mein-name↵
mein-name
MITWIRKEN
Hilfe
erhalten und einbezogen werden
Die Mailingliste
<buildd-tools-devel [AT] lists.org> wird
sowohl für Anwenderunterstützung als auch
Diskussionen über die Entwicklung benutzt. Die Liste
kann über die Projektseite unter
https://alioth.debian.org/projects/buildd-tools/ abonniert
werden oder über die Mailman-Listenschnittstelle unter
http://lists.alioth.debian.org/mailman/listinfo/buildd-tools-devel.
Fehler
melden
Auf Debian-Systemen können Fehler unter Benutzung des
Werkzeugs reportbug(1) oder per Mail an
<submit [AT] bugs.org> gemeldet werden (Einzelheiten
darüber, wie das geht, finden Sie unter
http://bugs.debian.org).
Bezug der
neusten Quellen
Schroot wird über das Versionskontrollsystem Git
verwaltet. Sie können die neusten Quellen über
git://git.debian.org/git/buildd-tools/schroot beziehen.
% git clone
git://git.debian.org/git/buildd-tools/schroot↵
Der Zweig »master« enthält die aktuelle Entwicklungsveröffentlichung. Stabile Veröffentlichungen werden in Zweigen gefunden, zum Beispiel liegen die Serien 1.4 des Releases im Zweig »schroot-1.4«.
AUTOR
Roger Leigh
COPYRIGHT
Copyright © 2005-2012 Roger Leigh <rleigh [AT] 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), schroot(1), schroot.conf(5). schroot-setup(5),