macOSでVirtualBoxがインストールできない時の対処法

macOSでVirtualBoxがインストールできない時の対処法

ここ最近プロジェクトではほぼDockerを使うようになり、Vagrantはあまり使わなくなりました。それに伴い、VirtualBoxの使用頻度も3〜4年くらい前に比べると格段と減った気がします。

そんなある日、とあるプロジェクトでVagrantが必要になったので、それに併せて古くなっていたVirtualBoxをアップグレードしようとしたら、macOSのセキュリティ機能により一筋縄では行かなかったので対処法を共有します。(アイキャッチ参照)

例によって、解決策だけみたい人は: その後対処法を発見

前提

手元の環境: macOS Mojave Version 10.14.5

さて、今回、最初にインストールしようとしたのはバージョン6.0.8でした。元のバージョンは5.2.14とかだったと思います。
これが失敗した為、5.2.28も試してみましたが、同様のエラーが出てしまった為、解決策を調べる事に。

よくやるアプリの承認はできず・・・

いつからだかにmacOSに搭載されたGatekeeperと言うセキュリティ機能による物だとは予想していましたが、少し調べた感じ、実際に大抵の記事でそれについて触れていました:

いずれの場合も、 “System Preferences -> Security & Privacy -> General” の画面に表示されている「System software from developer “Oracle America, Inc.” was blocked from loading.」と、その横の “Allow” ボタンを押す事で解決となっており、同じ様な手順を他のアプリケーションのインストール時に踏んだ方も多いかと思います。
(僕の場合だとKarabiner-Elementsのインストールの時にやったと思います)

しかし、今回はそもそもAllowボタンを含め、承認の為の文言自体が表示されておらず、できませんでした。
後者の記事では、その場合の対処法として sudo spctl —master-disable を実行する事でGatekeeperの制限を弱め(詳細は記事参照)、無理やりインストールすると言う内容でしたが、僕の環境ではそれでもインストール出来ませんでした。

その後対処法を発見

Twitterで検索した所、あるStackOverflowを見つけ、まさにこれで解決する事ができました。

Install Virtualbox 6 on Mac 10.14 Mojave failed with kernel install error

内容としては、 spctl kext-consent コマンドでOracleのDevelopper IDを直接承認すると言う物です。
OracleのIDは VB5E2TV963 なので、実行するコマンドは

$ spctl kext-consent add VB5E2TV963

と言う事になります。ただし、このコマンドはRecovery modeでmacOSを起動している時しか実行できないので、OSをShutdownした後 Command (⌘) + R を押したまま起動してRecovery modeに入り、UtilitiesからTerminalを起動して実行する必要があります。

一旦追加した後は、以下のコマンドで確認が可能です:

$ sudo spctl kext-consent list
Allowed Team Identifiers:
VB5E2TV963

確認ができたらOSをRestartしましょう。

その後、VirtualBoxをインストールすると無事に成功しました。

ちなみに、OracleのDeveloper IDはVirtualBoxのインストーラーから確認可能です:

右上の「鍵」アイコンから確認可能

終わりに

spctl kext-consent add コマンドですが、Usageを見ると「無条件(ユーザーの承認無しに)にkextをロードする事を許可する」そうなので、可能であればインストール後に削除したほうが良いかもしれません。(その場合もRecovery modeに入る必要があります)

we are hiring

優秀な技術者と一緒に、好きな場所で働きませんか

株式会社もばらぶでは、優秀で意欲に溢れる方を常に求めています。働く場所は自由、働く時間も柔軟に選択可能です。

現在、以下の職種を募集中です。ご興味のある方は、リンク先をご参照下さい。