Vagrantで作成するVMのスペック等の設定(cpu/memory/storageほか)

[Vagrantを使ったVirtualBoxへのVM構築 - Qiita](https://qiita.com/zaki-lknr/items/5a8f49123a26ba4af671)

ここで書いていた内容の「残件」
特に指定なしでVagrantを使ってVMを作ると、vCPU:1/memory:512MB/Storage:10GBでVMが作成されるが、開発・検証用とで不足の場合は、各パラメタは`Vagrantfile`でも設定できる。

環境

- ホストOS: Windows 10 Home (x64)
- ハイパーバイザ: VirtualBox 5.2.26
- Vagrant: v2.2.4

# CPUとMemory

ここでは[VirtualBoxの場合](https://www.vagrantup.com/docs/virtualbox/configuration.html)。
それ以外のHypervisorの場合は、ドキュメント参照

VirtualBoxプロバイダの設定で指定できるので、セットで指定するのが良い。
(ちなみにCPU数は`cpu`(`s`つけ忘れ)と数か月見間違え続けて指定方法がずっとわからなかった…)

以下の設定で、2CPU・RAM2048GBでVMができる。
作成済みVMの場合は`vagrant reload`で設定を変更可能。

```ruby:Vagrantfile
  config.vm.provider "virtualbox" do |vb|
    vb.cpus = 2
    vb.memory = 2048
  end
```

# Storage

実はストレージはデフォルトでは指定できないため、Vagrantのプラグインを追加する必要がある。

参考: [Vagratfileに一行書くだけでVMのディスク容量を増やす方法 - Qiita](https://qiita.com/yut_h1979/items/c84c490053877beee5c1)

## プラグインの確認

```
C:\Users\zaki\src\vagrant\sample>vagrant plugin list
No plugins installed.

```

リストに表示されなければインストールが必要

## vagrant-disksizeプラグインのインストール

```
C:\Users\zaki\src\vagrant\sample>vagrant plugin install vagrant-disksize
Installing the 'vagrant-disksize' plugin. This can take a few minutes...
Fetching: vagrant-disksize-0.1.3.gem (100%)
Installed the plugin 'vagrant-disksize (0.1.3)'!

C:\Users\zaki\src\vagrant\sample>vagrant plugin list
vagrant-disksize (0.1.3, global)

C:\Users\zaki\src\vagrant\sample>
```

## Vagrantfileの指定

デフォルト10GBのストレージは、以下の設定で任意のサイズでVMが作成される。

```ruby:Vagrantfile
Vagrant.configure("2") do |config|
  # ...

  config.disksize.size = '40GB'

  # ...
```

### CentOS 7.6

```
[vagrant@centos-dev01 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        40G  3.3G   37G   9% /
devtmpfs        912M     0  912M   0% /dev
tmpfs           920M     0  920M   0% /dev/shm
tmpfs           920M   17M  903M   2% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
tmpfs           184M     0  184M   0% /run/user/1000
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/c1299d64-adce-a52c-61d6-cc5eebe91d62.png)

CentOSはメインのディスクが指定サイズのものとなる。

### Ubuntu 18.04

```
vagrant@ubuntu-dev01:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            985M     0  985M   0% /dev
tmpfs           200M  624K  199M   1% /run
/dev/sda1        39G  1.4G   38G   4% /
tmpfs           997M     0  997M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           997M     0  997M   0% /sys/fs/cgroup
vagrant         476G  242G  235G  51% /vagrant
tmpfs           200M     0  200M   0% /run/user/1000
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/bc3b2436-6a4c-9708-20a7-fb52bfb893d5.png)

Ubuntuだと、指定サイズのディスクが「追加」された。(この辺の仕組みはよくわからないが)
ちなみに作成直後だと10GBのままの表示になっている場合があるが、表示をリフレッシュすればちゃんと表示される。

# 共有フォルダ

[こっち](https://qiita.com/zaki-lknr/items/cdf4eac2d2f2020ac7be#ansibleのplaybookなどをホストosから簡単に編集するための共有フォルダ設定)にも書いているけど再掲。

## Vagrantfile

設定だけなら以下の通り

```ruby:Vagrantfile
Vagrant.configure("2") do |config|

  # [...]

  config.vm.synced_folder "~/src", "/share", mount_options: ['dmode=755', 'fmode=644']
```

この設定で、「ホストOSの`~/src`(Windowsであれば`%USERPROFILE%/src`)」が、「ゲストOSの`/share`」にマウントされ、モード設定はディレクトリは755ファイルは644となる。

## プラグイン

ストレージと同様にプラグインを入れる必要がある(かもしれない)。

```
zaki@mascarpone% vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.18.0)'!
zaki@mascarpone% vagrant plugin list
vagrant-disksize (0.1.3, global)
vagrant-vbguest (0.18.0, global)
```

# VMの名前

いくつかは[こっち](https://qiita.com/zaki-lknr/items/5a8f49123a26ba4af671#vmの設定vagrantfile)にも書いてるけど再掲

## ゲストOS上のhostname

ゲストOS上で

```
[vagrant@centos-dev01 ~]$ hostname
centos-dev01.localhost
```

という状態にするには、Vagrantfileを以下のように記述する

```ruby:Vagrantfile
Vagrant.configure("2") do |config|

  config.vm.hostname = "centos-dev01.localhost"
```

https://www.vagrantup.com/docs/vagrantfile/machine_settings.html#config-vm-hostname

## VirtualBoxマネージャ上のマシン名

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/1f91b7ff-cf75-5a4f-4517-db07959f4164.png)

この部分の名前を指定するには、Vagrantfileを以下のように記述する

```ruby:Vagrantfile
Vagrant.configure("2") do |config|

  # ...

  config.vm.provider "virtualbox" do |vb|
    vb.name = "ubuntu-dev01"
```

https://www.vagrantup.com/docs/virtualbox/configuration.html#virtual-machine-name

## VMの説明

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256859/a6e91b9e-e597-b149-aa6b-8187701e65b6.png)

この部分のテキストを設定するためのVagrantfileの設定項目はないが、任意の引数を指定することができる`customize`を使用し、VirtualBoxの[Chapter 8. VBoxManage / 8.8. VBoxManage modifyvm / 8.8.1. General Settings](https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm-general)の`--description <desc>`を使用すれば設定できる。
(VMの数が10や20くらいになってくると)マシンの説明や固定IPアドレスを指定しておくと便利。

```ruby:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.provider "virtualbox" do |vb|
    vb.customize ["modifyvm", :id, '--description', 'develop for ubuntu (52)']
```

ちなみに、Vagrant 2.2.4 / VirtualBox 5.2.26の環境では、日本語は文字化けして使えなかった。

# ネットワーク

## ホストオンリーアダプタの追加

[こちらにも書いてるけど再掲](https://qiita.com/zaki-lknr/items/5a8f49123a26ba4af671#ipアドレス)

デフォルトだとNAT用のインタフェースのみで、ホストOSと自由な疎通はできない。
[ホストOS間との経路を作成するには、追加でホストオンリーアダプタのNICを追加すれば良い](https://qiita.com/zaki-lknr/items/a762051d5d26627be068)

追加するには以下の通り。(static ipaddress設定で、192.168.244.51の場合)

```ruby:Vagrantfile
Vagrant.configure("2") do |config|

  config.vm.network "private_network", ip: "192.168.244.51"
```

[Private Networks - Networking - Vagrant by HashiCorp](https://www.vagrantup.com/docs/networking/private_network.html)

# その他

何かあれば追記…予定…

- VM作成時にファイルをホストOSからput/copyする
- 固定のssh秘密鍵設定

などは、[Ansible検証環境に特化したVagrantを使ったVM構築 - 複数VM・VM間ssh公開鍵認証設定・共有フォルダ](https://qiita.com/zaki-lknr/items/cdf4eac2d2f2020ac7be)にも記載

# 全部入りsanple Vagrantfile

```ruby:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"

  config.vm.network "private_network", ip: "192.168.244.51"
  config.vm.hostname = "centos-dev01.localhost"
  config.disksize.size = '40GB'

  config.vm.synced_folder "~/src", "/share", mount_options: ['dmode=755', 'fmode=644']

  config.vm.provider "virtualbox" do |vb|
    vb.name = "centos-dev01"

    vb.cpus = 2
    vb.memory = 2048
    vb.customize ["modifyvm", :id, '--description', 'develop for centos (51)']
  end
end
```

Ubuntuも(boxの指定以外は)同じです。