Ich habe eine 64-Bit (amd64 alias x86_64) Debian- oder Ubuntu-Installation. Ich muss gelegentlich 32-Bit-Programme (i386/i686) ausführen oder Programme für ein 32-Bit-System kompilieren. Wie kann ich das mit einem Minimum an Aufwand tun?
Bonus:Was ist, wenn ich eine ältere oder neuere Version der Distribution ausführen oder testen möchte?
Akzeptierte Antwort:
Für aktuelle Versionen
Aktuelle Debian und Ubuntu haben Multiarch-Unterstützung:Sie können x86_32 (i386) und x86_64 (amd64) Pakete auf dem gleichen System auf einfache Weise mischen. Dies wird als Multiarch-Unterstützung bezeichnet –
siehe Ubuntu- oder Debian-Wiki für weitere Informationen.
Eine einfache, aktuelle Antwort finden Sie in der Antwort von warl0ck.
Für alte Versionen
In älteren Versionen werden Debian und Ubuntu mit einer Reihe von 32-Bit-Bibliotheken auf AMD64 ausgeliefert. Installieren Sie die ia32-libs
, um einen grundlegenden Satz von 32-Bit-Bibliotheken und möglicherweise andere Pakete, die von diesem abhängen, zu haben. Ihre ausführbaren 32-Bit-Dateien sollten einfach ausgeführt werden, wenn Sie über alle erforderlichen Bibliotheken verfügen. Installieren Sie für die Entwicklung
gcc-multilib
und wiederum möglicherweise andere Pakete, die davon abhängen, wie
g++-multilib
. Möglicherweise finden Sie binutils-multiarch
ebenfalls nützlich und
ia32-libs-dev
auf Debian. Übergeben Sie den -m32
Option für gcc zum Kompilieren für ix86.
Beachten Sie, dass uname -m
wird weiterhin x64_64
anzeigen wenn Sie einen 64-Bit-Kernel ausführen, unabhängig davon, welche 32-Bit-Benutzermoduskomponenten Sie installiert haben. Der unten beschriebene Schroot kümmert sich darum.
Schroot
Dieser Abschnitt ist eine Anleitung zur Installation einer Debian-ähnlichen Distribution „innerhalb“ einer anderen Linux-Distribution. Es ist in Bezug auf die Installation eines 32-Bit-Ubuntu in einem 64-Bit-Ubuntu formuliert, sollte aber mit geringfügigen Änderungen auf andere Situationen anwendbar sein, wie z. B. die Installation von Debian Unstable in Debian Stable oder umgekehrt.
Einführung
Die Idee ist, eine alternative Distribution in einem Unterbaum zu installieren und von dort aus zu starten. Sie können auf diese Weise ein 32-Bit-System auf einem 64-Bit-System oder eine andere Version Ihrer Distribution oder eine Testumgebung mit verschiedenen installierten Paketsätzen installieren.
Die chroot
Befehl und Systemaufruf startet einen Prozess mit Blick auf das Dateisystem, das auf einen Teilbaum des Verzeichnisbaums beschränkt ist. Debian und Ubuntu liefern Schroot aus, ein Dienstprogramm, das diese Funktion umschließt, um eine benutzerfreundlichere Unterumgebung zu erstellen.
Installieren Sie schroot
Paket (Debian) und der
debootstrap
Paket (Debian). Debootstrap wird nur für die Installation der alternativen Distribution benötigt und kann danach wieder entfernt werden.
Schroot einrichten
In diesem Beispiel wird beschrieben, wie Sie eine alternative Umgebung mit 32-Bit-Ubuntu 10.04LTS (lucid lynx) einrichten. Ein ähnliches Setup sollte mit anderen Versionen von Debian und Ubuntu funktionieren. Erstellen Sie eine Datei /etc/schroot/chroot.d/lucid32
mit folgendem Inhalt:
[lucid32]
description=Ubuntu 10.04LTS 32-bit
directory=/32
type=directory
personality=linux32
users=yourusername
groups=users,admin
Die Zeile directory=/32
teilt schroot mit, wo wir die Dateien der 32-Bit-Installation ablegen. Die Zeile username=yourusername
sagt der Benutzer yourusername
dürfen die Schroot verwenden. Die Zeile groups=users,admin
sagt, dass Benutzer in beiden Gruppen Schroot verwenden dürfen; Sie können auch ein users=…
einfügen Richtlinie.
Installieren Sie die neue Distribution
Erstellen Sie das Verzeichnis und beginnen Sie, es mit debootstrap zu füllen. Debootstrap lädt einen Kernsatz von Paketen für die angegebene Distribution und Architektur herunter und installiert ihn.
mkdir /32
debootstrap --arch i386 lucid /32 http://archive.ubuntu.com/ubuntu
Sie haben fast schon ein funktionierendes System; Was folgt, sind kleinere Verbesserungen. Schroot überschreibt automatisch mehrere Dateien in /32/etc
wenn Sie es ausführen, insbesondere die DNS-Konfiguration in /etc/resolv.conf
und die Benutzerdatenbank in /etc/passwd
und andere Dateien (dies kann überschrieben werden, siehe Dokumentation). Es gibt noch ein paar weitere Dateien, die Sie vielleicht ein für alle Mal manuell kopieren möchten:
cp -p /etc/apt/apt.conf /32/etc/apt/ # for proxy settings
cp -p /etc/apt/sources.list /32/etc/apt/ # for universe, security, etc
cp -p /etc/environment /32/etc/ # for proxy and locale settings
cp -p /etc/sudoers /32/etc/ # for custom sudo settings
Es wird keine Datei /etc/mtab
geben oder /etc/fstab
in der Chroot. Ich empfehle nicht, mount
zu verwenden Befehl manuell in der Chroot, tun Sie es von außen. Aber erstellen Sie eine ausreichend gute /etc/mtab
um Befehle wie df
zu machen vernünftig arbeiten.
ln -s /proc/mounts /32/etc/mtab
Mit dem directory
Typ führt Schroot Bind-Mounts einer Reihe von Verzeichnissen durch, d. h. diese Verzeichnisse werden mit der übergeordneten Installation geteilt:/proc
, /dev
, /home
, /tmp
.
Dienste in der Chroot
Wie hier beschrieben, ist eine Schroot nicht zum Ausführen von Daemons geeignet. Programme in der Schroot werden beendet, wenn Sie die Schroot beenden. Verwenden Sie eine „einfache“ Schroot anstelle einer „Verzeichnis“-Schroot, wenn Sie möchten, dass sie dauerhafter ist, und richten Sie permanente Bind-Mounts in /etc/fstab
ein auf der übergeordneten Installation.
Bei Debian und Ubuntu werden Dienste automatisch bei der Installation gestartet. Um dies zu vermeiden (was die außerhalb der Chroot laufenden Dienste stören könnte, insbesondere weil Netzwerkports gemeinsam genutzt werden), erstellen Sie eine Richtlinie, keine Dienste in der Chroot auszuführen. Fügen Sie das folgende Skript als /32/usr/sbin/policy-rc.d
ein und ausführbar machen (chmod a+rx /32/usr/sbin/policy-rc.d
).
#!/bin/sh
## Don't start any service if running in a chroot.
## See /usr/share/doc/sysv-rc/README.policy-rc.d.gz
if [ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]; then
exit 101
fi
Befüllen Sie das neue System
Jetzt können wir anfangen, die Chroot zu benutzen. An dieser Stelle sollten Sie einige weitere Pakete installieren.
schroot -c lucid32
sudo apt-get update
apt-get install lsb-core nano
...
Möglicherweise müssen Sie einige Gebietsschemata generieren, z. B.
locale-gen en_US en_US.utf8
Wenn die Schroot für eine ältere Version von Ubuntu wie 8.04 (hardy) ist, beachten Sie, dass das Paket ubuntu-standard einen MTA einzieht. Wählen Sie nullmailer
anstelle des standardmäßigen postfix
(Vielleicht möchten Sie, dass Ihre Chroot-Mail E-Mails sendet, aber Sie möchten auf keinen Fall, dass sie E-Mails empfängt).
Weitergehen
Weitere Informationen finden Sie unter schroot
Handbuch, die Schroot-FAQ und die schroot.conf
Handbuch. Schroot ist Teil des Debian-Autobuilder-Projekts (buildd). Auf der Ubuntu-Community-Seite finden Sie möglicherweise weitere nützliche Tipps zu debootstrap.
Virtuelle Maschine
Wenn Sie die alternative Umgebung vollständig isolieren müssen, verwenden Sie eine virtuelle Maschine wie KVM (qemu-kvm ) oder VirtualBox.