Fedora42 + VMware Workstation

Fedora42など、Kernelが新しいLinuxではVMware Workstationのカーネルモジュールがコンパイルできず使えません。古いカーネルを使えばコンパイルできるのですが、新しいカーネルでも使いたいので調べました。

Fedora42からはカーネルモジュールへのサインも必須になっています。(無効にもできますが、サインするのは簡単)

そのままコンパイルできるソースは無かった

無かったので最も簡単にコンパイルできるように出来そうなソースコード

https://github.com/64kramsystem/vmware-host-modules-fork

にパッチを作ってコンパイルできるようにしました。

https://github.com/64kramsystem/vmware-host-modules-fork/pull/1

プルリクエストにモジュールにサインする方法を書いているのでその通りにすればOKです。

サインするスクリプト

以下がサインする為に作ったスクリプトです。スクリプトにしたのは、後から見ても何をしなければならないのか、他の人が見ても解るようにするためです。

#!/usr/bin/env bash

## Prerequisite

## Create Mok key for secure boot
## -nodes is removed, since mokutil requires passphrase more than 1 char. Passphrase is asked by this command 
#cd /usr/lib/vmware/modules/source 
#openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=VMware/"

## Create password less key for convenience
#openssl rsa -in MOK.priv -passin pass:passphrase -out MOK.priv.unencrypted

## Import Mok key for secure boot. You'll be asked by UEFI secure boot to import this key or you have to import this key via UEFI menu.
## You only have to import key once, but new kernel modules must be signed always. Otherwise, kernel refuses to load module. 
#mokutil --import MOK.der

## Newly compiled modules must be signed
/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv.unencrypted ./MOK.der $(modinfo -n vmmon)
/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv.unencrypted ./MOK.der $(modinfo -n vmnet)

スクリプトに書いてあるコメント通りです。

cd /usr/lib/vmware/modules/source 
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -days 36500 -subj "/CN=VMware/"

パスフレーズがあると起動に困るので無しの鍵を作ります。

openssl rsa -in MOK.priv -passin pass:passphrase -out MOK.priv.unencrypted

として鍵を生成し、UEFIに鍵を登録します。

mokutil --import MOK.der

鍵を安全な場所に置いた方が良い場合は安全な場所に移します。

サインするのはスクリプトに書いてある様に

/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv.unencrypted ./MOK.der $(modinfo -n vmmon)
/usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv.unencrypted ./MOK.der $(modinfo -n vmnet)

とします。

既知の問題

ブリッジネットワークだとヌルポインターデリファレンスが発生して使えません。NATネットワークは問題なく使えています。

ヌルポインターデリファレンスはソースを少し追えば原因が判って直せるかも知れませんが、そこまで労力がないです。