VagrantでCentOS7.3を動作させる(固定IPを振れない場合の対応も追記)


##  準備

**事前にダウンロードしてインストールする**
[Vagrant](https://www.vagrantup.com/downloads.html) 1.9.1
[VirtualBox](http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp) 5.1.12-1 

### インストールと起動

```
Vagrantのバージョンを確認
$ vagrant --version 
homeに移動
$ cd ~
ディレクトリの作成
$ mkdir centos7
中に移動
$ cd centos7/
初期化 今回入れたのはコチラ https://atlas.hashicorp.com/centos/boxes/7
$ vagrant init centos/7
立ち上げる
$ vagrant up --provider virtualbox
sshで接続 もし、パスワードを聞かれた場合はvagrant
$ vagrant ssh
centosのバージョン確認
$ cat /etc/redhat-release
-> CentOS Linux release 7.3.1611 (Core)
```

## 試しにWebページを表示してみる


Apacheの設定

```
Apacheをインストール
$ sudo yum -y install httpd
起動
$ sudo systemctl start httpd.service
自動起動設定
$ sudo systemctl enable httpd.service
ローカルなのでファイアーウォールを切る
$ sudo systemctl stop firewalld
ファイアーウォールのステータスを確認(inactive状態を確認すること)
$ sudo systemctl status firewalld
ファイアーウォールを切るの自動起動設定
$ sudo systemctl disable firewalld
```

htmlファイルの作成

```
htmlのディレクトリに移動
$ cd /var/www/html/
index.htmlを作成 何か適当に記述しておく -> <h1>Hello World</h1>
$ sudo vi index.html
```

Vagrantファイルのネットワーク設定をする

```
一回サーバーを終了
$ exit
Vagrantfileを編集
$ sudo vi Vagrantfile
privateネットワークのコメントアウトを外す 
config.vm.network "private_network", ip: "192.168.33.10"
エディターを抜けて
$ vagrant reload
```

### 以上でブラウザから接続！！

![スクリーンショット 2017-01-10 午後3.19.09.png](https://qiita-image-store.s3.amazonaws.com/0/33553/7a16acca-fbc3-d506-07ae-97f75a6509ea.png "スクリーンショット 2017-01-10 午後3.19.09.png")


### 接続できない場合の対応(僕のもう片方のMacで構築するとなぜか接続できず) ↓↓↓

まずSELinuxを確認
`$ getenforce`
-> Disabled

Disabledなので問題なし、次は`$ systemctl status httpd`でApatchのステータスを確認

```
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2017-01-01 14:26:53 UTC; 23min ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1040 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─1040 /usr/sbin/httpd -DFOREGROUND
           ├─1113 /usr/sbin/httpd -DFOREGROUND
           ├─1114 /usr/sbin/httpd -DFOREGROUND
           ├─1115 /usr/sbin/httpd -DFOREGROUND
           ├─1117 /usr/sbin/httpd -DFOREGROUND
           └─1118 /usr/sbin/httpd -DFOREGROUND
```

`Active: active (running)`になっているのでOK!
次は外部から通信できているかを確認するためにPingコマンドを使う
`$ ping 192.168.33.10`

```
Request timeout for icmp_seq 167
Request timeout for icmp_seq 168
Request timeout for icmp_seq 169
Request timeout for icmp_seq 170
Request timeout for icmp_seq 171
```

ナルホド...通信できていないようなので、
そもそも`192.168.33.10`が適切に設定されているのかをipコマンドで確認する
`$ ip addr`

```
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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:22:5b:53 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 86234sec preferred_lft 86234sec
    inet6 fe80::5054:ff:fe22:5b53/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 08:00:27:23:38:7d brd ff:ff:ff:ff:ff:ff
```

そもそも`eth1`に`"192.168.33.10"`が設定されていないことがわかる。
僕は詳しくないネットワーク設定を色々といじった後に戻せなくなると嫌だったので、
[ココ](http://qiita.com/undrthemt/items/61eb4daa37d10063f97c)を参考にShell Scriptで解決することにした。
VagrantFileと同じ階層に`bootstrap.sh`を作成
`centos7` に`ifconfig`が入っていないのでサーバー側で `$ yum install net-tools`を入れる

``` bootstrap.sh
#固定ip設定
ifconfig eth1 192.168.33.10 netmask 255.255.255.0 up
``` 

VagrantFileを修正

``` VagrantFile
config.vm.network "private_network", ip: "192.168.33.10"
# 外部からアクセスできない場合
config.vm.provision :shell, :path => "bootstrap.sh"
```

`$ vagrant halt`で一回停止して、`$ vagrant up --provision`で起動し直す
`--provision`のオプションを付けないとShellScriptが実行されないので注意

外部から`$ ping 192.168.33.10`で通信できていることを確認

```
64 bytes from 192.168.33.10: icmp_seq=2242 ttl=64 time=0.256 ms
64 bytes from 192.168.33.10: icmp_seq=2243 ttl=64 time=0.287 ms
64 bytes from 192.168.33.10: icmp_seq=2244 ttl=64 time=0.393 ms
64 bytes from 192.168.33.10: icmp_seq=2245 ttl=64 time=0.356 ms
64 bytes from 192.168.33.10: icmp_seq=2246 ttl=64 time=0.403 ms
```

`$ ip addr`でeth1に`192.168.33.10`が設定されていることを確認

```
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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:22:5b:53 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic eth0
       valid_lft 84730sec preferred_lft 84730sec
    inet6 fe80::5054:ff:fe22:5b53/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:23:38:7d brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe23:387d/64 scope link
       valid_lft forever preferred_lft forever
```


ブラウザから接続
![スクリーンショット 2017-01-10 午後3.19.09.png](https://qiita-image-store.s3.amazonaws.com/0/33553/7a16acca-fbc3-d506-07ae-97f75a6509ea.png "スクリーンショット 2017-01-10 午後3.19.09.png")



これでやっと固定IPが設定され、ブラウザからの接続確認ができた
今回はネットワークの設定をあまりいじりしたくなかったので、ShellScriptを実行して解決しました。
起動する時に`$ vagrant up --provision`とオプションを毎回付けなければいけないが。。。
一旦ネットワーク設定をいじることなく解決。