Die Linux®-Binärkompatibilität ist per Voreinstellung nicht aktiviert und auch Linux®-Bibliotheken werden nicht installiert. Linux®-Bibliotheken können entweder manuell, oder aus der FreeBSD Ports-Sammlung installiert werden.
Bevor Sie versuchen den Port zu bauen, laden Sie das Linux®-Kernelmodul, da ansonsten der Bau fehlschlägt:
#
kldload linux
Für 64-Bit Kompatibilität:
#
kldload linux64
Prüfen Sie, ob das Modul geladen wurde:
%
kldstat
Id Refs Address Size Name 1 2 0xc0100000 16bdb8 kernel 7 1 0xc24db000 d000 linux.ko
Der einfachste Weg um einen Basissatz von Linux®-Bibliotheken und Binärdateien auf einem FreeBSD-System zu installieren, ist über den Port oder das Paket emulators/linux_base-c7. So installieren Sie das Paket:
#
pkg install emulators/linux_base-c7
Wollen Sie die Linux®-Binärkompatibilität beim Systemstart
aktivieren, fügen Sie folgende Zeile in
/etc/rc.conf
hinzu:
linux_enable="YES"
Auf 64-Bit Maschinen wird das Modul für die 64-Bit
Emulation automatisch von /etc/rc.d/abi
geladen.
Seitdem die Linux®-Binärkompatibilität Unterstützung für die Ausführung von 32- und 64-Bit-Linux®-Binärdateien erhalten hat, ist es nicht mehr möglich, die Emulationsfähigkeit in einen angepassten Kernel zu integrieren.
Wenn sich eine Linux®-Anwendung über fehlende Bibliotheken beschwert nachdem die Linux®-Binärkompatibilität installiert wurde, finden Sie heraus welche Bibliothken die Anwendung benötigt und installieren Sie diese manuell.
Mit ldd
können Sie unter Linux®
bestimmen, welche gemeinsam benutzten Bibliotheken eine
Anwendung benötigt. Wenn Sie herausfinden wollen, welche
Bibliotheken linuxdoom
benötigt, können Sie
folgenden Befehl auf einem Linux®-System ausführen, welches
Doom installiert hat:
%
ldd linuxdoom
libXt.so.3 (DLL Jump 3.1) => /usr/X11/lib/libXt.so.3.1.0 libX11.so.3 (DLL Jump 3.1) => /usr/X11/lib/libX11.so.3.1.0 libc.so.4 (DLL Jump 4.5pl26) => /lib/libc.so.4.6.29
Kopieren Sie alle Dateien aus der letzten Spalte der
Ausgabe von einem Linux®-System auf das FreeBSD-System in das
Verzeichnis /compat/linux
. Nach dem
Kopieren erstellen Sie symbolische Links auf die Namen in der
ersten Spalte. In diesem Beispiel werden folgende Dateien auf
dem FreeBSD-System installiert:
/compat/linux/usr/X11/lib/libXt.so.3.1.0 /compat/linux/usr/X11/lib/libXt.so.3 -> libXt.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3.1.0 /compat/linux/usr/X11/lib/libX11.so.3 -> libX11.so.3.1.0 /compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Wenn Sie bereits eine Linux®-Bibliothek einer zur ersten Spalte passenden Hauptversionsnummer besitzen, muss sie nicht mehr kopiert werden, da die bereits vorhandene Version funktionieren sollte. Hat die Bibliothek jedoch eine neuere Versionsnummer, sollten Sie sie dennoch kopieren. Sie können die alte Version löschen, solange Sie einen symbolischen Link auf die neue Version anlegen.
Folgende Bibliotheken existieren bereits auf dem FreeBSD-System:
/compat/linux/lib/libc.so.4.6.27$ /compat/linux/lib/libc.so.4 -> libc.so.4.6.27
ldd
zeigt an, dass eine Anwendung eine
neuere Version benötigt:
libc.so.4 (DLL Jump 4.5pl26) -> libc.so.4.6.29
Wenn diese Bibliotheken sich nur um ein oder zwei Stellen
in der Unterversionsnummer unterscheiden, sollte das Programm
dennoch mit der älteren Version funktionieren. Wenn Sie
wollen, können Sie die bestehende libc.so
durch die neuere Version ersetzen:
/compat/linux/lib/libc.so.4.6.29 /compat/linux/lib/libc.so.4 -> libc.so.4.6.29
Der Mechanismus der symbolischen Links wird nur für Linux®-Binärdateien benötigt. Nach einer Weile wird es eine ausreichende Menge an Linux®-Bibliotheken auf dem System geben, sodass Sie neu installierte Linux®-Anwendungen ohne zusätzlichen Aufwand auf dem System laufen lassen können.
ELF-Binärdateien benötigen manchmal eine zusätzliche „Kennzeichnung“. Wenn Sie versuchen, eine nicht gekennzeichnete ELF-Binärdatei auszuführen, werden Sie eine Fehlermeldung ähnlich der folgenden erhalten:
%
./my-linux-elf-binary
ELF binary type not known Abort
Damit der FreeBSD-Kernel eine Linux®-ELF-Datei von einer FreeBSD-ELF-Datei unterscheiden kann, gibt es das Werkzeug brandelf(1).
%
brandelf -t Linux my-linux-elf-binary
Die GNU Werkzeuge schreiben nun automatisch die passende Kennzeichnungsinformation in die ELF-Binärdateien, so dass Sie diesen Schritt in Zukunft nur noch selten benötigen.
Wenn Sie eine Linux® RPM-basierte
Anwendung installieren möchten, installieren Sie zunächst den
Port oder das Paket archivers/rpm4.
Anschließend kann der Superuser das folgende Kommando
benutzen, um ein .rpm
zu
installieren:
#
cd /compat/linux
#
rpm2cpio < /pfad/zum/linux.archiv.rpm | cpio -id
Fall notwendig, benutzen Sie brandelf
auf den installierten ELF-Binärdateien. Beachten Sie, dass
dies eine saubere Deinstallation verhindert.
Wenn DNS nicht funktioniert, oder die folgende Fehlermeldung erscheint:
resolv+: "bind" is an invalid keyword resolv+: "hosts" is an invalid keyword
müssen Sie
/compat/linux/etc/host.conf
wie folgt
bearbeiten:
order hosts, bind multi on
Diese Reihenfolge legt fest, dass zuerst
/etc/hosts
und anschließend
DNS durchsucht werden. Wenn
/compat/linux/etc/host.conf
nicht
vorhanden ist, nutzen Linux®-Anwendungen
/etc/host.conf
und
beschweren sich über die inkompatible FreeBSD-Syntax. Wenn Sie
in /etc/resolv.conf
keinen Nameserver
konfiguriert haben, sollten Sie den Eintrag
bind
entfernen.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.