ローカル(Windows)に VirtualBox + Vagrant で CentOS 7 を起動させる


# 概要
今まで、VirtualBoxで手動起動させていたVMをVagrantを使って起動できるようにとした時のvagrantについて備忘録を残します。

本稿は、
VirtualBox&Vagrantのインストール → 公開されているboxをlistに登録 → 登録したboxからVM起動
の流れで書いています。
また、VirtualBox,Vagrantのローカルへのインストールについてはインストーラが公式からダウンロードできますので簡単に書いています。
(boxのカスタマイズと既存VMのbox化、Vagrantfile内の設定項目について は別途 投稿できればいいなと思っています。)

# インストール
## ローカル環境
- Windows 8.1 64bit

## VirtualBox
以下のリンクからインストーラをダウンロードする。
[リンク](http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp)

- インストーラ

> VirtualBox-5.0.20-106931-Win.exe

任意の場所にインストールし、VirtualBox を起動できることを確認。

## Vagrant
以下のリンクからインストーラをダウンロードする。
[リンク](https://www.vagrantup.com/downloads.html)

- インストーラ

> vagrant_1.8.5.msi

こちらも任意の場所にインストールします。
コマンドプロンプト や PowerShell で以下を実行し、バージョンが表示されることを確認。

```text:コマンドプロンプト
vagrant -v
```

表示されない場合は、Pathが通っていないことが考えられますので、
"システムの詳細設定" から "Vagrantをインストールした配下のbin" に環境変数を通してください。

# boxのダウンロードとlistへの登録
現段階ではまだVMを起動できません。VMのイメージファイルの集まった"box"が必要になります。
今回は、Vagrantのサイトで配布されているboxイメージを使って作成していきます。
(boxのカスタマイズについては別途投稿できればと思っています。)

以下 コマンドプロンプト もしくは PowerShell で実行します。

```text:コマンドプロンプト
vagrant box add centos/7
```

実行すると、メタデータをここからロードするから、providerを選んで！ と、出力されます。
ここは "2) VirtualBox" を選んでください。

```text:コマンドプロンプト(出力例)
1)  libvirt
2) virtualbox
3) vmware_fusion
4) vmware_workstation

Enter your choice:
```

providerを選ぶと、**"boxファイルのダウンロード"**と**"boxのlistへの登録"**が実行されます。
**successfully**が表示されていれば登録が正常に完了しています。
boxのlistを以下で確認してください。

```text:コマンドプロンプト
vagrant box list
```

```text:コマンドプロンプト(出力例)
centos/7     (virtualbox, xxxx.xx)
```

さあ、起動まであと少しです！！

# Vagrantfileの作成
## ここで作成するもの
- Vagrantfile：起動するVMの定義ファイル
- .vagrantフォルダ：起動するVMの情報が格納されるフォルダ

* * *

では、作っていきましょう。
**Vagrantfile**とはvagrantで起動するVMの定義ファイルです。任意のフォルダに移動して、登録したboxを"init"します。

```text:コマンドプロンプト
vagrant init centos/7
```

initすることでフォルダ内に**Vagrantfile**が作成されていますので確認してください。
出力はVagrantfileをこのフォルダに置いたよ！ファイルのコメントだけでなく[vagrantup.com](https://www.vagrantup.com/docs/vagrantfile/)も読んでね！と書いてあります。
今回はVagrantfileの変更は行わずそのまま起動させてみます。
(Vagrantfileの中については別途 投稿できればと思っています。)

# VMの起動
Vagrantfileがあるフォルダに移動して以下を実行しVMを起動させます。
初回実行時に**.vagrantフォルダ**を作成し、VMの情報を配置します。

```text:コマンドプロンプト
vagrant up
```

> ※`vagrant up`時に様々なエラーが出ることが予想されますので、都度 対処は必要になります。
> 以下 よく起きそうなエラーの対処法を記述します。
> 
> rsyncのエラーが出る場合：
> ダウンロードしたboxのVagrantfileの設定が悪さをしている可能性があります。
> そのため、起動するVMのVagrantfileで設定を上書きしてあげます。
> ダウンロードしたboxのVagrantfileはユーザホームの vagrant.d\boxes 内にダウンロードされていますので、syncしているフォルダを確認してください。

```text:Vagrantfile
config.vm.synced_folder ".", "syncしているフォルダ", disabled: true
```

> sshの認証でエラーが出る場合：
> vagrantユーザの "公開鍵を格納する .ssh ディレクトリ" or "公開鍵" のパーミッションが間違っています。
> VBoxでVMを起動します。ログイン画面から、vagrantユーザのパスワード認証でログインしパーミッションを変更してあげることで、vagrantで起動できるはずです。

出力された項目を見てみると、なんとなくわかると思いますが、
**vagrant というユーザで 127.0.0.1(host)の2222ポートにssh接続しています。**
(2222が埋まっている場合は2200などに変わります)
**接続はVM(guest)の22ポートへPortForwardingされたあと、VMの各種設定をこなしています。**

これで、VMの起動ができたので あとは、TeraTerm や poderosa などのクライアントでssh接続できれば問題なしです。

# VMへのssh接続
## 接続情報
- 接続先：localhost
- ポート：2222
- ユーザ：vagrant
- パスワード：vagrant(デフォルトパスワード)

* * *

# VMの停止
停止は以下で出来ます。

```text:コマンドプロンプト
vagrant halt
```

(出力に`graceful shutdown`と出力されています。~~優雅にシャットダウンをしてくれる...~~
パワーオフではなくゲストOS側で `shutdown -h now` してくれているのだろう、多分...)