Vagrant+ansibleでLAMP環境構築（１）

Codeception を実案件で個人的に導入していますが、もっと汎用的に色々試すことができる環境が欲しくなり、折角環境を作るなら、Vagrant＋ansible で、と思ったので手順をメモする

今回は、Vagrant のセットアップまで。

## 今回のトピックス

* CentOS7 では `ifconfig` が使えない！
* Vagrant が 古い(1.7.2とか)だと CentOS7 で IPアドレスが付与されない  
（CentOS7 でも、ifconfig 等の net-tools をインストールしていれば古くても問題ないっぽいけど試していない）

## 動作環境
* OS：Mac OS X El Capitan
* Vagrant, ansible はインストール済み

## 構築したい環境
* OS：CentOS7(Vagrant)
* DB：MySQL5.7
* Web：Apache+PHP7

## Vagrantセットアップ

利用する box は[centos/7](https://atlas.hashicorp.com/centos/boxes/7)

まずは、`vagrant init centos/7` して Vagrantfile を作成し、適宜修正する
Vagrantfile のサンプルは以下

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

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

  ## ポート番号の設定
  config.vm.network :"forwarded_port", guest: 80, host: 8888
  config.vm.network :"forwarded_port", guest: 22, host: 2023

  ## プライペートネットワークの IP アドレスを指定する
  config.vm.network :"private_network", ip: "10.0.0.5"

  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  config.vm.provider "virtualbox" do |vb|
    ## VirtualBoxで表示する名前
    vb.name = "DevServer1"
    ## メモリ
    vb.memory = "1024"
    ## ホストと時間を同期させる設定
    vb.customize ["setextradata", :id, 
        "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled", 0]  
  end
end
```

`vagrant up` でゲストを起動し、`vagrant ssh` で SSH 接続してみる
正常にログインできると、以下のようになる

```sh
$ vagrant up
## 省略 ##
$ vagrant ssh
Last login: Thu Mar  3 01:59:52 2016 from 10.0.2.2
[vagrant@localhost ~]$ 
```

ただ、ゲストは、上の Vagrantfile で 10.0.0.5 に設定しているはずなのに、
ホストからゲストへの ping がタイムアウトになってしまう。。。

```sh
$ ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
--- 10.0.0.5 ping statistics ---
```

とりあえず、再度 ssh でログインし、`ifconfig` してみるが、コマンドがないと怒られる。。。

```sh
[vagrant@localhost ~]$ ifconfig
-bash: ifconfig: コマンドが見つかりません
```

調べたら、CentOS7 では `ifconfig` ではなく、`ip a` とかするらしいので、そちらを実行すると、localhost とホストオンリー用の NIC しか表示されず、Vagrantfile の設定が反映されていない

```sh
[vagrant@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:7c:4f:9a brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 75142sec preferred_lft 75142sec
    inet6 fe80::5054:ff:fe7c:4f9a/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:c1:b8:ff brd ff:ff:ff:ff:ff:ff
```

今まで CentOS6 系ではここでつまづくことなかったので、7 系でコマンドが変わったことが問題か・・・？と思い、Vagrant のバージョンを確認すると、結構古かったので、最新化してみる

```sh
$ vagrant version
Installed Version: 1.7.2
Latest Version: 1.8.1
 
To upgrade to the latest version, visit the downloads page and
download and install the latest version of Vagrant from the URL
below:

  http://www.vagrantup.com/downloads.html

If you're curious what changed in the latest release, view the
CHANGELOG below:

  https://github.com/mitchellh/vagrant/blob/v1.8.1/CHANGELOG.md
```

念のため、一度 `vagrant destroy` でイメージ削除してから `vagrant up` で起動

```sh
$ vagrant up
## 省略 ##
$ vagrant ssh
[vagrant@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:7c:4f:9a brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 85775sec preferred_lft 85775sec
    inet6 fe80::5054:ff:fe7c:4f9a/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:fa:25:ed brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.5/24 brd 10.0.0.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fefa:25ed/64 scope link 
       valid_lft forever preferred_lft forever
```

今度はきちんと IP アドレスが設定されており、ホストからの ping も通ったので、Vagrant はこれでOK