VMware Workstation ist eine bekannte Desktop-Virtualisierungssoftware, die es ermöglicht mehrere virtuelle Maschinen gleichzeitig auf einem System zu betreiben.
Vor der eigentlichen Installation empfehle ich die Pakete mittels:
sudo dnf update -y
auf einen aktuellen Stand zu bringen sowie die Pakete kernel-devel und kernel-headers zu installieren:
sudo dnf install -y kernel-devel-$(uname -r) kernel-headers
Damit wir im Anschluss die Möglichkeit haben die VMware Kernel-Module zu kompilieren.
Als Nächstes laden wir das VMware Workstation Bundle herunter, machen es ausführbar und starten die Installation.
cd ~/Downloads
sudo chmod 700 VMware-Workstation-Full-*.bundle
sudo ./VMware-Workstation-Full-*.bundle
Die Installation sollte mit einem „Installation was successful.“ abschließen.
Nun müssen die Kernel-Module kompiliert werden.
Hierfür holen wir uns die Dateien aus dem Github Repo vmware-host-modules von Michal Kubeček, der ein Repository pflegt, welches Patches für aktuelle Kernel-Versionen für die Module vmmon und vmnet enthält.
Wir setzen zwei Umgebungsvariablen für die VMware-Version und ein Temp-Verzeichnis:
VMWARE_VERSION=workstation-16.2.3
TMP_FOLDER=/tmp/patch-vmware
Erstellen das tempörare Verzeichnis und wechseln dorthin:
rm -fdr $TMP_FOLDER
mkdir -p $TMP_FOLDER
cd $TMP_FOLDER
Installieren git, sofern noch nicht vorhanden.
sudo apt install git -y
Klonen das Repository:
git clone https://github.com/mkubecek/vmware-host-modules.git
Wechseln in das vmware-host-modules-Unterverzeichnis:
cd $TMP_FOLDER/vmware-host-modules
Wechseln auf den Branch für die VMWare Version und rufen die Änderungen ab.
git checkout $VMWARE_VERSION
git fetch
Jetzt können wir die Kernel-Module mittels:
make
kompilieren und installieren.
sudo make install
Anschließend entfernen wir die mitgebrachte zlib Bibliothek und verlinken die auf dem System vorhandene.
sudo rm /usr/lib/vmware/lib/libz.so.1/libz.so.1
sudo ln -s /lib/x86_64-linux-gnu/libz.so.1 /usr/lib/vmware/lib/libz.so.1/libz.so.1
Damit ist die Installation erst einmal abgeschlossen.
Erst einmal, da auf EFI-Systemen mit aktiviertem Secure Boot die VMware-Module vmmon und vmnet signiert werden müssen, damit Sie geladen werden können.
Dazu müssen wir einen sog. Maschinenbesitzerschlüssel (Machine Owner Key), kurz MOK generieren.
OpenSSL installieren, sofern noch nicht vorhanden:
sudo dnf install -y openssl
sudo mkdir -p /misc/sign-vmware-modules
sudo chmod 777 /misc/sign-vmware-modules
cd /misc/sign-vmware-modules
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=MSI/"
chmod 600 MOK.priv
Anschließend importieren wir den erstellten Schlüssel. Das Passwort welches wir vergeben, wird später beim Einschreiben des Schlüssel benötigt.
sudo mokutil --import MOK.der
Um die Module zu signieren erstellen wir ein Skript unter /misc/sign-vmware-modules/signingscript welches die VMware Module mit dem MOK-Schlüssel signiert.
#!/bin/bash
for modfile in $(modinfo -n vmmon vmnet); do
echo "Signing $modfile"
/usr/src/kernels/$(uname -r)/scripts/sign-file sha256
/misc/sign-vmware-modules/MOK.priv
/misc/sign-vmware-modules/MOK.der "$modfile"
done
Dann ändern wir die Berechtigungen für das Skript und führen es aus. Es kann wiederholt aufgerufen werden, eg. nach einer Aktualisierung des Systems.
chmod 700 /misc/sign-vmware-modules/signingscript
sudo /misc/sign-vmware-modules/signingscript
Nun starten wir das System neu und bestätigen den Start des MOK Management Utility.
Im MOK Management Utility wählen wir:
1. Enroll MOK
2. View Key 0, den Schlüssel prüfen und Continue wählen um fortzufahren
3. Bestätigen des Einschreibens des Schlüssels unter Angabe des Passworts, welches wir beim Erstellen des Schlüssels angegeben haben
4. Reboot
Damit sollte alles soweit passen.