Vagrant 2.2.4とvirtualbox 6.0.6の組み合わせでGuestAdditions seems to be installed (6.0.6) correctly, but not running.と言われてマウントに失敗したときのメモ

### 2019/6/30 追記

以下のバージョンの組み合わせでは解決していた。

* Virtualbox 6.0.8
* Vagrant 2.2.5
* vagrant-vbguest (0.18.0)

以下は表題のバージョンの時の記録。
もう不要だとは思うがそのまま残しておく。

## 現象

* 1回目の`vagrant up`ではうまくいく。
* 一度`vagrant halt`で閉じた後に、`vagrant up`すると/vagrant以下がマウントされない。以下のエラーが表示される。

```
bash: line 4: setup: command not found
==> default: Checking for guest additions in VM...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
 setup
Stdout from the command:
Stderr from the command:
bash: line 4: setup: command not found
```

### 先に結論

2回目以降のvagrant up時に、vbguestのrebuildに失敗しているようだった。
切ってやったらマウントされた。

```diff:Vagrantfile
  config.vm.provider "virtualbox" do |vm|
+    config.vbguest.auto_update = false
```

## 調査
### 環境

* Windows 10
* Vagrant 2.2.4
* Virtualbox 6.0.6r130049
* Ubuntu 18.04.2 LTS (Bionic Beaver)

### kernelの問題かどうか

kernelを更新したらうまくいった事例があるとのこと。
最終更新が2019/01の、bento/ubuntu-18.0.4を使っていたので、これはあるかもしれない。
10Gしか容量がないので64Gあるbentoのほうを使っていたけど、とりあえず更新してみる。

```diff:Vagrantfile
Vagrant.configure(2) do |config|
- config.vm.box = "bento/ubuntu-18.04"
+ config.vm.box = "ubuntu/bionic64"
```

念のため、provisionもすべて切って試す。
変わらず。

### vagrant-vbguestの確認

これはinstalledと言われているから問題ないはず、と思いつつも一度試す。

```
hibohiboo@ /d/develop/develop (master)
$vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.17.2)'!
```

* 1回目の、うまくいっている挙動のときは以下

```
$ vagrant vbguest --status
[default] GuestAdditions 6.0.6 running --- OK.
```


* 2回目の、失敗したときは以下

```
$ vagrant vbguest --status
[default] GuestAdditions seems to be installed (6.0.6) correctly, but not running.
```

まあ、そうだよね。。

### デバッグログを出す

環境変数を設定してやればよいとのことだったので、gitbashで以下を起動。

```
$env VAGRANT_LOG=debug vagrant up
```

#### ttyname failed
これが原因？と、以下のように書き換えた。エラーは消えたが、現象に影響なし。

```diff:/root/.profile
- mesg n || true
+ if `tty -s`; then
+   mesg n
+ fi
```

#### vagrant-vbguestをアンインストールしてみる。

エラーが出ている個所が、GuestAdditionsが `not running` で、vbguestが`rebuild`しようとして失敗している様子だった。

```
`block (2 levels) in guest_additions_state'
```

そこで、一旦vbguestを外してみることにする。

```
$vagrant plugin uninstall vagrant-vbguest
```

`vagrant reload`で。。。起動した！

#### 自動更新を無効にしてみる

アンインストールまでしなくとも、vagrantファイルに`config.vbguest.auto_update = false`を追記で、vagrant up時のアップデートを無効にできるようなので記述してみる。

```diff:Vagrantfile
  config.vm.provider "virtualbox" do |vm|
+    config.vbguest.auto_update = false
```

`vagrant reload`で確認。問題なし。

vagrant 2.2.5が来たら上記の部分削ってもいいかなぁ。

## おまけ
### 公式のubuntuの容量が少ないので増やす。

仮想マシンを立ち上げていない状態で作業する。

```
vagrant halt
vagrant plugin install vagrant-disksize
```

Vagrantfileに`config.disksize.size = '64GB'`の記述を追加

```diff:Vagrantfile
  config.vm.provider "virtualbox" do |vm|
    config.vbguest.auto_update = false
+    config.disksize.size = '64GB'
```

起動してみる。ログでも変更を確認。中に入って確認したけれどもきちんと増えていた。

```
vagrant up
vagrant ssh
df -h
```


## 参考

[vagrant upでエラー 「command failed! setup」](https://qiita.com/gun534/items/9fe8ebcedbe978cccc63)
[Vagrantで共有フォルダがマウントされない](https://qiita.com/uralogical/items/231ba43c593432a3b470)
[vagrant up時にGuestAdditionsがnot runningになる場合、ゲストマシンのkernelをupdateすることで解決できる可能性がある](https://qiita.com/k-shimoji/items/eb3efeff2356a7318cf9)
[Vagrantプラグインの使い方（vbguest, hostmanager, sahara, snapshot）](https://www.task-notes.com/entry/20150714/1436842800)
[Vagrant(VirtualBox)のUbuntuストレージ容量を拡張するには](http://denor.daa.jp/vagrantvirtualbox%E3%81%AEubuntu%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E5%AE%B9%E9%87%8F%E3%82%92%E6%8B%A1%E5%BC%B5%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF)
[UbuntuのDesktop環境にrootでログインする](http://itemy.net/?p=539)
[vagrant起動時にmountエラーが出る時の対処方法](http://wordpress.ideacompo.com/?p=4431)
[Vagrant 共有フォルダが同期できないときの対処法 ](https://blog.thingslabo.com/archives/vagrant-vboxsf-mount-failed.html)
[Vagrantのmountエラーを解決しようとしたらvboxのリビルドがこける](https://qiita.com/wakaba260/items/b5c87b7815b710f303a0?utm_content=buffer3ffe6&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer)