Help us understand the problem. What is going on with this article?

【macOSアップデート】vagrant upできない時に一通り試すと良いかもしれない方法

はじめに

久しぶりに仮想環境を立ち上げようと思ったのですが、昔は実行できた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の再起動を実行します。

SystemPreference.jpg

再起動後、改めてvagrant upを実行します。

==> default: Booting VM…

を越えて

==> default: Machine booted and ready!

が出れば、仮想マシンの起動が無事にできたことになります!お疲れ様でした。
おそらくですが、以前のOSのバージョンでVirtualBoxをインストールした際、OracleのソフトウェアにmacOSのカーネルを使用する許可を出してVirtualBoxが起動できていたところ、OSアップデートによりその許可がなくなってしまったため、再度許可を出す必要があったのかな、と思います。

おわりに

今回はmacOS アップデート後vagrant upができなくなった際の対応方法をご紹介しました。
巷で言われているVirtualBoxとVagrantのアップデートだけではエラーが解決しなかったので焦りましたが、なんとかすぐ解決して良かったです。またkmutilというコマンドは初めて見たので勉強になりました。

この記事がどなたかの参考になれば幸いです。また、何か間違いなどございましたら、そっと教えてください…!

お読みいただき、ありがとうございました!

参考にさせていただいたサイト

akane_kato
2年目アプリエンジニアさんです。Java勉強中。
is-tech
大手優良企業特化型システム内製支援事業。ご連絡は https://www.is-tech.co.jp/ の問い合わせフォームをご利用ください。
https://www.is-tech.co.jp/recruit/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away