vagrant up 失敗の原因究明

  • 投稿日:
  • by
  • カテゴリ:

vagrant upがなぜか失敗するのでその原因究明をしたときの話です。

事象

PS E:\vagrant> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'hashicorp/precise64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'hashicorp/precise64'
    default: URL: https://vagrantcloud.com/hashicorp/precise64
==> default: Adding box 'hashicorp/precise64' (v1.1.0) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box
    default: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
    default:
==> default: Successfully added box 'hashicorp/precise64' (v1.1.0) for 'virtualbox'!
==> default: Importing base box 'hashicorp/precise64'...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["import", "\\\\?\\E:\\vagrant_home\\.vagrant.d\\boxes\\hashicorp-VAGRANTSLASH-precise64\\1.1.0\\virtualbox\\box.ovf", "--vsys", "0", "--vmname", "precise64_1571241203898_82313", "--vsys", "0", "--unit", "12", "--disk", "D:/VMimages/precise64_1571241203898_82313/box-disk1.vmdk"]

Stderr: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Interpreting \\?\E:\vagrant_home\.vagrant.d\boxes\hashicorp-VAGRANTSLASH-precise64\1.1.0\virtualbox\box.ovf...
OK.
0%...
Progress state: E_INVALIDARG
VBoxManage.exe: error: Appliance import failed
VBoxManage.exe: error: Code E_INVALIDARG (0x80070057) - One or more arguments are invalid (extended info not available)
VBoxManage.exe: error: Context: "enum RTEXITCODE __cdecl handleImportAppliance(struct HandlerArg *)" at line 957 of file VBoxManageAppliance.cpp
PS E:\vagrant>

先に原因を書きますが、上記のように引数が悪いと言われますが、実際はディスクの空き容量が不足しているのが原因でした。

環境

Host: Windows 10 Guest: (何でも)

Vagrant: 2.2.5、2.2.6 Virtual Box: 6.0.12、6.0.14

原因究明

エラーメッセージでググってみると以下のissueに該当しているのを発見!

Invalid arguments to vboxmanage (potentially malformed path) #10832

ところが、未解決のままcloseしていました。 一日寝かしてみましたがやっぱり解決しないので新規オープンしようと思って 報告ルールに従って情報を集めていたらデバッグログの出し方があったのでこれを見てみました。 すると、VBoxManage.exeが失敗していたのだとわかりました。 VBoxManage.exeはvagrantではなく、Virtual Boxのコマンドです。

そこで、VBoxManage.exeの実行方法を調べて同じ引数で実行してみます。すると、再現します。

vagrantの呼び出し方が悪いのか、VBoxManage.exeが悪いかを切り分けます。 VBoxManage.exeの引数をいろいろと変えて試してみました。 すると、diskのファイル名(.vmdk)の指定を変えると成功する場合がありました。 指定の仕方によるのかも思いいくつかのパターンを試しましたが結論としては、ディスクの空き容量が足りていないと失敗することがわかりました。

つまり指定するドライブの問題です。ドライブを指定しているのは誰かというとVirtual Boxです。 Virtual Boxの「デフォルトの仮想マシンフォルダー」が使われています。 というわけで、この設定を変えることで解決できます。

問題の報告でも苦戦

Vagrantのissueに挙がっていたので同じ問題で悩む人もいるのだろうということで、関係各所に報告することにしました。 Virtual Boxのメッセージが分かりにくいのが良くないと思うのでメッセージの改善依頼を出してみることにしました。

Virtual BoxのForumがあるのでとりあえずそこで報告しようと思ってPosting Guidを見てみると、ユーザ登録が必要となっています。 registerのリンクをクリックするとNot Foundとなって登録できません。 loginのリンクは生きていたのでそちらを見てみるとOracleのログイン画面です。 アカウントを作成して無事にログインしてどう伝えるのが良いか考えてみましたが、モデレータへDMを送る機能があるようなのでそこに送ろうとしました。 しかし、URL入りのメッセージを送るにはユーザ作成後5日と5ポストの実績が必要だそうです。そんなにポストする予定はないので普通のTopicとしてポストすることにします。

Suggestionsという分類があるのでそちらでポストしようとしたら、今度はURL入りのポストはユーザ作成後1日と1ポストの実績が必要だそうです。 URL入りを送るのは難しそうなのでじゃあ、もうURL入れずに送ろうと思って送ろうと思ったら、ユーザ作成後1日経たないとURL無くてもポストできないそうです。 本題のメッセージの改善についても同じ理由でポストできませんでした。

もう疲れちゃいましたが、明日こそポストしてみます。