GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Debian – Wie führt man 32-Bit-Programme auf einem 64-Bit-Debian/Ubuntu aus?

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.

Verwandte:Linux – Wann würden Sie pivot_root über switch_root verwenden?

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.


Ubuntu
  1. So installieren Sie Spotify unter Ubuntu und Debian

  2. So installieren Sie Python 3.5 unter Ubuntu, Debian und Linuxmint

  3. So installieren Sie Indicator SysMonitor unter Ubuntu und Debian

  4. So installieren Sie Docker unter Debian / Ubuntu

  5. Wie unterscheidet sich Ubuntu von Debian?

So installieren Sie Docker unter Debian 9

So installieren Sie PHP 5.6 unter Ubuntu 16.04 und Debian 9

So installieren Sie Typora auf einer Ubuntu/Debian-Distribution

So installieren Sie SpamAssassin unter Ubuntu/Debian

So installieren Sie PrestaShop unter Ubuntu/Debian

So führen Sie Java-Programme in Ubuntu aus