はじめに
久しぶりに仮想環境を立ち上げようと思ったのですが、昔は実行できたvagrant up
ができなくなっていました!
me@MacBook ~ % cd ~/vagrant/ubuntu64
me@MacBook~ % vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.
Command: ["startvm", "{仮想マシン名}", "--type", "headless"]
Stderr: VBoxManage: error: The virtual machine 'ubuntu64_default_{仮想マシン名}' has terminated unexpectedly during startup with exit code 1 (0x1)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component MachineWrap, interface IMachine
また何もしてないのに壊した…と思っていたのですが、どうやらOSをBig Surにアップデートしたことが原因のようでした。
試した方法をいろいろ書きますが、最終的にVirtualBoxのカーネルエクステンションのロードで解決したので、OSアップデートして同じ現象に悩まれている方やVirtualBoxの最新化を既に試行済みの方はそちらをご参照ください。
使用環境とバージョン
- macOS Big Sur(11.0.1)
- iTerm2 3.4.1
- Homebrew 2.5.11
- VirtualBox 6.1.16 r140961 (Qt5.6.3)(アップデート後)
- Vagrant 2.2.13(アップデート後)
仮想マシンを削除する
まず、今まで使っていた仮想マシン(Ubuntu)を削除しました。
仮想マシンの再インストールだけで問題が解決する場合もあるので、全部消す前に一度試すと良いと思います。OSアップデート起因ではない場合、有効かもしれません。
もっとも自分の環境では、これで解決はできませんでしたが。。。
①仮想マシンをインストールしたディレクトリを削除(自分の場合~/vagrant/ubuntu64
)
②先程消したディレクトリを再作成し、そのディレクトリに移動
mkdir -p ~/vagrant/ubuntu64
cd ~/vagrant/ubuntu64
③ubuntuの再インストール
vagrant box add ubuntu/bionic64
④Vagrant を実行し、仮想マシンの設定ファイル(Vagrantfile)を作成
vagrant init ubuntu/bionic64
⑤Vagrantを起動
vagrant up
これで立ち上がれば万々歳ですが、自分の場合はまた==> default: Booting VM....
の部分で同じエラーが発生したため、後続の方法を試しました。
VirtualBoxとVagrantを最新版にアップデートする
今までのmacOSアップデートの記事を見て、最新版のインストールをしたら解決した例がありました。それに倣い、現在のバージョンを一度アンインストールし、最新版をインストールし直しました。(これも解決せずでしたが、試す価値はあると思います)
①Homebrewでvirtualboxとvagrantのアンインストール
brew cask uninstall virtualbox
brew cask uninstall vagrant
②(ここで一応ubuntuも削除)
③再インストール
brew cask install virtualbox
brew cask install vagrant
④(ubuntu再インストール)
再度vagrant up
をしましたが、自分の場合またBooting VM…
が越えられず…絶望…
VirtualBoxのカーネルエクステンションをロードし、Oracleのソフトウェアの実行許可を出す
これが最終解決方法です。
VirtualBox, Vagrant, 仮想マシンのインストールが終わったら、以下のコマンドを実行します。kmutilという、Appleのカーネル拡張で使用するツールを使用し、macOSにVirtualBoxのカーネルエクステンションをロードするコマンドです。
sudo kmutil load -b org.virtualbox.kext.VBoxDrv
しかし実行すると、おそらく以下のメッセージが表示されると思います。
Extension with identifiers org.virtualbox.kext.VBoxNetAdp,org.virtualbox.kext.VBoxNetFlt,org.virtualbox.kext.VBoxDrv,org.virtualbox.kext.VBoxUSB not approved to load. Please approve using System Preferences.
このメッセージが表示されたら、システム環境設定 > セキュリティとプライバシーの下部にOracleのソフトウェア読み込みがブロックされた旨が出ているはずです。
右の「許可」ボタンを押し、PCの再起動を実行します。
再起動後、改めてvagrant upを実行します。
==> default: Booting VM…
を越えて
==> default: Machine booted and ready!
が出れば、仮想マシンの起動が無事にできたことになります!お疲れ様でした。
おそらくですが、以前のOSのバージョンでVirtualBoxをインストールした際、OracleのソフトウェアにmacOSのカーネルを使用する許可を出してVirtualBoxが起動できていたところ、OSアップデートによりその許可がなくなってしまったため、再度許可を出す必要があったのかな、と思います。
おわりに
今回はmacOS アップデート後vagrant upができなくなった際の対応方法をご紹介しました。
巷で言われているVirtualBoxとVagrantのアップデートだけではエラーが解決しなかったので焦りましたが、なんとかすぐ解決して良かったです。またkmutilというコマンドは初めて見たので勉強になりました。
この記事がどなたかの参考になれば幸いです。また、何か間違いなどございましたら、そっと教えてください…!
お読みいただき、ありがとうございました!