HAUFIG ZU SCHROOT GESTELLTE FRAGEN(7) 2022 BEZEICHNUNG schroot - haufig gestellte Fragen BESCHREIBUNG Diese Handbuchseite deckt viele verschiedene haufig gestellte Fragen uber die Konfiguration und Benutzung von Schroot ab. KONFIGURATION Warum uberschreibt Schroot Konfigurationsdateien in der Chroot? Standardmassig kopiert Schroot die NSS-Datenbanken des Systems (>>passwd<<, >>shadow<<, >>group<<, >>gshadow<<, >>services<<, >>protocols<<, >>networks<< und >>hosts<<, etc.) in die Chroot hinein. Der Grund dafur ist, dass die Chroot-Umgebung kein vollstandig separates System ist und es durch das Kopieren synchron gehalten wird. Dies ist jedoch nicht immer erwunscht, insbesondere, wenn ein Paket in die Chroot installiert wird, das Systembenutzer und Gruppen erzeugt, die auf dem Wirtsystem nicht vorhanden sind, da diese beim nachsten Heruberkopieren der Datenbanken verschwinden werden. Die hier vorgeschlagene Behelfslosung besteht darin, das Kopieren zu deaktivieren, indem der Schlussel setup.nssdatabases in schroot.conf geleert wird. In fruheren Veroffentlichungen von Schroot wurde dies durch Auskommentieren der Datei NSSDATABASES fur die Chroot erreicht (standardmassig /etc/schroot/default/config). Die Datenbankliste kann ebenfalls durch Bearbeiten der Datei angepasst werden, die die Datenbankliste enthalt (standardmassig /etc/schroot/default/nssdatabases. In Zukunft wird an einem besseren Schema gearbeitet, um die Rechner- und Chroot-Datenbanken synchron zu halten. Es kann Eintrage zusammenfuhren, anstatt die ganze Datenbank zu uberschreiben, wodurch Chroot-spezifische Anderungen 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 fuhrt keine Einrichtungsaufgaben durch. Der einzige Grund, aus dem Sie es moglicherweise verwenden wurden, ist, wenn Sie ein Upgrade eines Programms wie dchroot(1) oder chroot(8) durchfuhren, das nichts anderes tut, als einen Befehl oder eine Shell in einem Verzeichnis ausfuhren. Demgegenuber fuhren Verzeichnis-Chroots Einrichtungsskripte aus, die zusatzliche Dateisysteme einhangen und andere Einrichtungsaufgaben erledigen konnen. FORTGESCHRITTENE KONFIGURATION Was sind Schnappschusse und Unions? Einige Chroot-Typen unterstutzen das Klonen. Das heisst, dass Sie, wenn Sie eine Sitzung starten, eine Kopie der Chroot erhalten, die nur wahrend der Lebensdauer der Sitzung besteht. Dies ist nutzlich, wenn Sie vorubergehend eine saubere Kopie des Systems fur eine einzelne Aufgabe mochten, die dann automatisch geloscht wird, wenn Sie damit fertig sind. Die Debian-Paketbau-Daemons fuhren zum Beispiel sbuild(1) aus, um Debian-Pakete zu bauen und dieses Programm verwendet Schroot, um eine saubere Bau-Umgebung fur jedes einzelne Paket zu erstellen. Ohne Schnappschusse musste die Chroot am Ende jedes Bauens auf ihren Anfangszustand zuruckgesetzt werden, um fur das nachste bereit zu sein und jedes zuruckgelassene Uberbleibsel vom Entfernen des Pakets oder fruherem Bauen konnte mit dem nachsten Bauen wechselwirken. Die am haufigsten benutzte Methode zum Erstellen von Schnappschussen ist die Verwendung von LVM-Schnappschussen (Chroot-Typ >>lvm-snapshot<<). In diesem Fall muss die Chroot auf einem logischen LVM-Laufwerk (LV) existieren. Schnappschusse eines LV konnen wahrend der Sitzungseinrichtung mit lvcreate(8) erstellt werden. Diese verbrauchen jedoch viel Platz auf der Platte. Eine neuere Methode ist die Verwendung von Btrfs-Schnappschussen (Chroot-Typ >>btrfs-snapshot<<), die viel weniger Plattenplatz beanspruchen und zuverlassiger als LVM-Schnappschusse 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 Schnappschussen. In dieser Situation wird, anstatt eine Kopie des Chroot-Dateisystems zu erstellen, ein vorubergehendes Schreib-/Lesedateisystem oben auf das Chroot-Dateisystem gelegt, so dass Anderungen im daruberliegenden Dateisystem gespeichert werden und das Original-Chroot-Dateisystem unberuhrt bleibt. Der Linux-Kernel muss erst die Unterstutzung von Union-Dateisystemen wie Aufs und Unionfs integrieren, daher sind LVM-Schnappschusse derzeit immer noch die empfohlene Methode. AUFRUF Wie kann ich Daemons in einer Chroot ausfuhren? Ein haufiges Problem beim Versuch einen Daemon in einer Chroot auszufuhren ist, dass Sie bemerken, dass er gar nicht lauft. Typischerweise wurde der Daemon kurz nach dem Start gekillt. Wenn Schroot ausgefuhrt wird, startet es eine Sitzung, fuhrt den angegebenen Befehl oder die Shell aus, wartet auf das Beenden des Befehls oder der Shell und beendet dann die Sitzung. Fur einen normalen Befehl oder eine Shell funktioniert das sehr gut. Daemons starten normalerweise jedoch im Hintergrund und losen sich vom steuernden Terminal. Sie tun dies, indem sie sich zweimal verzweigen und den Elternprozess enden lassen. Unglucklicherweise bedeutet dies, dass Schroot das Beenden des Programms bemerkt (der Daemon 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 Daemon beim Beenden der Sitzung gekillt wird. Als Folge davon ist es nicht moglich, einen Daemon direkt mit Schroot auszufuhren. Sie konnen es dennoch tun, wenn Sie eine Sitzung mit --begin-session erstellen und dann den Daemon mit --run-session ausfuhren. Es liegt dann in Ihrer Verantwortung, die Sitzung mit --end-session zu schliessen, wenn der Daemon beendet wurde und Sie ihn nicht langer benotigen. Wie kann ich eine kaputte Sitzung von Hand aufraumen? Gelegentlich kann es notig sein, Sitzungen von Hand aufzuraumen. Falls sich etwas auf Ihrem System andert, das ein Fehlschlagen des Einrichtungsskripts beim Beenden der Sitzung zur Folge hat, zum Beispiel das Entfernen einer benotigten Datei oder eines Verzeichnisses, ist es Schoot moglicherweise nicht moglich, alles automatisch aufzuraumen. Fur jedes im Abschnitt >>Sitzungsverzeichnisse<< in schroot(1) aufgefuhrte Sitzungsverzeichnis mussen alle Dateien mit dem Namen der Sitzungskennung geloscht und alle Verzeichnisse mit dem Namen der Sitzungskennung ausgehangt (falls es darunter eingehangte Dateisysteme gibt) und dann auch geloscht werden. Um zum Beispiel die Sitzung mit Namen meine-Sitzung von Hand zu entfernen: o die Konfigurationsdatei der Sitzung entfernen % rm /var/lib/schroot/session/meine-Sitzung o auf eingehangte Dateisysteme prufen % /usr/lib/schroot/schroot-listmounts -m \ /var/run/schroot/mount/meine-Sitzung o eingehangte Dateisysteme aushangen o /var/run/schroot/mount/meine-Sitzung entfernen o dies fur 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 prufen, ob darunter irgendwelche Dateisysteme eingehangt sind, da Dateisysteme wie /home immer noch mit der Option >>bind<< eingehangt sein konnten. Dies dennoch zu tun, konnte zum Verlust unwiederbringlicher Daten fuhren. FORTGESCHRITTENE BENUTZUNG Wie verwende ich Sitzungen? Im normalen Betrieb fuhren Sie einen Befehl ahnlich diesem aus: % schroot -c squeeze -- Befehl Dadurch wurde der Befehl Befehl in der Chroot squeeze ausgefuhrt. Wahrend es hier nicht offensichtlich ist, dass eine Sitzung benutzt wird, unternimmt Schroot die folgenden Schritte: o 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 daruber wissen mochten. o Einrichtungsskripte werden zum Erstellen der Sitzungs-Chroot ausgefuhrt und richten sie Ihnen ein. o Der Befehl Befehl wird innerhalb der Sitzungs-Chroot ausgefuhrt. o Zum Aufraumen der Sitzungs-Chroot werden Einrichtungsskripte ausgefuhrt. o Die Sitzung wird geloscht. Falls Sie nun mehr als einen Befehl ausfuhren wollen, konnen Sie eine Shell starten und die Befehle interaktiv starten oder Sie konnen sie in ein Shell-Skript schreiben und stattdessen dieses ausfuhren. Aber moglicherweise wollen Sie dazwischen etwas tun, wie etwa beliebige Befehle von einem Programm oder Skript ausfuhren, von dem Sie vorher noch nicht wissen, welche Befehle Sie ausfuhren mussen. Ausserdem mochten Sie vielleicht den Zustand der Chroot zwischen zwei Befehlen konservieren, wobei die normale automatische Erstellung von Sitzungen den Zustand zwischen jedem Befehl wieder zurucksetzen wurde. Das ist der Grund fur die Sitzungen: Sobald sie erstellt sind, ist die Sitzung bestandig und wird nicht entfernt. Mit einer Sitzung konnen Sie so viele Befehle ausfuhren, wie Sie wollen, Sie mussen aber die Sitzung von Hand erstellen und loschen, da Schroot selbst nicht wissen kann, wann Sie damit fertig sind, ausser 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 konnen Befehle mittels der Sitzungskennung ausgefuhrt 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 gewunscht % schroot --run-session -c "$SESSION" -- Befehl2 % schroot --run-session -c "$SESSION" -- Befehl3 % schroot --run-session -c "$SESSION" -- Befehl4 etc. Wenn die Sitzung voruber 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 konnen, ermoglicht 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 wird sowohl fur Anwenderunterstutzung als auch Diskussionen uber die Entwicklung benutzt. Die Liste kann uber die Projektseite unter https://alioth.debian.org/projects/buildd-tools/ abonniert werden oder uber die Mailman-Listenschnittstelle unter http://lists.alioth.debian.org/mailman/listinfo/buildd-tools-devel. Fehler melden Auf Debian-Systemen konnen Fehler unter Benutzung des Werkzeugs reportbug(1) oder per Mail an gemeldet werden (Einzelheiten daruber, wie das geht, finden Sie unter http://bugs.debian.org). Bezug der neusten Quellen Schroot wird uber das Versionskontrollsystem Git verwaltet. Sie konnen die neusten Quellen uber git://git.debian.org/git/buildd-tools/schroot beziehen. % git clone git://git.debian.org/git/buildd-tools/schroot Der Zweig >>master<< enthalt die aktuelle Entwicklungsveroffentlichung. Stabile Veroffentlichungen werden in Zweigen gefunden, zum Beispiel liegen die Serien 1.4 des Releases im Zweig >>schroot-1.4<<. AUTOR Roger Leigh COPYRIGHT Copyright (C) 2005-2012 Roger Leigh schroot ist freie Software. Sie konnen es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veroffentlicht, weitergeben und/oder modifizieren, entweder gemass Version 3 der Lizenz oder (nach Ihrer Option) jeder spateren Version. SIEHE AUCH dchroot(1), sbuild(1), schroot(1), schroot.conf(5). schroot-setup(5), Aug 14 HAUFIG ZU SCHROOT GESTELLTE FRAGEN(7)