Windows で VirtualBox + Vagrant を触ってみる

# 動機
勉強でときどきVagrantというキーワードが出てきて、何のことだろうと気になった

# 想定する読み手
Windowsを使っていて、Vagrantを全く知らず、とりあえず触りだけでも…という人

※途中の操作に試行錯誤があるので先に一通り眺めていただけると助かります

# Vagrant とは
公式

https://www.vagrantup.com/。

VMwareとかVirtualBoxによる仮想環境の構築をコマンドラインベースで簡単にできるっぽい。
コマンドラインベースということは仮想環境の構築を自動化できる。

Dockerとの違いは、仮想環境の大元がホスト型サーバ仮想化かコンテナ型か。

ホスト型サーバ仮想化とかコンテナ型ってなんじゃいって人は以下のサイトが参考になりそうなのでどうぞ。

https://zenn.dev/aoaoaoaoaoaoaoi/articles/14ddd081ccd222

# 教材を探す

https://dev.classmethod.jp/articles/vagrant/

# WindowsでVirtualBoxと合わせて構築してみる

VagrantとVirtualBoxをWebから探して最新版をダウンロードする。

インストールできたのでコマンド入力してバージョン確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117440/ffb25e75-6750-0c48-c4a2-408021245201.png)

Vagrantでは.boxという拡張子のファイルを使う？
以下のようなコマンドを使うとWebからダウンロードできるらしい。
vagrant box add centos https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box

が、途中で処理が止まってうまくいかなかったので[Vagrant Cloud](https://app.vagrantup.com/ubuntu/boxes/trusty64)からダウンロードした。
なんとなくCentOSよりUbuntuが好きなのでUbuntuにしてみた。

ファイルサイズみたら、438MBある。
処理止まってたんじゃなくて、ただダウンロード時間長かっただけっぽい。

ローカルのファイルを指定する時は.boxファイルをパス指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117440/bb9e5466-307e-d08a-95bd-2acdc1cdc963.png)

うまくいったらしい。vagrant box listコマンドで確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117440/8d1a16c0-074b-bc06-2386-42aa1b560d4f.png)

できている。
vagrant init ubuntu と入力して、Vagrantfile をつくる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3117440/96c895ae-3284-0a3a-25f5-82f3beb1f9c8.png)

まっさらなフォルダを指定して入力しているにも関わらず、なぜか「もうVagrantfileはこのディレクトリにあるよ」的なエラーが出る謎に包まれる。
ただちゃんとVagrantfileができている。


vagrant up を入力してみる。エラーが出た
※Qiita にコード書く機能があることに気づいたので以下コード貼り付けます
```
C:\Users\asrk0\Desktop\vagrant\ubuntu-test1>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: ubuntu-test1_default_1675074204631_82452
==> default: Clearing any previously set forwarded ports...
Vagrant is currently configured to create VirtualBox synced folders with
the `SharedFoldersEnableSymlinksCreate` option enabled. If the Vagrant
guest is not trusted, you may want to disable this option. For more
information on this option, please refer to the VirtualBox manual:

  https://www.virtualbox.org/manual/ch04.html#sharedfolders

This option can be disabled globally with an environment variable:

  VAGRANT_DISABLE_VBOXSYMLINKCREATE=1

or on a per folder basis within the Vagrantfile:

  config.vm.synced_folder '/host/path', '/guest/path', SharedFoldersEnableSymlinksCreate: false
==> 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: 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
    default: Warning: Connection reset. Retrying...
    default: Warning: Connection aborted. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.40
    default: VirtualBox Version: 7.0
==> default: Mounting shared folders...
    default: /vagrant => C:/Users/asrk0/Desktop/vagrant/ubuntu-test1
```
Share Folder errors　の文面が見える…

The guest additions on this VM do not match the installed version of default: VirtualBox!
と怒られている。

Guest Additionsって何だ？以下のサイトが参考になった。ホストOSとゲストOSの間の操作を色々取り持ってくれる便利機能らしい。

https://www.linuxmania.jp/virtualbox_02.html#:~:text=%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-,Guest%20Additions%E3%81%A8%E3%81%AF,%E3%81%A8%E3%81%97%E3%81%A6%E6%8F%90%E4%BE%9B%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

ゲストOSのVirtualBox Guest Additionsバージョンは7.0。
box(Guest)にあるバージョンは4.3.40。

どうやらBoxが参照するVirtualBoxのバージョンが4.3.40なので実際にインストールされているVirtualBoxのバージョンも合わせないといけないらしい。
面倒じゃない？って思ったら、 vagrant-vbguest プラグイン というものがあるらしい。
これをインストールしておくと、Vagrantを起動したりリロードした際 GuestAdditions に更新があれば自動的にゲストOSのGuestAdditionを更新してくれるらしい？

インストール方法と解説についてもう１つ参考になりそうなサイトがあった。

https://weblabo.oscasierra.net/vagrant-vbguest-plugin-1/




```
C:\Users\asrk0\Desktop\vagrant\ubuntu-test1>vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching micromachine-3.0.0.gem
Fetching vagrant-vbguest-0.31.0.gem
Installed the plugin 'vagrant-vbguest (0.31.0)'!
```
インストールできた。
これで再度 vagrant upを試す。

```
C:\Users\asrk0\Desktop\vagrant\ubuntu-test1>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
```

あれ？もうゲストOSは起動できているっぽい。

```
==> default: Machine booted and ready!
```
ログを見返したら、起動はしていた。
起動はできたけど、フォルダ共有に失敗したということだろうか。
とりあえず今回の目的は動かすこと優先なので先に進む。

Vagrant ssh で接続する。
```

C:\Users\asrk0\Desktop\vagrant\ubuntu-test1>vagrant ssh
Welcome to Ubuntu 14.04.6 LTS (GNU/Linux 3.13.0-170-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Mon Jan 30 10:24:10 UTC 2023

  System load:  0.89              Processes:           81
  Usage of /:   3.6% of 39.34GB   Users logged in:     0
  Memory usage: 24%               IP address for eth0: 10.0.2.15
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

UA Infrastructure Extended Security Maintenance (ESM) is not enabled.

0 updates can be installed immediately.
0 of these updates are security updates.

Enable UA Infrastructure ESM to receive 64 additional security updates.
See https://ubuntu.com/advantage or run: sudo ua status

New release '16.04.7 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


vagrant@vagrant-ubuntu-trusty-64:~$
```
無事SSHで接続できた。
lsコマンド動くか確認する。

```
vagrant@vagrant-ubuntu-trusty-64:~$ ls -la
total 28
drwxr-xr-x 4 vagrant vagrant 4096 Jan 30 10:24 .
drwxr-xr-x 4 root    root    4096 Jan 30 10:23 ..
-rw-r--r-- 1 vagrant vagrant  220 Apr  9  2014 .bash_logout
-rw-r--r-- 1 vagrant vagrant 3637 Apr  9  2014 .bashrc
drwx------ 2 vagrant vagrant 4096 Jan 30 10:24 .cache
-rw-r--r-- 1 vagrant vagrant  675 Apr  9  2014 .profile
drwx------ 2 vagrant vagrant 4096 Jan 30 10:24 .ssh
vagrant@vagrant-ubuntu-trusty-64:~$ cd /
vagrant@vagrant-ubuntu-trusty-64:/$ ls
bin   home            lib64       opt   sbin  usr      vmlinuz.old
boot  initrd.img      lost+found  proc  srv   vagrant
dev   initrd.img.old  media       root  sys   var
etc   lib             mnt         run   tmp   vmlinuz
```

できた。

# 終わりに

途中、vagrant up のコマンドにあったshare folderのエラーが心残り。

「え？これだと別にVitrualBoxでGUIで操作して起動した方が楽じゃない？」って気もするけど、
ただコマンドラインで仮想環境を構築するだけじゃなくて、Vagrantfileを編集することで
Vagrantを実行しているホストOSとフォルダ共有できたりとか便利機能が色々あるらしい。

もう少し使い方のイメージを広げるのに以下のサイトが参考になりました。

https://y-hosoya.github.io/vagrant-introduction/intro/vagrant/

どんなものか触りはわかったので、また機会を改めて深掘りしたい。