[[Vorlage(Archiviert, )]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Paketquellen freischalten] [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:Editor: Textdateien bearbeiten] }}} [[Inhaltsverzeichnis()]] Mit schroot ("'''s'''ecurely enter a '''chroot''' environment") kann man Befehle oder eine Login-Shell in einer [:chroot:]-Umgebung ausführen. Das Programm schroot wurde als Ersatz für dchroot geschrieben und bietet eine größere Funktionalität, die Optionen sind aber ähnlich. Der Befehl dchroot ist noch als Wrapper um schroot vorhanden. Merkmale: * Ausführen von Befehlen in einer chroot-Umgebung als normaler Benutzer * Automatisches Bereitstellen von Einhängepunkten in der chroot-Umgebung * Automatisches Kopieren von Dateien in die chroot-Umgebung * chroot-Umgebungen in Verzeichnissen, [:tar:]-Archiven und Partitionen * "Source chroots": Bei jedem Start wird eine Kopie der chroot-Umgebung erstellt, so dass Befehle bei jedem Start eine unveränderte Umgebung vorfinden. Unterstützt werden (komprimierte) tar-Archive, [:Logical_Volume_Manager:LVM]-Snapshots, [:Btrfs:Btrfs]-Snapshots und Overlay-Dateisysteme wie [wikipedia:Aufs:aufs], [wikipedia:UnionFS:] und OverlayFS. * Das Verhalten beim Starten und Beenden kann über Skripte angepasst werden. Dieser Artikel beschreibt nur die grundlegende Verwendung von schroot. Für weitere Informationen kann man die [:man:Manpages] zu Rate ziehen. = Einrichtung = Folgende Pakete müssen installiert werden [1]: {{{#!vorlage Paketinstallation debootstrap, zur Einrichtung von chroot-Umgebungen schroot, universe [2] }}} Zuerst erstellt man eine chroot-Umgebung, indem man folgenden Befehl in einem Terminal [3] ausführt: {{{#!vorlage Befehl sudo debootstrap precise /chroot-precise http://de.archive.ubuntu.com/ubuntu/ }}} Der Befehl kann eine Weile dauern. Anschließend befindet sich in dem Verzeichnis '''/chroot-precise''' eine Minimalinstallation von [:Precise Pangolin:Ubuntu 12.04]. Statt `precise` kann man den Codenamen einer beliebigen Ubuntu- oder Debian-Version einsetzen. Da bei dem Vorgang ein komplettes Basis-System in dem '''chroot'''-Verzeichnis installiert wird, sollte man darauf achten, dass genug Speicherplatz vorhanden ist. Eine Minimalinstallation benötigt ungefähr 500 MB. Will man später graphische Programme installieren, sollte man mindestens 1,5 GB einplanen. Dann muss man noch schroot für diese chroot-Umgebung konfigurieren. Dazu öffnet man die Datei '''/etc/schroot/schroot.conf''' in einem Texteditor [5] mit Root-Rechten [4] und fügt einen Abschnitt mit folgendem Inhalt ein: {{{#!code cfg [precise-test] description=Beschreibung der chroot-Umgebung type=directory directory=/chroot-precise users=BENUTZER }}} In der ersten Zeile steht in eckigen Klammern der Name der chroot-Umgebung. Hinter `directory=` steht das Verzeichnis, in dem man die chroot-Umgebung mit debootstrap installiert hat. `BENUTZER` ersetzt man mit einer durch Kommas getrennten Liste der Benutzer, die auf die chroot-Umgebung zugreifen dürfen, in der Regel den eigenen Benutzernamen. Eine genauere Beschreibung der verwendeten Einstellungen kann man in der [:man:Manpage] für `schroot.conf` nachlesen. Alternativ kann man die Konfiguration auch unter '''/etc/schroot/chroot.d/''' ablegen. Dazu erstellt man dort eine neue Datei mit diesem Inhalt. Der Dateiname kann zwar frei gewählt werden, die Datei aber keine Dateierweiterung haben, da sie sonst eventuell ignoriert wird (Das Verhalten hängt von der Version ab). Grundsätzlich ist die chroot-Umgebung jetzt einsatzbereit. Hinweise für bestimmte Einsatzgebiete findet man im Abschnitt [#Anwendungsbeispiele Anwendungsbeispiele]. = Benutzung = In die chroot-Umgebung wechselt man mit dem folgenden Befehl: {{{#!vorlage Befehl schroot -c precise-test }}} Der aktuelle Verzeichnisnamen ist derselbe, falls er in der chroot-Umgebung vorhanden ist. Verlassen kann man die chroot-Umgebung mit dem Befehl `exit` oder über die Tastenkombination [[Vorlage(Tasten, Strg+D)]]. Einen einzelnen Befehl führt man so aus: {{{#!vorlage Befehl schroot -c precise-test ls }}} Enthält der Befehl Optionen, muss `--` vorangestellt werden, damit schroot die Optionen nicht selbst interpretiert: {{{#!vorlage Befehl schroot -c precise-test -- ls -l }}} = Entfernen = Zuerst sollte man sicherstellen, dass man alle chroot-Umgebungen verlassen hat und alle Sitzungen auch korrekt beendet wurden. Siehe dazu auch unter [#Hinweise Hinweise]. Außerdem kann man mit dem Befehl `mount` überprüfen, ob noch Verzeichnisse von schroot eingebunden sind (schroot bindet Verzeichnisse unter '''/var/lib/schroot/mount/''' ein). {{{#!vorlage Warnung Es ist sehr wichtig, dies zu überprüfen, da sonst Datenverlust droht. }}} Das Verzeichnis kann man nun löschen mit dem Befehl {{{#!vorlage Befehl sudo rm -r /chroot-precise/ }}} = Erweiterte Konfiguration = == Dateisysteme einbinden == Über die Datei '''/etc/schroot/default/fstab''' wird festgelegt, welche Einhängepunkte in der chroot-Umgebung zur Verfügung stehen. Sie kann nach Bedarf geändert werden und folgt der Syntax der [:fstab:/etc/fstab]. Standardmäßig wird auch das [:Homeverzeichnis:] eingebunden, sodass die Anwendung in der chroot-Umgebung vollen Zugriff auf die persönlichen Daten hat. Sollte man dies nicht wollen, kann man die entsprechende Zeile aus der Datei entfernen. Sollen gar keine Verzeichnisse eingehängt werden, ersetzt man besser in der Konfiguration der chroot-Umgebung die Zeile `type=directory` durch `type=plain`. == Dateien übernehmen == Die Datei '''/etc/schroot/default/copyfiles''' enthält eine Liste von Dateien, die beim Start in die chroot-Umgebung kopiert werden. Damit lassen sich Konfigurationsdateien in der chroot-Umgebung mit denen im Hauptsystem synchron halten. == Mehrere chroot-Umgebungen unterschiedlich konfigurieren == Die in diesem Kapitel beschriebenen Einstellungen sind zunächst für alle chroot-Umgebungen wirksam. Mit Profilen können verschiedene chroot-Umgebungen für unterschiedliche Einsatzzwecke auch unterschiedlich konfiguriert werden. Profile sind Verzeichnisse in '''/etc/schroot'''. Einige unterschiedliche Profile sind schon vorhanden: * '''default''': Standardwert, wenn kein Profil angegeben * '''minimal''': Minimale Konfiguration * '''desktop''': für Desktop-Anwendungen, mehr Funktionalität des Host-Systems verfügbar * '''sbuild''' und '''buildd''': für das Bauen von Debian-Paketen Ein eigenes Profil erstellt man, indem man eines der Verzeichnisse kopiert und den Inhalt den eigenen Wünschen anpasst. === Profile ab Ubuntu 14.04 === Man fügt in die Konfiguration der entsprechenden chroot-Umgebung folgende Zeile ein: {{{#!code cfg profile=Profil }}} Der Vorgabewert ist '''default'''. = Hinweise = * Es kann passieren, dass die zu Befehlen gehörenden schroot-Sitzungen nicht korrekt beendet werden (z.B. nach einem Absturz des Betriebssystems oder des Terminalprogramms). Die offenen Sitzungen kann man anzeigen lassen mit {{{#!vorlage Befehl schroot -l --all-sessions }}} und schliessen mit {{{#!vorlage Befehl schroot -e --all-sessions }}} * Normalerweise werden die Umgebungsvariablen nicht in die chroot-Umgebung übernommen, sondern eine minimale Menge an Umgebungsvariablen wird neu gesetzt. Sollen die Umgebungsvariablen erhalten bleiben, fügt man die Zeile {{{#!code cfg preserve-environment=true }}} in die Konfiguration ein. Dies betrifft u.a. * `PATH`: Inhalt ist kürzer, so dass bestimmte spezielle Befehle nicht gefunden werden. * `DISPLAY`: Diese Variable ist notwendig, um graphische Programme in der chroot-Umgebung auszuführen. * Sicherheit: chroot-Umgebungen sind __kein__ Sicherheitsmerkmal, denn für entsprechend geschriebene Programme ist es durchaus möglich, aus einer chroot-Umgebung auszubrechen. Will man allerdings nur eine Anwendung daran hindern, auf bestimmte Daten zuzugreifen oder sein System vor fehlerhaften Anwendungen schützen, kann eine chroot-Umgebung durchaus nützlich sein. * Bei Verwendung mehrerer chroot-Umgebungen kann der Einsatz von [:Lokale_Paketquellen#Proxies-Caches-Buendeln-von-Updates:Lokalen Paket-Caches] nützlich sein. Bei Verwendung von [:Lokale_Paketquellen/Apt-Cacher-ng:Apt-Cacher-ng] kann man die Datei [:Lokale_Paketquellen/Apt-Cacher-ng#Apt-fuer-Nutzung-eines-Proxys-konfigurieren:/etc/apt/apt.conf.d/01proxy] in die Datei '''/etc/schroot/copyfiles-defaults''' eintragen, und hat damit den Cache für alle chroot-Umgebungen konfiguriert. * Die getrennte Verwendung von [:D-Bus:] innerhalb einer chroot-Umgebung ist wahrscheinlich nicht möglich. Dadurch kann es vorkommen, dass Programme, die D-Bus verwenden, nicht oder nur eingeschränkt funktionieren. Andererseits ist es möglich, die chroot-Umgebung so zu konfigurieren, dass die Programme mit dem D-Bus des Hauptsystems kommunizieren. = Anwendungsbeispiele = == Programme in einer anderen Version installieren == Wenn man ein Programm verwenden will, das in der aktuellen Ubuntu-Version noch nicht (oder nicht mehr) vorhanden ist oder man eine ältere Version parallel verwenden will, kann eine chroot-Umgebung hilfreich sein. Auch für Software aus unsicheren Quellen (z.B. PPA, nicht paketierte Programme) kann man eine chroot-Umgebung verwenden, um zu vermeiden die Stabilität seines System zu gefährden. Ebenso kann man Debian in einer chroot-Umgebung installieren. Man sollte aber bedenken, dass die Konfigurationsdateien verschiedener Programmversionen möglicherweise nicht kompatibel sind. Daher sollte man in diesem Fall darauf verzichten, das Home-Verzeichnis einzubinden (siehe auch [#Erweiterte-Konfiguration Erweiterte Konfiguration]). == 32-Bit-Programme in einer 64-Bit-Installation verwenden == Als Benutzer der AMD64-Version von Ubuntu sieht man sich mitunter mit dem Problem konfrontiert, dass man bestimmte Programme benötigt, die jedoch nur in einer 32-Bit-Version vorliegen. Da die AMD64-Technologie in der Hinsicht abwärtskompatibel ist, dass auch unter einem 64-Bit-System gleichzeitig 32-Bit-Programme ausgeführt werden können, steht dem Einsatz derartiger Programme prinzipiell nichts im Weg (siehe auch [:64bit-Architektur#32-Bit-Programme-erzwingen:]). Häufig jedoch benötigen "größere" Programme (wie beispielsweise der Firefox-Browser) noch zusätzliche Systembibliotheksdateien, um tatsächlich funktionieren zu können, von diesen Bibliotheken muss dann ebenfalls eine 32-Bit-Version vorliegen. Wenngleich es zwar prinzipiell auch möglich ist, gleichzeitig 32-Bit-Versionen und 64-Bit-Versionen von Bibliotheksdateien auf dem System zu installieren, ist dies in der Praxis sehr umständlich und daher nur in individuellen Einzelfällen interessant. Dieser Abschnitt beschreibt die Besonderheiten einer 32-Bit-chroot-Umgebung auf einem 64-Bit-System. Zum Erstellen der chroot-Umgebung verwendet man folgenden Befehl: {{{#!vorlage Befehl sudo debootstrap --arch i386 precise /chroot-precise32 http://de.archive.ubuntu.com/ubuntu/ }}} Man kann folgende schroot-Konfiguration benutzen: {{{#!code cfg [trusty32] description=Ubuntu 14.04 Trusty Tahr (32 Bit) directory=/chroot-trusty32 users=BENUTZER type=directory profile=desktop personality=linux32 preserve-environment=true }}} Weitere Hinweise: * Damit die Anwendungen auf deutsch sind, sollten die entsprechenden Sprachpakete in der chroot-Umgebung installiert werden, siehe dazu im Artikel [:Spracheinstellungen:]. * Damit graphische Anwendungen genauso aussehen, wie außerhalb der chroot-Umgebung, muss das entsprechende Design installiert sein. Die Standard-Ubuntu-Designs Ambiance und Radiance befinden sich im Paket '''light-themes'''. * Die 32-Bit-Version des Paketmanagers [:Synaptic:] kann man mittels {{{#!vorlage Befehl sudo apt-get install synaptic }}} in der chroot-Umgebung installieren. * Für graphische Programme kann man einen Programmstarter erstellen. Unter ''"Befehl"'' stellt man `schroot -c precise32 --` dem Befehlsnamen voran. Bei Programmen, die Root-Rechte [4] brauchen, muss der gksu-Teil vor schroot stehen, zum Beispiel für Synaptic: {{{#!vorlage Befehl gksu --description /usr/share/applications/synaptic.desktop -- schroot -c precise32 -- /usr/sbin/synaptic }}} == Entwickeln und Testen von Software == Eine chroot-Umgebung kann nützlich sein beim * Testen von Kompilieranleitungen * Testen, ob Pakete in einer Minimalumgebung installierbar und voll funktionsfähig sind * Testen von Programmen auf anderen Distributionen und Versionen. * Testen von Programmen aus Entwicklerversionen. = Manpages zu schroot = {{{#!vorlage Tabelle Beschreibung [:Trusty:Ubuntu 14.04] +++ Der schroot-Befehl [https://manpages.ubuntu.com/manpages/trusty/man1/schroot.1.html schroot] {en} +++ Dateiformat für chroot-Beschreibungen [https://manpages.ubuntu.com/manpages/trusty/man5/schroot.conf.5.html schroot.conf] {en} +++ Dateiformat für chroot-Profile [https://manpages.ubuntu.com/manpages/trusty/man5/schroot-script-config.5.html schroot-script-config] {en} +++ Schroot setup-Skripte [https://manpages.ubuntu.com/manpages/trusty/man5/schroot-setup.5.html schroot-setup] {en} +++ Häufige Fragen [https://manpages.ubuntu.com/manpages/trusty/man7/schroot-faq.7.html schroot-faq] {en} }}} = Links = * [wikipedia:Chroot:chroot in Wikipedia] * [https://www.debian-administration.org/articles/566 Debian System Administration Tips and Resources] {en} ## * [http://jk.scanmon.com/en/wp/2010/01/schroot-chroot-for-any-users.html Jacky’s BLOG] {en} # tag: System, Shell, chroot, Server