[[Vorlage(Archiviert)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Paketquellen freischalten] [:Terminal: Ein Terminal öffnen] [:Editor: Textdateien bearbeiten] }}} [[Inhaltsverzeichnis(1)]] 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. Häufig jedoch benötigen "größere" Programme (wie beispielsweise der Firefox-Browser) noch zusätzliche Systembibliotheksdateien, um tatsächlich funktionieren zu können (diese werden analog zu den DLL-Dateien unter Windows verwendet, um bestimmte Funktionalitäten bereitzustellen, die von mehreren Programmen gleichzeitig verwendet werden können, so dass diese nicht in jedem Programm eigens implementiert werden müssen), 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. Viel eleganter ist hingegen die Lösung, stattdessen einen 32-Bit chroot einzurichten; was genau ein chroot ist, erläutert diese [:chroot:Wikiseite]. Diese Anleitung widmet sich speziell dem Szenario, dass man auf einem 64-Bit-System einen 32-Bit chroot einrichten möchte, sie entspricht einer deutschen Übersetzung [http://cedegawiki.sweetleafstudios.com/wiki/Ubuntu dieser englischen Version] {en} . Der einzige Nachteil der chroot-Lösung liegt darin, dass man ein zusätzliches Speicherplatzvolumen von ~1,5 Gb dafür einplanen muss, da bei dem Vorgang nochmal ein komplettes Basis-System installiert wird, was aber aufgrund der Größe moderner Festplatten in den meisten Fällen leicht zu verschmerzen ist. = Einrichten des chroots = Folgende Pakete müssen installiert werden [1]: * '''dchroot''' (''universe'' [2]) * '''debootstrap''' Nun öffnet man ein Terminal [3] und legt im root-Verzeichnis das Verzeichnis an, welches die Daten der chroot-Umgebung aufnehmen wird: {{{#!vorlage Befehl sudo mkdir /chroot }}} Dann wird die Datei '''/etc/schroot/schroot.conf''' mit einem Texteditor mit Root-Rechten [4] geöffnet. An deren Ende fügt man nun folgendes ein: {{{[hardy] description=Hardy (hardy32) location=/chroot priority=3 groups=[BENUTZER],root root-groups=root aliases=default,unstable,ia32 personality=linux32 type=plain run-exec-scripts=true run-setup-scripts=true }}} ''[BENUTZER]'' ersetzt man dabei durch den eigenen Benutzernamen. Falls eine andere Version als Hardy Heron verwendet wird, muss dieser Eintrag natürlich dementsprechend angepasst werden. Das Herunterladen der benötigten Dateien des 32-Bit-Basissystems wird nun mit {{{#!vorlage Befehl sudo debootstrap --arch i386 hardy /chroot/ http://de.archive.ubuntu.com/ubuntu/ }}} gestartet (auch hier gegebenenfalls den Distributionsnamen anpassen). Dieser Vorgang kann eine Weile dauern. Danach ist der 32-Bit-chroot bereits installiert, aber noch nicht konfiguriert. = apt-get einrichten = Nun wird mit {{{#!vorlage Befehl sudo cp /etc/apt/sources.list /chroot/etc/apt/sources.list sudo cp -R /etc/apt/sources.list.d /chroot/etc/apt/ }}} einfach die '''sources.list''' aus dem "normalen" System auch für den chroot übernommen. Da mittlerweile vermehrt Fremdquellen wie PPAs genutzt werden, für die man öffentliche Schlüssel importieren lassen hat, ist es ratsam, auch diese mitzunehmen, um sich das einzelne manuelle Hinzufügen zu ersparen. Folgendes gilt für Ubuntu 9.10: {{{#!vorlage Befehl sudo cp /etc/apt/secring.gpg /chroot/etc/apt/secring.gpg sudo cp /etc/apt/trustdb.gpg /chroot/etc/apt/trustdb.gpg sudo cp /etc/apt/trusted.gpg /chroot/etc/apt/trusted.gpg }}} Nun wechselt man mit {{{#!vorlage Befehl sudo chroot /chroot }}} das erste Mal in die neueingerichtete Umgebung. Dort wird nun mit {{{#!vorlage Befehl apt-get update }}} und {{{#!vorlage Befehl apt-get upgrade }}} die neukopierte '''sources.list''' eingelesen und das System aktualisiert. Man darf übrigens nicht irritiert sein, wenn nun beim Starten von apt-get oder Synaptic in der chroot-Umgebung Fehlermeldungen über nicht gefundene Quellen auftauchen. Diese rühren lediglich daher, dass der Eintrag der kopierten '''sources.list''' natürlich auf die AMD64-Ubuntu-CD verweist. Diese Meldungen können daher getrost ignoriert werden. = Die chroot-Umgebung konfigurieren = Zunächst wird mit {{{#!vorlage Befehl exit }}} die chroot-Umgebung wieder verlassen (oder man öffnet ein neues Terminal). Weitere Einstellungen des Systems werden nun mit {{{#!vorlage Befehl sudo cp /etc/passwd /chroot/etc/ sudo cp /etc/shadow /chroot/etc/ sudo cp /etc/group /chroot/etc/ sudo cp /etc/sudoers /chroot/etc/ sudo cp /etc/hosts /chroot/etc/ }}} ebenfalls in die chroot-Umgebung übernommen. Für sprach-spezifische Einstellungen empfiehlt sich der Befehl {{{#!vorlage Befehl sudo cp -r /usr/lib/locale/* /chroot/usr/lib/locale/ }}} Dabei werden auf deutschsprachigen Systemen die Zeichensätze ins chroot kopiert. Somit vermeidet man bei Programmen, die aus dem chroot heraus gestartet werden, Probleme bei der Eingabe von Sonderzeichen. Alternativ können auch die gewünschten Sprachpakete über apt-get installiert werden. Desweiteren werden nun auch diverse Verzeichnisinhalte des Systems in die chroot-Umgebung eingeblendet, indem man ebenfalls wieder mit einem Texteditor mit Root-Rechten die Datei '''/etc/fstab''' bearbeitet und an deren Ende {{{/home /chroot/home none bind 0 0 /tmp /chroot/tmp none bind 0 0 /dev /chroot/dev none bind 0 0 # Wenn es später im chroot diese Meldung gibt: # "Can not write log, openpty() failed (/dev/pts not mounted?)", # sollte man folgende Zeile auskommentieren: # /dev/pts /chroot/dev/pts none bind 0 0 # Für shared memory Unterstützung (empfohlen) auskommentieren: # /dev/shm /chroot/dev/shm none bind 0 0 /proc /chroot/proc proc defaults 0 0 # Wenn es Probleme beim Zugriff auf USB-Geräta gibt, folgende Zeile auskommentieren # /proc/bus/usb /chroot/proc/bus/usb none bind 0 0 /media/cdrom0 /chroot/media/cdrom0 none bind 0 0 # Wenn man das komplette /media Verzeichnis inklusive allen # automatisch eingebundenen CD-ROM, USB-Sticks oder externen # Festplatten einbinden möchte, stattdessen das hier nutzen: # /media /chroot/media none rbind 0 0 # Man beachte das "rbind" statt "bind". Näheres: man mount }}} einfügt. Anzumerken ist hierbei, dass man auf diese Weise natürlich auch noch weitere Verzeichnisse wie z.B. ein zweites CD-Laufwerk einbinden kann. Noch nicht vorhandene Verzeichnisse müssen noch mit z.B. {{{#!vorlage Befehl sudo mkdir /chroot/media/cdrom0 }}} erstellt werden. Letztendlich wird die '''fstab''' mit {{{#!vorlage Befehl sudo mount -a }}} neu eingelesen. '''Vorsicht: '''Das doppelte Einbinden von Wechselmedien kann zu Problemen mit dem automatischen Einbinden von Wechselmedien in das System führen. Sowohl Einbinden als auch Aushängen über die grafische Oberfläche Gnome werden unter Gutsy mit einem Verweis auf die doppelte Einbindung abgebrochen. == dchroot nutzen == Um nun möglichst komfortabel Programme aus dem chroot aufrufen zu können, ohne dass man explizit dorthin wechseln muss, ist ein kleines Skript nötig. Zunächst öffnet man wieder einen Texteditor mit Root-Rechten und fügt dort in eine neue Datei die folgenden Zeilen ein: {{{#!/bin/bash /usr/bin/dchroot -d $1 }}} Das Ergebnis speichert man als '''/usr/local/bin/do_chroot'''. Mittels {{{#!vorlage Befehl sudo chmod 755 /usr/local/bin/do_chroot }}} wird das Skript noch ausführbar gemacht. Man kann aber auch einfach nur {{{#!vorlage Befehl dchroot -d }}} nutzen. Wenn es folgenden (oder einen ähnlichen) Fehler gibt: {{{ user@host:~$ dchroot -d I: [Chroot karmic-dbc18511-c81e-4c5b-bc91-5100efaad4c6] Starte Shell: »/bin/bash« (karmic)user@host:~$ smplayer No protocol specified smplayer: cannot connect to X server :0.0 (karmic)user@host:~$ }}} schafft folgender Befehl (vorher chroot mit exit verlassen) Abhilfe: {{{#!vorlage Befehl xhost +local: }}} Nun akzeptiert der XServer die Verbindung und das Starten von Programmen mit graphischer Oberfläche aus dem chroot heraus funktioniert. (Bitte hier eine elegantere Methode als den normalen Autostart ergänzen, um diese Änderung permanent durchzuführen!) = Installation von 32-Bit-Programmen = In die neuerstellte chroot-Umgebung kann nun einfach mit dem Befehl {{{#!vorlage Befehl dchroot -d }}} gewechselt werden. Neue Programme können nun bereits wie gewohnt per Aufruf von apt-get in der Umgebung installiert werden. Dabei wird es wahrscheinlich von Interesse sein, dass auch die 32-Bit-Version eines Paketmanagers ([:Synaptic:] für Ubuntu/Xubuntu, [:Archiv/Adept_Manager:Adept Manager] für Kubuntu) für die Umgebung verfügbar ist. Die Installation erfolgt nun einfach mittels {{{#!vorlage Befehl sudo apt-get install synaptic }}} für Ubuntu/Xubuntu oder {{{#!vorlage Befehl sudo apt-get install adept }}} für Kubuntu. Damit man nun diese Version des Paketmanagers auch außerhalb der chroot-Umgebung komfortabel starten kann, wird zunächst einmal mit folgendem Befehl auf diesen ein symbolischer Link innerhalb der chroot-Umgebung erstellt (die folgenden Befehle gehen von Synaptic aus, falls man stattdessen Adept installiert hat, einfach "synaptic" durch "adept" ersetzen): {{{#!vorlage Befehl sudo ln -s /usr/bin/synaptic /usr/local/bin/synaptic32 }}} für Ubuntu/Xubuntu oder {{{#!vorlage Befehl sudo ln -s /usr/bin/adept_manager /usr/local/bin/adept_manager32 }}} für Kubuntu. Nun wird die Umgebung wieder mit {{{#!vorlage Befehl exit }}} verlassen und (jetzt innerhalb des "normales" Systems) ebenfalls ein symbolischer Link (auf das eben erstellte Skript) erzeugt: {{{#!vorlage Befehl sudo ln -s /usr/local/bin/do_chroot /usr/local/bin/synaptic32 }}} für Ubuntu/Xubuntu oder {{{#!vorlage Befehl sudo ln -s /usr/local/bin/do_chroot /usr/local/bin/adept_manager32 }}} für Kubuntu. Das hat zur positiven Folge, dass man nun, auch ohne explizit in die chroot-Umgebung zu wechseln, den Paketmanager mittels z.B. {{{#!vorlage Befehl sudo synaptic32 }}} für Ubuntu/Xubuntu oder {{{#!vorlage Befehl sudo adept_manager32 }}} für Kubuntu starten kann. Analog kann man diesbezüglich auch bei beliebigen anderen Programmen vorgehen. = Optional: Spracheinstellungen konfigurieren = Wenn man des Englischen nicht mächtig sein sollte und/oder auch die chroot-Umgebung lieber auf Deutsch hätte, kann man innerhalb der Umgebung gemäß [:Lokalisierung:dieser] Anleitung die deutschen Sprachpakete installieren. = Deinstallation der chroot-Umgebung = {{{#!vorlage Warnung Die folgenden Anweisungen sollten sehr genau befolgt werden, um einen möglichen Datenverlust zu vermeiden! }}} Wenn man den chroot wieder entfernen möchte, muss das Verzeichnis '''/chroot''' wieder gelöscht werden. Dabei ist es extrem wichtig, die in der '''/etc/fstab''' angelegten Mountpunkte '''vor''' der Löschoperation wieder zu entfernen, damit es nicht zu einem potentiellen Datenverlust beim Löschen kommt. Dazu öffnet man wieder die Datei '''/etc/fstab''' mit einem Texteditor mit Root-Rechten und entfernt dort die Einträge, die bei der chroot-Installation gemäß der obigen Anleitung angelegt wurden; etwa so sollten diese aussehen: {{{/home /chroot/home none bind 0 0 /tmp /chroot/tmp none bind 0 0 /dev /chroot/dev none bind 0 0 # Wenn es später im chroot diese Meldung gibt: # "Can not write log, openpty() failed (/dev/pts not mounted?)", # sollte man folgende Zeile auskommentieren: # /dev/pts /chroot/dev/pts none bind 0 0 # Für shared memory Unterstützung (empfohlen) auskommentieren: # /dev/shm /chroot/dev/shm none bind 0 0 /proc /chroot/proc proc defaults 0 0 # Wenn es Probleme beim Zugriff auf USB-Geräta gibt, folgende Zeile auskommentieren # /proc/bus/usb /chroot/proc/bus/usb none bind 0 0 /media/cdrom0 /chroot/media/cdrom0 none bind 0 0 # Wenn man das komplette /media Verzeichnis inklusive allen # automatisch eingebundenen CD-ROM, USB-Sticks oder externen # Festplatten einbinden möchte, stattdessen das hier nutzen: # /media /chroot/media none rbind 0 0 # Man beachte das "rbind" statt "bind". Näheres: man mount }}} Damit die Änderungen an der '''/etc/fstab''' wirksam werden, muss nun der Rechner neu gestartet werden. Ein ``mount -a`` reicht hier nicht! Nach dem Neustart sollte man noch einmal überprüfen, ob wirklich nichts mehr unter '''/chroot''' eingebunden ist: {{{#!vorlage Befehl mount }}} {{{#!vorlage Warnung Es ist sehr wichtig, dies zu überprüfen, da sonst Datenverlust droht. }}} Das Löschen des Verzeichnisses kann nun z.B. mit einem mit Root-Rechten laufenden [:Dateimanager:] oder mit dem Befehl {{{#!vorlage Befehl sudo rm -rf /chroot/ }}} im Terminal erfolgen. Desweiteren kann man zur kompletten Deinstallation natürlich auch noch alle Dateien/Links/Pakete löschen/deinstallieren, die man anhand der obigen Installationsanleitung außerhalb der chroot-Umgebung angelegt/installiert hat. ---- # tag: System