Vagrant+Virtualbox使い方メモ

Markdownに慣れないaraiです。Atomでプレビュー出しっぱはタブーなんでしょうか。重い。。。
Mac-PCにて、Vagrant Virtualboxのインストール、仮想サーバ起動方法、スナップショットの管理方法を纏めたメモです。
# 事前準備: VirtualBox、Vagrantのインストール
以下リンクより、VirtualBox、Vagrantをそれぞれインストールする。
- [VirtualBox](https://www.virtualbox.org/)
- [Vagrant](https://www.vagrantup.com/)

Vagrantのバージョンが表示されること。

```
$ vagrant -v
Vagrant 1.7.4
```
# 方法その① hashicorpの純正品?で、インストール

#### ▼設定ファイル作成
```
$ mkdir test_centos
$ cd test_centos

$ vim Vagrantfile
```
Vagrantfileの中身

```Vagrant:Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "bento/centos-6.7"  #← ※1 https://atlas.hashicorp.com/bento/より名前を確認した。
  config.vm.network "private_network", ip: "192.168.33.11"  #← ※2 任意のローカルIPを指定。
end
```
 ※1 config.vm.boxに入れる名前は、[hashicorp](https://atlas.hashicorp.com/) で確認すること。
 ※2 任意のローカルIPを指定。
#### ▼実行　(サーバ立ち上げ)	数分かかる。
`$ vagrant up`

#### ▼SSHログインする vagrantユーザーでログインされる
`$ vagrant ssh`
#### ▼スイッチ
サーバへログイン後、以下でrootユーザーになれる。
`$ sudo su -`

```
[vagrant@localhost ~]$ id
uid=500(vagrant) gid=500(vagrant) 所属グループ=500(vagrant) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
```
---------------------------------------

# 方法その② Boxをダウンロードして、立てる	(こちらで純正品以外でもインストールが可能。)
#### ▼Boxをダウンロードして、立てる
以下からURLを取得する
- http://www.vagrantbox.es/
 または
- https://github.com/chef/bento

#### ▼Boxを追加する
コマンド例：
``vagrant box add {title} {url}``
titleは任意名、urlは各サイトよりURLを確認する

---------------------------------------
以下からURLを取得する
http://www.vagrantbox.es/

入れるbox:
CentOS 7.0 x64 (Minimal, VirtualBox Guest Additions 4.3.28, Puppet 3.8.1

ダウンロード等があるので、数分かかる。
`vagrant box add centos7test https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box`

または、

---------------------------------------
以下からURLを取得する
https://github.com/chef/bento

入れるbox:
centos-6.7 x86_64
ダウンロード等があるので、数分かかる
`vagrant box add centos67test http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.7_chef-provisionerless.box`

---------------------------------------

#### ▼box一覧表示　boxが追加されたことを確認できる
```
$ vagrant box list
centos67test      (virtualbox, 0)
```
実際の追加されたboxファイルは `~/.vagrant.d/boxes/` 配下に追加される

#### ▼box削除方法
例：
`$ vagrant box remove centos67test`

## Vagrantfile作成
#### ▼初期化 (Vagrantfileが作成される)
`$ vagrant init {title}`
例：
`$ vagrant init centos67test`
titleを指定しないと、雛形のVagrantfileが作成される。

#### ▼Vagrantfileの中身を確認 (コメントアウト改行を除外して表示)
`$ grep -v "^#" Vagrantfile | grep -v "^  #" | grep -v "^$"`
以下しか設定されていない
```
Vagrant.configure(2) do |config|
  config.vm.box = "centos67test"
end
```

#### ▼IPの設定
Vagrantfileを確認するとコメントアウトで、以下の記述がある。
`  # config.vm.network "private_network", ip: "192.168.33.10"`

コメントアウトを解除し、任意のIPを設定する。

`$ vim Vagrantfile`

```Vagrant:Vagrantfile
:
   config.vm.network "private_network", ip: "192.168.33.44"
  												↑任意のIPを設定する
:
```

## 仮想サーバ起動
`$ vagrant up`

▼仮想マシンの保存場所は以下にある。
`~/VirtualBox VMs/`

▼httpで接続する場合、以下でアクセスできる。
http://192.168.33.44
# その他Vagrantコマンド

▼仮想サーバ 停止
`vagrant halt`

▼仮想サーバ削除
`vagrant destroy`

▼Vagrantfileの雛形の作成コマンド
`vagrant init`

デフォルトのVagrantfileが作成される。

▼仮想サーバ再起動
`vagrant reload`
(vagrant halt　して、　vagrant upしたのと同じ。)

▼プロビジョニング。サーバ起動後に実行される処理を指定できる。chefやansibleなどを実行させる。当然、Shellも実行できる。
`vagrant provision`

Vagrantfileに以下のように記述しておけば、vagrant upしたとき、または、vagrant provisionを実行することでbox内で実行することができる。

```
:
config.vm.provision :shell, :path => "./provision-script/start-setting.sh",:privileged   => true
																			※ ↑privileged => true はrootユーザーとして実行するためのオプション。
:
```
仮想サーバ側では、以下に保存される。
`/vagrant/provision-script/start-setting.sh`

start-setting.shの内容

```shell:start-setting.sh
#!/bin/bash

echo "TEST" > ~/test.txt

exit 0
```
※ rootユーザーで実行されるので、`test.txt`は`/root/test.txt` に作成されるので注意。

# Vagrantのスナップショットがとれるようにする
#### プラグイン`vagrant-vbox-snapshot`のインストール

```
$ vagrant plugin install vagrant-vbox-snapshot
Installing the 'vagrant-vbox-snapshot' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbox-snapshot (0.0.9)'!
```
以下コマンドを投げ、以下のように表示されれば、インストールOK

```
$ vagrant snapshot
Usage: vagrant snapshot <command> [<args>]

Available subcommands:
     back
     delete
     go
     list
     take

For help on any individual command run `vagrant snapshot <command> -h`
```
---------------------------------------

# スナップショット操作方法
※ 以下操作はVagrantfileがあるディレクトリ内で、実行すること！

#### ▼スナップショット作成
`$ vagrant snapshot take 任意のスナップショット名`
例:

```
$ vagrant snapshot take initial-test
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Snapshot taken. UUID: fbae8bda-f678-4bc2-b339-40abc444db28
```
---------------------------------------
#### ▼スナップショット一覧確認
`$ vagrant snapshot list`
例:

```
$ vagrant snapshot list
Listing snapshots for 'default':
   Name: initial-test (UUID: fbae8bda-f678-4bc2-b339-40abc444db28) *
```
---------------------------------------
#### ▼最新のスナップショットから復元させる
`$ vagrant snapshot back`
※ 自動で仮想サーバは再起動されます。
例:

```
$ vagrant snapshot back
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Restoring snapshot fbae8bda-f678-4bc2-b339-40abc444db28
Starting restored VM
==> default: Checking if box 'bento/centos-6.7' 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:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
```
---------------------------------------
#### ▼任意のスナップショットから復元させる
`$ vagrant snapshot go 任意のスナップショット名`
※ 自動で仮想サーバは再起動されます。
例:

```
$ vagrant snapshot go initial-test
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Restoring snapshot fbae8bda-f678-4bc2-b339-40abc444db28
Starting restored VM
==> default: Checking if box 'bento/centos-6.7' 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:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
```
---------------------------------------
#### ▼スナップショット削除
`$ vagrant snapshot delete 任意のスナップショット名`
例:

```
$ vagrant snapshot delete initial-test
0%...
10%...
20%...
30%...
40%...
50%...
60%...
70%...
80%...
90%...
100%
```