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ネットワークは問題なく使えています。
ヌルポインターデリファレンスはソースを少し追えば原因が判って直せるかも知れませんが、そこまで労力がないです。