Dieser Artikel wurde archiviert, da er - oder Teile daraus - nur noch unter einer älteren Ubuntu-Version nutzbar ist. Diese Anleitung wird vom Wiki-Team weder auf Richtigkeit überprüft noch anderweitig gepflegt. Zusätzlich wurde der Artikel für weitere Änderungen gesperrt.
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
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 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 dieser englischen Version . 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.
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:
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
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.
Nun wird mit
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:
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
sudo chroot /chroot
das erste Mal in die neueingerichtete Umgebung. Dort wird nun mit
apt-get update
und
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.
Zunächst wird mit
exit
die chroot-Umgebung wieder verlassen (oder man öffnet ein neues Terminal). Weitere Einstellungen des Systems werden nun mit
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
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.
sudo mkdir /chroot/media/cdrom0
erstellt werden. Letztendlich wird die fstab mit
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.
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
sudo chmod 755 /usr/local/bin/do_chroot
wird das Skript noch ausführbar gemacht.
Man kann aber auch einfach nur
dchroot -d <befehl>
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:
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!)
In die neuerstellte chroot-Umgebung kann nun einfach mit dem 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, Adept Manager für Kubuntu) für die Umgebung verfügbar ist. Die Installation erfolgt nun einfach mittels
sudo apt-get install synaptic
für Ubuntu/Xubuntu oder
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):
sudo ln -s /usr/bin/synaptic /usr/local/bin/synaptic32
für Ubuntu/Xubuntu oder
sudo ln -s /usr/bin/adept_manager /usr/local/bin/adept_manager32
für Kubuntu.
Nun wird die Umgebung wieder mit
exit
verlassen und (jetzt innerhalb des "normales" Systems) ebenfalls ein symbolischer Link (auf das eben erstellte Skript) erzeugt:
sudo ln -s /usr/local/bin/do_chroot /usr/local/bin/synaptic32
für Ubuntu/Xubuntu oder
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.
sudo synaptic32
für Ubuntu/Xubuntu oder
sudo adept_manager32
für Kubuntu starten kann. Analog kann man diesbezüglich auch bei beliebigen anderen Programmen vorgehen.
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äß dieser Anleitung die deutschen Sprachpakete installieren.
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:
mount
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
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.
Diese Revision wurde am 19. März 2012 14:09 von aasche erstellt.