VagrantでCentOS 7の仮想マシンを作成・操作する

# VagrantでCentOS 7の仮想マシンを作成・操作する

Vagrantは仮想VMを管理するツールです。
Vagrantを利用して、Oracle VM VirtualBoxでCentOS 7のゲストOSを作成・操作する方法を紹介します。

## 環境

- Windows 7
- [Oracle VM VirtualBox 5.1.30](http://www.oracle.com/technetwork/jp/server-storage/virtualbox/overview/index.html)
- [Vagrant 1.9.5](https://www.vagrantup.com)
- [TeraTerm](https://ja.osdn.net/projects/ttssh2/)
- プロキシ環境なし

## Vagrantプラグイン投入

次のプラグインを投入します。

- [teratermプラグイン](https://github.com/tiibun/vagrant-teraterm)
  - 自動的にTeraTermを起動し、ゲストOSにログインできる
- [vbguestプラグイン](https://github.com/dotless-de/vagrant-vbguest)
  - 仮想VMのカーネル更新時に自動的にGuest Additionsも更新してくれる
  - Guest Additionsの更新により、ホストOSとゲストOS間のファイル共有のマウントを維持できる

コマンドプロンプト上で、次のコマンドを実行します。

```
> vagrant plugin install vagrant-teraterm
> vagrant plugin install vagrant-vbguest
```

## Vagrantfile作成

仮想VMを1つ作ります。
コマンドプロンプト上で次のコマンドを実行し、ディレクトリやVagrantfileを作成します。
なお、ホストOSとゲストOS間の共有ディレクトリとして、commonディレクトリも作成します。

```
> mkdir \Vagrant
> cd Vagrant
> mkdir CentOS7-001
> cd CentOS7-001   ←\Vagrant\CentOS7-001へ移動
> vagrant init     ←Vagrantfile作成
> mkdir common     ←共有ディレクトリ作成
> cp Vagrantfile Vagrantfile_bak ←Vagrantfileのバックアップを作成
```

## Vagrantfile編集

「[Vagrantfile](https://www.vagrantup.com/docs/vagrantfile/)」を参考にして、Vagrantfileを次の内容に変更します。

```rb
Vagrant.configure("2") do |config|

  config.vm.box = "centos/7"
  config.vm.synced_folder "./common", "/vagrant", type: "virtualbox"

  config.vm.box_check_update = false
  config.vm.network "private_network", ip: "192.168.1.12"
  config.vm.provision "shell", path: "../install_docker.sh"

  config.vm.provider "virtualbox" do |vb|
    vb.name = "CentOS7-001"
    vb.memory = "1024"
    # vb.gui = true
  end

  if Vagrant.has_plugin?("vagrant-vbguest")
    config.vbguest.auto_update = true
  end

  if Vagrant.has_plugin?("vagrant-teraterm")
    config.teraterm.exe_path = 'D:\tool\net\TeraTerm\ttermpro.exe'
    config.teraterm.ini_path = "../TERATERM.INI"
    config.teraterm.log_path = "teraterm.log"
    config.teraterm.extra_args = "/ssh-v"
  end

end
```

- config.vm.box
  - ベースとなるVagrant環境を指定
  - Vagrant環境は次の方法で調べられる
    1. [HashiCorp > Vagrant](https://www.vagrantup.com) > [FIND BOXES]
    1. 「CentOS」で検索すると「centos/7」が出てくるので、それをクリック
- config.vm.synced_folder
  - ホストOSとゲストOSで共有するディレクトリを指定
- config.vm.box_check_update
  - ゲストOS起動時に、config.vm.boxで指定したboxに変更があった場合に自動的に反映させるかどうかを指定
- config.vm.network "private_network"
  - ゲストOSのIPアドレスを指定
- config.vm.provision "shell", path: "../install_docker.sh"
  - 「vagrant up」や「vagrant reload」コマンドで「--provision」オプションを指定すると、ここで指定したスクリプトが実行される
  - これによりソフトウェア更新や投入などの処理を自動化できる
- config.vm.provider
  - ゲストOSの名前やメモリ容量等を指定
  - [参考](https://www.vagrantup.com/docs/providers/configuration.html)
- 以降はプラグインの設定（設定方法は各プラグインのトリセツを参考）
  - [teratermプラグイン](https://github.com/tiibun/vagrant-teraterm)投入
  - [vbguestプラグイン](https://github.com/dotless-de/vagrant-vbguest)投入

## シェルスクリプト作成

先ほどVagrantfileのconfig.vm.provisionで指定したシェルスクリプトを作成します。

```shell-session:\Vagrant\install_docker.sh
sudo yum -y update kernel
sudo yum -y install kernel-devel kernel-headers dkms gcc gcc-c++
sudo yum remove docker docker-common docker-selinux docker-engine
sudo yum -y update
sudo yum -y install git
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum -y install docker-ce
sudo systemctl start docker
sudo systemctl enable docker.service
ls /usr/lib/systemd/system | grep docker
systemctl status docker.service
```

このシェルスクリプトでは、次の処理を行います。

- kernel更新
- 既存ソフトウェアを一括更新
- Gitクライアント投入
- Docker投入

## TERATERM.INI作成

Vagrantfileのconfig.teraterm.ini_pathで指定したTERATERM.INIを作成します。
ttermpro.exeのディレクトリにTERATERM.INIがあるはずですので、
それを「D:\Vagrant」ディレクトリにコピーします。

## ゲストOS起動

「vagrant up」コマンドでゲストOSを起動します。
また、起動後に「config.vm.provision」で指定したスクリプトを実行させるよう「--provision」オプションを付けます。
なお、最初の起動の場合、ベースのVagrant環境の取得に時間を要します。

```
> vagrant up --provision
```

以上で、CentOS 7のゲストOSが作成され、自動的にgitクライアントやDockerが投入されます。
正しくセットアップできたかどうかを、Oracle VM Virtual Boxを起動して確認することもできます。

## ゲストOS操作

先述のとおり、teratermプラグインを投入してあるので、
「vagrant teraterm」コマンドを実行すれば、
自動的にTeraTermが起動されゲストOSにログイン（ユーザーはvagrant）してくれます。

```
> vagrant teraterm
```

## ホストOSとゲストOS間でのファイル共有

ホストOS（Windows）上で/Vagrant/CentOS7-001/commonにファイルを作成すれば、
ゲストOS（CentOS）の/vagrantディレクトリから参照できます。

## その他のvagrantコマンド

- ゲストOS停止
  - vagrant halt
- ゲストOS再起動
  - vagrant reload

「vagrant --help」で他のコマンドを調べられます。