nknskn ネタ置き場

IT使ってなんかやってる人間のたわごと

Macbookの移行でVMware Fusionの仮想マシンが動かなくなった話

新しいMacbook Proが届いたのでテンション高めに移行して、アプリの起動確認をしていたときに遭遇. Fusionは起動するもののVM起動時に以下のようなメッセージのダイアログが出て起動中止に陥る.

cannot open /dev/vmmon. (snip) make sure load ... (snip)

ざっと調べてみたところ, kextのload時にエラーが起きていた. 調査方法はこのブログを参考にした. ありがたや

blog link : Vmware Kext | @sskaje

以下調査時のコマンドログ(一部抜粋)

% sudo /Applications/VMware\ Fusion.app/Contents/Library/services/services.sh --start
Installing files from /Library/Preferences/VMware Fusion/thnuclnt
mkdir: /etc/thnuclnt: File exists
Copying .thnumod to /etc/thnuclnt
Copying thnuclnt.conf to /etc/thnuclnt
Copying thnuclnt.convs to /private/etc/cups
Copying thnuclnt.types to /private/etc/cups
Copying thnucups to /usr/libexec/cups/filter
Restarting printing services
No matching processes were found
/Applications/VMware Fusion.app/Contents/Library/kexts/vmmon.kext failed to load - System policy prevents loading the kernel extension.

System policy preventsらしい. このへんで調べてみたらKarabinerのissueで似たようなのがあった. 止めているのはmacOSのSecure Kernel Extension Loadingって機能で, 手っ取り早い解決方法は

  • System Preferences > Security & Privacy > Privacy > Accessbility でVMware Fusionにチェック
  • System Preferences > Security & Privacy > General で VMware Inc. を Allow

することらしい. 私の場合は「チェック入れてる」「Allowボタン出てこんぞ」という, もうちょいめんどい状況だった. というわけで別の解決方法探しの旅に出る.

さて, どうやって探したもんか, というところで以下の 2 点を考えた.

  • 上記のカーネル拡張ファイルのロードエラーは, 許可された開発者 or アプリのものでないextを読み込もうとしたから発生している
  • Allow ボタンで開発者 or アプリの識別子をどっかのplistに除外対象として登録している(はず)

というわけでマニュアルで解決するなら「(開発者 or アプリの)識別子登録ボタンに対応するコマンドを打ち込む」もしくは「Kernel拡張の読み込み許可リストに識別子を直接書き込む」なので, 適当にmac kernel extension approvalとかそんな感じの英語でググった. 結果, MITのknowledge baseがヒットした

Troubleshootingのところを試してみる

  • Startup the Mac in recovery mode.
  • Click the Utilities menu and select Terminal.
  • Enter the following command:
    • /usr/sbin/spctl kext-consent add TEAMID
    • Press Enter
    • e.g. for Sophos the command would be: /usr/sbin/spctl kext-consent add 2H5GFH3774
  • Close the Terminal app and restart

今回はVMwareなのでもうちょっと下にあるVMwareのTeam ID(EG7KH642X6)を打ち込んだ. ここは鵜呑みにするんじゃなくて念のためVMware Fusionのplistを確認しとけばよかったと思った(小並感).

Recovery modeで上記のコマンドを入力後, VMware Fusionを再起動して無事解決.

f:id:news-nknskn:20200601023602p:plain

この件で2時間近くも使ってしまった. 移行でハマるとほんとしんどい.