Linux Binary Compatibility: Ubuntu unter FreeBSD

Mittels der Linux Binary Compatibility lassen sich seit Jahren Linux Binaries/Software unter FreeBSD installieren und ausführen. Möglich ist das für i386, amd64 und arm64-Architekturen. Dies kann interessant werden um beispielsweise Spotify oder Signal auf seinem FreeBSD-System zu nutzen. Viele User bezeichnen den Kompatibilitätsmodus als Jail – darüber lässt sich streiten. Ein kurzen Einstieg zum Thema Jails habe ich vor nicht all zu langer Zeit auf diesem Blog veröffentlicht. Doch heute soll es um etwas mehr Linux auf unserem FreeBSD gehen und ich zeige euch, wie man es mit wenig Aufwand ermöglicht.

FreeBSD vorbereiten

Zuerst müssen wir die Linux Binary Compatibility unter FreeBSD verfügbar machen und das erfolgt simpel wie immer mit folgendem Befehl:

service linux enable

Dadurch werden auch bei einem Neustart alle nötigen Linux-Module vom Kernel geladen.

Danach legen wir nötige Ordner für das Ubuntu base system an:

mkdir -p /compat/ubuntu/{dev/fd,dev/shm,home,proc,sys,tmp}

Der Ordner „ubuntu“ kann an der Stelle auch einen völlig anderen Namen haben. In diesem Ordner befindet sich später, wie erwähnt, das base system. Im Laufe des Tutorials wird sich darauf noch öfters bezogen, daher ist es wichtig, nicht nur die nötigen Kommandos zu kopieren, sondern auch Verständnis gefragt.

Um den Service entsprechend zu starten, ist folgender Befehl nötig:

service linux start

Installation von Ubuntu in den Linux Binary Compatibility Ordner

An der Stelle wird das Package „debootstrap“ installiert. Dies ist nötig, um das Ubuntu base System herunterzuladen und in das Linux Binary Compatibility zu installieren. Für die Installation des Pakets ist folgender Befehl nötig:

pkg install debootstrap

Um die eigentliche Installation des Ubuntu base systems durchzuführen, muss der nachfolgende Befehl eingegeben werden:

debootstrap --arch=amd64 --no-check-gpg jammy /compat/ubuntu

Hierbei sei natürlich gesagt, dass man eine amd64 besitzen soll, andernfalls ist hier i386 oder arm64 für die entsprechende Architektur einzugeben. jammy bezieht sich hierbei auf den Release-Namen und installiert Ubuntu 22.04.1 LTS. Hier erfolgt wieder die Angabe des Pfades unter dem das base system zu finden ist. In unserem Falle wäre das wieder /compat/ubuntu.

Danach ist die Linux Binary Compatibility neuzustarten:

service linux restart

Wechseln in das „Ubuntu base system“

Um in Ubuntu zu wechseln, ist folgender Befehl nötig:

chroot /compat/ubuntu /bin/bash

Dort angekommen, wollen wir natürlich erstmal unseren Paket-Manager aptitude einsetzen, um unser base system gebenenfalls zu aktualisieren.

apt update && apt -upgrade -y

Hiermit werden die aktuellen Paketlisten heruntergeladen und im Anschluss die bereits installierten Pakete geupgradet.

Hierbei traten bei mir folgende Probleme auf, deshalb möchte ich das euch gleich entsprechend eine Lösung mit an die Hand geben:

Get:1 http://archive.ubuntu.com/ubuntu jammy InRelease [270 kB]
Err:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Couldn't create temporary file /tmp/apt.conf.ngeHrm for passing config to apt-key
Reading package lists… Done
W: GPG error: http://archive.ubuntu.com/ubuntu jammy InRelease: Couldn't create temporary file /tmp/apt.conf.ngeHrm for passing config to apt-key
E: The repository 'http://archive.ubuntu.com/ubuntu jammy InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

Wenn wir genau in Zeile 3 lesen, erhalten wir schon einen möglichen Hinweis, wieso die Aktualisierung fehlgeschlagen ist. Es konnte vorübergehend also keine notwendige Datei im tmp-Verzeichnis für den Prozess angelegt werden, klingt also nach einem möglichen Rechteproblem

Folgende Prüfung gibt uns Aufschluss darüber, welche Rechte für das tmp-Verzeichnis gelten:

ls -lad /tmp/

Folgenden Output habe ich erhalten:

drwxr-xr-x 2 root root 2 Dec 20 16:31 /tmp/

Numerisch existieren also folgende Rechte: 1751. Für den Ordner /tmp/ ist der Standardwert 1777. Wenn wir über exit unser Ubuntu verlassen und auf FreeBSD die Rechte vom tmp-Ordner anzeigen lassen, wird uns das auch bestätigt. Also wieder zu Ubuntu wechseln und mit folgendem Befehl die Rechte für den Ordner /tmp/ neu setzen:

chmod 1777 /tmp/

Danach habe ich wieder ein Update versucht und der Ordner /dev/null war betroffen. Hier habe ich wieder die Rechte entsprechend dem tmp-Verzeichnis angepasst und apt update als auch apt upgrade ist sauber durchgelaufen.

An diesem Punkt angelangt, sind wir nun in der Lage Linux-Software auf FreeBSD zu installieren und natürlich auszuführen. Diese Art der Vorgehensweise ist ein Beispiel um beliebte Software wie Signal, Spotify oder Google Chrome auf FreeBSD zu nutzen.

Wenn jemand über andere Probleme beim Updaten stolpern sollte, überprüft auch mal die sources.list von aptitude:

root@byte-sized:/# cat /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ jammy main

Wichtig ist hierbei noch, um wieder zu FreeBSD wechseln zu können, müssen wir lediglich exit eintippen. Das soll es auch schon zum Thema Linux Binary Compatibility mit Ubuntu gewesen sein.

exit

The End

Ich habe meine Anleitung zwar auf einem PC und in einer VM getestet, dennoch kann es natürlich immer zu unerwarteten Fehlern kommen. Falls ihr im Laufe des Tutorials über andere Fehler und Probleme gestolpert seid, lasst es mich bitte wissen, um diesen Post weiter zu verbessern und wachsen zu lassen – gerne als Kommentar oder per Mail an info@byte-sized.de – Vielen Dank!

Start the discussion

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert