Vagrantについてハマりにハマりまくったメモ

## 本稿について
VagrantとVirtualBoxについてハマりにハマりまくったので
調べてわかったことを書き連ねます。

## 参考になりそうな方
* VagrantとVirtualBox使っていて同じくハマった方
* 新入社員の方などで、新しい開発環境をboxで渡されて自PC上に構築する必要のある方

## 環境
ホストPC: Win10 Pro 64bit
VirtualBox: バージョン 6.1.12
Vagrant: 2.2.10

※なお、今回は事前に利用するbox環境を配布してもらっている状態を前提とします。

## Vagrant経由でVirtualBoxにつなげる手順
下記の記事を特に参考にさせていただきました。
https://qiita.com/isotai/items/c83640b0a2194db49b3e
http://vdeep.net/vagrant-package

1. `vagrant box add 任意のボックス名 package.boxへのパス`<br>
で、package.boxを登録する <br> 
例：vagrant box add My_BOX ./package.box
2. `vagrant box list` で登録したBoxを一覧表示で確認
3. `vagrant init 登録したBox名` で初期化する。<br>
例：vagrant init My_BOX<br>
Vagrantfileが生成されることを確認。 <br>
5. `vagrant up`で起動
6. `vagrant ssh`で接続

上記の一連の流れで、vagrant経由でのbox環境の構築が完了します。


## 2回目以降接続時にエラーが出てしまった。。。原因と対処
上記の対応で１度はVagrant経由でVirtualBOX上の環境にアクセスすることができたのですが、
その後2回目以降接続下記の様な、ネットワークエラーが起きてしまいました。

```title:コマンド実行結果
>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'bento/centos-6.8' is up to date...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...

    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key

Timed out while waiting for the machine to boot. This means that
Vagrant was unable to communicate with the guest machine within
the configured ("config.vm.boot_timeout" value) time period.

If you look above, you should be able to see the error(s) that
Vagrant had when attempting to connect to the machine. These errors
are usually good hints as to what may be wrong.

If you're using a custom box, make sure that networking is properly
working and you're able to connect to the machine. It is a common
problem that networking isn't setup properly in these boxes.

Verify that authentication configurations are also setup properly,
as well.

If the box appears to be booting properly,you may want to increase
the timeout ("config.vm.boot_timeout") value.
```

vagrant側の問題か切り分けるためにVirtualBoxで直接起動をかけたところ同様のエラーが出てしまったため、
VirtualBox側の問題と判断しました。
ちなみにVirtualBox上では下記のようなエラー表示が出ていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540634/557cc1ab-cb8d-d6db-1c97-b032a7c4c9d9.png)



調べる内にこちらの記事を参考にさせていただき解決しました。
https://qiita.com/ExA_DEV/items/ae80a7d767144c2e1992

### やったこと１つめ
1. コントロールパネル　→　ネットワークと共有センター　→　アダプターの設定の変更
2. `VirtualBox Host-Only Network #N` のプロパティを開く
3. `VirtualBox NDIS6 Bridged Networking Driver` にチェックを入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540634/adf0e87b-4ad4-112e-0203-4593f25f20c7.png)
4. `インターネットプロトコル バージョン6(TCP/IPv6)` のチェックを外し、<br>
[OK] を押し、プロパティウィンドウを閉じる<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540634/a0077a25-89b4-3ace-0d78-f15be2a498ec.png)
5. `VirtualBox Host-Only Network #N` の右クリックメニューで「無効」にする
再度、「有効」にし直す



### やったこと２つめ
1. VirtualBoxのGUI画面から`設定`→`ネットワーク`を開く。
2. 対象のアダプターの`ポートフォワーディング`を押して`ポートフォワーディングルール`を開く。
3. ポートフォワーディングルールの接続時のポートを削除

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540634/69aa3503-a8ed-5d10-c264-d823848cffd8.png)

こちらでうまくつなげることできましたが、２つ目の対処法は根本的な解決になっていない
（ルール削除するだけで繋げられるって単に別でポート使ってるだけなんじゃ・・・）と思うので、
後からなにかわかったことがあれば追記したいと思います。


## 環境も用意できたので帰ろうとShutdownしたその時
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540634/79f0596a-06a2-543c-6a0d-f598ae865a42.png)

・・・ひえっ

VirtualBox Interface　がシャットダウンを妨げることがあります。
実際これはどうやって消したらいいの？と思いますが、こちらの２記事を参考にさせていただきました。
https://www.nahema.net/virtualbox-diturb-shutdown
https://itojisan.xyz/trouble/19045

タスクマネージャーから消すやり方などもおすすめに載っておりますが、
裏でVirtualBoxを利用するエミュレータアプリなどを完全に終了したりするのが先ですので、
こちらをしてもうまくいかない場合の止むを得ずの対応　くらいに思っておく方がよいかと。


## おまけ１　Vagrant経由でアクセスする際の接続情報を取得する。
```
>vagrant ssh-config
Host default
  HostName 127.0.0.1
  User hogehoge
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile C:/Users/hogehoge/.vagrant.d/boxes/hogehoge/0/virtualbox/vagrant_private_key
  IdentitiesOnly yes
  LogLevel FATAL
```
`vagrant ssh-config`を実行することで、Vagrant経由でアクセスする際の接続情報を取得することができます。
こちら参考にすればTeraTermやVSCodeなどのでのssh設定しておいてbox環境へのssh接続する際もとてもやりやすいです。


## おまけ２　最終手段としてVagrantもVirtualBoxも消し去りたい
端末のOSの容量など、いろいろな事情でVirtualBox削除することなどもあるかもしれません。

### VirtualBox削除
VirtualBox削除するときはレジストリファイル消したり、Driversのファイル消したりと苦労します。あとめっちゃ怖いです。。
https://ts0818.hatenablog.com/entry/2020/03/07/224428

加えて、あまり他のブログなどに書かれてない印象なのですがWindows環境だと`VirtualBox Host-Only Ethernet Adapter`がVirtualBoxインストールの都度自動で出来上がるので、こちらもアンインストール時に削除しておかないと、再インストールなどした際にまた自動で作られて管理が煩雑になると思います。
下記ご参考ください
https://www.it-swarm.dev/ja/vagrant/windows-10%E3%81%A7vagrant%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E4%BD%99%E5%88%86%E3%81%AA%E3%83%9B%E3%82%B9%E3%83%88%E3%81%AE%E3%81%BF%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/1054176396/ 


※↓のように、私の端末では２つも邪魔なネットワーク設定作成されてしまっています。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540634/9acc2fcd-b200-c4dd-0177-a6168e59b431.png)


### Vagrant削除
Vagrantの公式サイトを見るとコンパネからアンインストールするだけでOK、再度利用する場合も気にせずインストールしてくださいと書いてあります。またいつでもインストールしてね。<br>
https://www.vagrantup.com/docs/installation/uninstallation

![スクリーンショット 2020-08-30 18.51.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540634/36974512-740a-9d2c-dd1c-b8ef2850017a.png)

ただ、いきなりアンインストールしてももともとvagrant up等して作成していた設定は消えないので、
先にvagrant destroyしてから
アンインストールすることおすすめします。



```
>vagrant halt
>vagrant destroy
```

## 参考にさせていただいた記事まとめ
https://muoilog.xyz/web-development/vagrant%E3%81%8Cssh-auth-method-private-key%E3%81%A7%E6%AD%A2%E3%81%BE%E3%82%8B%E5%95%8F%E9%A1%8C/
https://qiita.com/ExA_DEV/items/ae80a7d767144c2e1992
https://gyagya1111.blogspot.com/2015/05/vagrantvirtualbox.html
https://qiita.com/centipede/items/8891a8f033fe2ac788b9
https://ts0818.hatenablog.com/entry/2020/03/07/224428