2.12. Multiarch einsetzen

dpkg führt eine Liste mit allen Architekturen, für die es Pakete installiert bzw. installieren darf. Diese Liste befindet sich in der Datei /var/lib/dpkg/arch und existiert allerdings nur, sofern Sie zuvor auch Fremdarchitekturen ergänzt haben. Das nachfolgende Beispiel stammt von einem System mit amd64 als Basisarchitektur und i386 als Fremdarchitektur.

Inhalt der Liste der Architekturen. 

$ cat /var/lib/dpkg/arch
amd64
i386
$

Die erste Architektur in dieser Datei ist die Basisarchitektur. Diese geben Sie mit der dpkg-Option --print-architecture aus. Früher bzw. bei älteren dpkg-Versionen heißt die Option --print-installation-architecture. Die Fremdarchitekturen zeigen Sie mit dpkg --print-foreign-architectures an.

Über die beiden dpkg-Optionen --add-architecture und --remove-architecture erweitern bzw. reduzieren Sie die Liste entsprechend. Beim Aufruf geben Sie dazu jeweils noch die gewünschte Architektur als Parameter an, bspw. dpkg --add-architecture i386, wenn Sie zusätzlich die Architektur für 32-Bit-PCs nutzen wollen, weil es die von Ihnen gewünschte Software nur für 32-Bit-Systeme gibt.

Während des Vorgangs schreibt dpkg diese Änderung zuerst in eine temporäre Datei namens /var/lib/dpkg/arch-new. Wurden alle anderen Änderungen erfolgreich vorgenommen, benennt dpkg diese Datei in /var/lib/dpkg/arch um.

Installation von Paketen für fremde Architekturen

Bitte berücksichtigen Sie bei Ihrer Softwareplanung, dass nicht jedes Paket für alle Plattformen verfügbar ist. Wenn es verfügbar ist und Sie es erfolgreich auf Ihrem System installieren konnten, heißt das nicht automatisch, dass es auch auf Ihrer Architektur funktioniert, sondern nur, dass die Paketverwaltung alle benannten Paketabhängigkeiten erfüllen konnte.

Löschen einer Fremdarchitektur

Das Entfernen einer Fremdarchitektur gelingt Ihnen nur dann, wenn keine Pakete (mehr) für diese Architektur auf Ihrem System installiert sind. Wie Sie Pakete architekturbezogen deinstallieren, lesen Sie in Abschnitt 8.43, „Pakete deinstallieren“ nach.

2.12.1. Multiarch-Beispiel: Installieren eines 32-Bit-Pakets auf einem 64-Bit-System

Ein vollständiges Beispiel für den Einsatz von multiarch ist die Nutzung des Forth-Interpreters pforth auf einem 64-bittigen Debian (Architektur amd64). pforth ist über das gleichnamige Paket bislang nur nativ für 32-Bit-Betriebssysteme verfügbar. Gleiches betrifft das recht weit verbreitete, aber nicht-quelloffene Kommunikationsprogramm Skype [Skype]. Eine passende Schritt-für-Schritt-Anleitung finden Sie im Debian Wiki [Debian-Wiki-Skype].

Im Folgenden zeigen wir Ihnen anhand des vorgenannten Pakets pforth, wie eine solche Installation abläuft und insbesondere, welche Einzelschritte wir dabei für beachtenswert halten. Zunächst überprüfen Sie mittels dpkg und dessen Option --print-architecture die derzeit benutzte Architektur Ihres Systems – im hier betrachteten Fall ist es amd64. Danach ergänzen Sie die Liste der Architekturen via dpkg --add-architecture i386 um i386 als weitere Plattform, für die Ihr System Pakete akzeptiert. Ob der Vorgang erfolgreich war, zeigt Ihnen der Parameter --print-foreign-architectures von dpkg an. Damit erhalten Sie eine Übersicht zu allen „Fremdarchitekturen“, die ihr Debiansystem derzeit akzeptiert.

Hinzufügen einer weiteren genutzten Paketarchitektur mittels dpkg

# dpkg --print-architecture
amd64
# dpkg --add-architecture i386
# dpkg --print-foreign-architectures
i386
#

Nun aktualisieren Sie die lokale Liste der verfügbaren Pakete mittels apt-get update, wobei APT nun auch die Informationen zu den Paketen der neu hinzugefügten Architektur herunterlädt.

Aktualisieren der Paketlisten. 

# apt-get update
Ign http://ftp.ch.debian.org jessie InRelease
Hit http://ftp.ch.debian.org jessie Release.gpg
Hit http://ftp.ch.debian.org jessie Release
Hit http://ftp.ch.debian.org jessie/main amd64 Packages
Get:1 http://ftp.ch.debian.org jessie/main i386 Packages [6769 kB]
Hit http://ftp.ch.debian.org jessie/main Translation-en
Fetched 6769 kB in 6s (1005 kB/s)
Reading package lists... Done

Als nächsten Schritt prüfen Sie mit dem Aufruf apt-cache policy, für welche akzeptierte Architektur das von Ihnen gewünschte Paket bereitsteht. Die Details zum Aufruf von apt-cache finden Sie unter „Aus welchem Repo kommen die Pakete“ in Abschnitt 8.14, „Aus welchem Repo kommen die Pakete“.

Prüfung auf Verfügbarkeit für eine Architektur mittels apt-cache

# apt-cache policy pforth
pforth:i386:
  Installed: (none)
  Candidate: 21-12
  Version table:
     21-12 0
        990 http://ftp.ch.debian.org/debian/ jessie/main i386 Packages
#

Sie ersehen aus der obigen Ausgabe, dass das Paket bislang noch nicht auf Ihrem System installiert ist. Es steht für die Architektur i386 und die Veröffentlichung Debian 8 Jessie bereit. Nun können Sie das Paket pforth installieren. Das zieht u.a. das essentielle Paket libc6 für die Architektur i386 nach sich, um die Abhängigkeiten zum Paket pforth zu erfüllen.

Installation des i386-Pakets pforth auf amd64-Debian. 

# apt-get install pforth
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  gcc-4.9-base:i386 libc6:i386 libgcc1:i386
Suggested packages:
  glibc-doc:i386
Recommended packages:
  libc6-i686:i386
The following NEW packages will be installed:
  gcc-4.9-base:i386 libc6:i386 libgcc1:i386 pforth:i386
0 upgraded, 4 newly installed, 0 to remove and 27 not upgraded.
Need to get 4,252 kB of archives.
After this operation, 9,727 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ftp.ch.debian.org/debian/ jessie/main gcc-4.9-base i386 4.9.1-15 [158 kB]
Get:2 http://ftp.ch.debian.org/debian/ jessie/main libc6 i386 2.19-11 [3,977 kB]
Get:3 http://ftp.ch.debian.org/debian/ jessie/main libgcc1 i386 1:4.9.1-15 [48.2 kB]
Get:4 http://ftp.ch.debian.org/debian/ jessie/main pforth i386 21-12 [69.1 kB]
Fetched 4,252 kB in 0s (20.5 MB/s)
Preconfiguring packages ...
Selecting previously unselected package gcc-4.9-base:i386.
(Reading database ... 474485 files and directories currently installed.)
Preparing to unpack .../gcc-4.9-base_4.9.1-15_i386.deb ...
Unpacking gcc-4.9-base:i386 (4.9.1-15) ...
Selecting previously unselected package libc6:i386.
Preparing to unpack .../libc6_2.19-11_i386.deb ...
Unpacking libc6:i386 (2.19-11) ...
Replacing files in old package libc6-i386 (2.19-11) ...
Selecting previously unselected package libgcc1:i386.
Preparing to unpack .../libgcc1_1%3a4.9.1-15_i386.deb ...
Unpacking libgcc1:i386 (1:4.9.1-15) ...
Selecting previously unselected package pforth.
Preparing to unpack .../archives/pforth_21-12_i386.deb ...
Unpacking pforth (21-12) ...
Processing triggers for man-db (2.7.0-1) ...
Setting up gcc-4.9-base:i386 (4.9.1-15) ...
Setting up libc6:i386 (2.19-11) ...
Setting up libgcc1:i386 (1:4.9.1-15) ...
Setting up pforth (21-12) ...
Processing triggers for libc-bin (2.19-11) ...
#

In o.g. Fall wurde das Paket libc6 als Abhängigkeit auch für die Architektur i386 installiert. Sie erkennen das daran, dass neben dem Namen des Pakets auch die Architektur angegeben wird. Als Trennzeichen in der Ausgabe fungiert hier ein Doppelpunkt.

Abschließend überprüfen Sie mittels dpkg, für welche Architekturen die Pakete pforth und libc6 auf Ihrem System installiert sind.

Installationsstatus für das Paket libc6

# dpkg -l pforth libc6
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  libc6:amd64    2.19-11      amd64        GNU C Library: Shared libraries
ii  libc6:i386     2.19-11      i386         GNU C Library: Shared libraries
ii  pforth         21-12        i386         portable Forth interpreter
#

Im letzten Schritt probieren Sie aus, ob das frisch installierte 32-Bit-Programm auch unter Ihrem 64-Bit-Betriebssystem funktioniert. Dazu rufen Sie das Programm auf.

Ausführung von pforth

$ pforth
PForth V21
pForth loading dictionary from file /usr/lib/pforth/pforth.dic
     File format version is 8
     Name space size = 120000
     Code space size = 300000
     Entry Point     = 0
     Little  Endian Dictionary
Begin AUTO.INIT ------
...
$