ubuntuusers.de

32-Bit chroot

Archivierte Anleitung

Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.

Artikel für fortgeschrittene Anwender

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.

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:

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.

apt-get einrichten

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.

Die chroot-Umgebung konfigurieren

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.

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

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!)

Installation von 32-Bit-Programmen

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.

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äß dieser Anleitung die deutschen Sprachpakete installieren.

Deinstallation der chroot-Umgebung

Achtung!

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 

Achtung!

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.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System