VMware Player をインストールして使用する場合に、 `Create a New Virtual Machine' から guest OS の iso イメージを読み込み起動しようとしたとき、 modconfig がモジュールを更新しようとするときがある。その際に vmmon のコンパイルのところで止まってしまい実行出来なかった。
止まってしまう原因はいくつかあって、まず、 vmmon, vmnet のソースコードの一部が最近のカーネルと不整合を起こしているためコンパイル時にエラーとなることと、 script の実行時にもエラーが出ること、そして、コンパイルして作成されるカーネルモジュール vmmon.ko, vmnet.ko に署名がされていないため起動に失敗することだ。
まず、カーネルコードとの不整合については、 Michal Kubeček 氏の GitHub に修正版のソース一式を挙げてくださっているので、そちらを使用させていただく。
sudo /etc/init.d/vmware stop
としてサービスを停止しておいてから、氏の GitHub の INSTALL に記述されている通り、
wget https://github.com/mkubecek/vmware-host-modules/archive/player-14.1.1.tar.gz
tar -xzf player-14.1.1.tar.gz
cd vmware-host-modules-player-14.1.1
make
make install
としてやれば vmmon.ko, vmnet.ko の修正版がインストールされる。( 14.1.1 のところは使用する VMwarePlayer のバージョンに置き換える。ただし、氏の GitHub に修正版が上がっていることが前提。)
これで vmmon, vmnet のコンパイル時のエラーは解消される。
このとき、 make したとき、
./scripts/***: *** 行: printf: 0x十六進数ダンプ:: 無効な十六進数です
といったエラーも出るが、これは LANG=C make とすることで解消できる。
この後、 make install した後そのまま、
sudo /etc/init.d/vmware start
とした場合、
Starting VMware services:
Virtual machine monitor failed
Virtual machine communication interface done
VM communication interface socket family done
Blocking file system done
Virtual ethernet failed
VMware Authentication Daemon done
のように2つのモジュールの起動に失敗するが、これは UEFI の validation 機能が有効になっている場合に更新したカーネルモジュールに署名がされていないためなので、
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /*/*.ko
のようにして vmmon.ko, vmnet.ko に署名してやると起動できるようになる。 MOK.priv, MOK.der は事前に作成しキーを登録しておかなければいけない。
VMware が自動的にモジュールを更新しようとしたとき、この署名の操作をしないため、 UEFI の validation が有効になっていると更新に失敗するはずだ。( VMware はなぜこの問題に対応しないのだろう? )
キーワード: VMware Player modconfig