VagrantでCentOS7のBOXを作成する（Mac）

## 概要
CentOS7のBOXについては、既にVagrantCloudなどで多数配信されています。
しかし、何がインストールされているかわからないなど気になったので自作してみました。
その際の作業内容をメモとして残します。

## 事前準備
次の準備が完了して作業を開始しましょう。

- [VirtualBox](https://www.virtualbox.org/) のインストール
- [Vagrant](https://www.vagrantup.com/) のインストール
- CentsOS7([CentOS-7-x86_64-Minimal-1６11.iso](http://isoredirect.centos.org/centos/7/isos/x86_64/))をダウンロード

## 仮想マシンの作成
VirtualBoxで仮想マシンを作成します。

#### 「仮想マシン」->「新規」を選択
下記の内容を入力して、「作成」ボタンを押す。
![vm-01.png](https://qiita-image-store.s3.amazonaws.com/0/142279/24efa5da-e8d9-a680-a9f7-2c55ebbb6d3c.png)

- 名前　　　　　：vagrant-centos-7
- タイプ　　　　：Linux
- バージョン　　：Red Hat (64-bit)
- メモリーサイズ：1024MB
- ハードディスク：仮想ハードディスクを作成する

さらに、下記の内容を入力して、「作成」ボタンを押す。
![vm-02.png](https://qiita-image-store.s3.amazonaws.com/0/142279/dd3d161a-b1ca-9a5c-7f06-78c3387fbb1c.png)

- ファイルの場所　　　　　　　　　　：vagrant-centos-7
- ファイルサイズ　　　　　　　　　　：40.00GB
- ハードディスクのファイルタイプ　　：VDI (VirtualBox Disk Image)
- 物理ハードディスクにあるストレージ：可変サイズ

## 仮想マシンの設定
仮想マシンvagrant-centos7を右クリックし設定をクリックし、下記設定を行う。
![vm-03.png](https://qiita-image-store.s3.amazonaws.com/0/142279/d80c0c51-e9e1-a7fa-44d4-bf1173724597.png)

### 起動順序の設定
システムタブを開き、起動順序にあるフロッピーのチェックを外す。
![vm-04.png](https://qiita-image-store.s3.amazonaws.com/0/142279/bb0f2539-7e29-1344-452d-06e84b8f7d2d.png)

### ストレージ設定
ストレージタブを開き、コントローラー: IDEでダウンロード済みの「CentOS-7-x86_64-Minimal-1６11.iso」を選択する。
![vm-05.png](https://qiita-image-store.s3.amazonaws.com/0/142279/39098ec9-b10d-e308-608f-bb81355d7490.png)

### オーディオ設定
オーディオタブを開き、オーディオを有効化のチェックを外す。
![vm-06.png](https://qiita-image-store.s3.amazonaws.com/0/142279/30c4478b-8e56-8198-4ac3-e216dc54729a.png)

### ポート設定
ポートタブを開き、続いてUSBタブを開いて、USBコントローラーを有効化のチェックを外す。
![vm-07.png](https://qiita-image-store.s3.amazonaws.com/0/142279/1625e5a5-8639-6267-9284-99ce6842a78f.png)

### ネットワーク設定
ネットワークタブを開き、アダプター1にある高度をクリックし、ポートフォワーディングをクリック。
![vm-08.png](https://qiita-image-store.s3.amazonaws.com/0/142279/823a11a3-5ea8-e7ef-429e-5d9f0ce0be69.png)

右にある「+」をクリックして、sshの設定を追加する。
![vm-09.png](https://qiita-image-store.s3.amazonaws.com/0/142279/8a872c41-69aa-2c7d-a396-0e79de9f5ed6.png)

以上で設定は終了です。
「OK」ボタンをクリックして、設定画面を閉じる。

## CentOS7のインストール
### 仮想マシンを起動
仮想マシンvagrant-centos7を右クリックし起動->通常起動をクリックする。
![vm-10.png](https://qiita-image-store.s3.amazonaws.com/0/142279/6992e9ab-e5a7-dc42-1a23-5d9e0ecd75e5.png)

### ブート選択
「Install CentOS Linux 7」を選択する。
![vm-11.png](https://qiita-image-store.s3.amazonaws.com/0/142279/9270e27a-5352-2748-fadc-2f7c27cfde8e.png)

### 言語の選択
「japanese」と入力して、絞り込み、日本語を選択する。
![vm-12.png](https://qiita-image-store.s3.amazonaws.com/0/142279/41cb0cb2-4604-00cd-fff9-d2ef5846c663.png)

### インストールの概要
そのまま「インストールの開始」ボタンをクリックする。
![vm-13.png](https://qiita-image-store.s3.amazonaws.com/0/142279/37048d72-033c-8601-0c96-3fff1aff0188.png)
※ソフトウェアに「！」が表示された場合は、少々待つと消える。
※システムに「！」が表示され、進めない場合は、一度開いてみると消える。

### ルートのパスワード設定
「ROOTパスワード」をクリック。
![vm-14.png](https://qiita-image-store.s3.amazonaws.com/0/142279/51493f68-4b93-798e-b64a-c7ddf4f867a9.png)

パスワードを入力し、完了を２回クリックする。
![vm-15.png](https://qiita-image-store.s3.amazonaws.com/0/142279/1a2b9341-f39f-43c3-7d30-04a201275e35.png)
※パスワードポリシーには反しているが、Vagrantで利用するのでこのまま登録する。

### インストール
インストールが開始されます。
少々時間がかかるので、インストールが完了するまで待つ。
![vm-16.png](https://qiita-image-store.s3.amazonaws.com/0/142279/c229df4d-31c5-46eb-559f-ded1d91d473b.png)
※インストールの進行状況は、下部のバナーの上に表示されます。

### 再起動
インストールが完了すると「再起動」ボタンが表示されるので、クリックする。
![vm-17.png](https://qiita-image-store.s3.amazonaws.com/0/142279/a37e55fc-7dd5-b954-8c83-a728450089d0.png)

## CentOS7の設定
### CentOS7の起動
「CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)」を選択する。
![vm-18.png](https://qiita-image-store.s3.amazonaws.com/0/142279/7654fe50-a006-3df9-ca63-1a519e8d576d.png)

### ログイン
rootでログインする。

```:コンソール(CentOS7)
CentOS Linux 7 (Core)
Kernel 3.10.0-514.el7.x86_64 on an x86_64

localhost login: root
Password:
Last login: Tue Jul  4 12:50:07 on tty1
[root@localhost ~]# 
```

### ネットワークの設定
インタフェース名の確認

```:コンソール(CentOS7)
# nmcli c s
NAME    UUID                                  TYPE            DEVICE
enp0s3  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  802-3-ethernet  --
```
ONBOOTをyesに設定すると同時にネットワークにもDHCPで接続される。

```:コンソール(CentOS7)
# nmcli c m enp0s3 connection.autoconnect yes
```

### vagrantユーザの追加
ユーザvagrantを作成し、パスワードをvagrantとする。

```:コンソール(CentOS7)
# groupadd -g 1000 vagrant
# useradd -g vagrant -u 1000 vagrant
# passwd vagrant
```
※パスワードは「vagrant」とする

### sudoとRequirettyの設定を行う。

```:コンソール(CentOS7)
# visudo
```

下記を追記する

```sh:コンソール(CentOS7)
# Vagrant User Setting
Defaults:vagrant !requiretty
vagrant         ALL=(ALL)       NOPASSWD: ALL
```

## vagrantユーザーの設定
### ssh接続
Macのターミナルを起動時、下記コマンドにて接続する

```sh:ターミナル(Mac)
$ ssh -p 2222 vagrant@localhost
```
※「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」が表示され、
　接続できない場合は、「known_hosts」を調整。

### Vagrant sshの設定

```sh:ターミナル(vagrant)
$ install -m 0700 -d ~/.ssh
$ echo "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ==" > ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
```

### GuestAdditionsのインストール
準備

```sh:ターミナル(vagrant)
$ sudo yum -y install epel-release
$ sudo yum -y install -y bzip2 gcc make kernel-devel-`uname -r` dkms gcc-c++
```

Guest Addions CD imageのセット
![vm-20.png](https://qiita-image-store.s3.amazonaws.com/0/142279/54e88f17-784e-f635-5cf3-61c4fbb27fd1.png)

GuestAdditionsのインストール

```sh:ターミナル(vagrant)
$ sudo mount -r /dev/cdrom /mnt
$ sudo /mnt/VBoxLinuxAdditions.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 5.1.22 Guest Additions for Linux...........
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
vboxadd.sh: Starting the VirtualBox Guest Additions.
```

Guest Addions CDのアンマウント

```sh:ターミナル(vagrant)
$ sudo umount /mnt
```

## 仮想マシンの終了
ボックスサイズの最小化し、シャットダウンする。

```sh:ターミナル(vagrant)
$ sudo yum clean all

# Log削除
$ sudo rm -rf /var/log/*
$ sudo rm -rf /tmp/*

# 圧縮
$ sudo dd if=/dev/zero of=/0 bs=4k
$ sudo rm /0

# コマンド履歴をクリア
$ sudo rm /root/.bash_history
$ history -c

# シャットダウン
$ sudo shutdown -h now
```

## ボックスの作成
Macのターミナル上で、vagrantコマンドにてBOXファイルを作成する。

```sh:ターミナル(mac)
$ vagrant package --base vagrant-centos7
==> vagrant-centos7: Clearing any previously set forwarded ports...
==> vagrant-centos7: Exporting VM...
==> vagrant-centos7: Compressing package to: /Users/hoge/package.box

$ ls -l package.box
-rw-r--r--  1 hoge  staff  621394873  7  4 15:34 package.box
```

## ボックスの追加
作成したpackage.bxoをvagrantへ登録する。

```sh:ターミナル(Mac)
$ vagrant box add local/centos7 package.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7' (v0) for provider:
    box: Unpacking necessary files from: file:///Users/uemura/package.box
==> box: Successfully added box 'centos7' (v0) for 'virtualbox'!
$ vagrant box list
local/centos7     (virtualbox, 0)
```

## 仮想マシンの作成とログイン
作成したボックスで仮想マシンを作成しログインしてみる。

```sh:ターミナル(Mac)
$ mkdir -p ~/Document/Vagrant/centos7
$ cd ~/Document/Vagrant/centos7
$ vagrant init local/centos7
$ vagrant up
$ vagrant ssh
```

## 参考資料

- ISO
    - [CentOS7(iso)](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1611.iso)

- BOX作成
    - [CentOS 7のVagrant BOXを新規にインストールして作成する](http://tmick.net/centos7-vagrant-box/#VirtualBOX)
    - [CentOS7の綺麗なboxを自作する](http://qiita.com/moonphase/items/6dde0c6cb9b5e8cb64f7)

- その他
    - [rootだけtty無しのsudoを許可](http://qiita.com/ryo0301/items/4daf5a6d22f16193410f)
    - [VirtualBoxの仮想ディスクを圧縮したい](https://doruby.jp/users/hotdog/entries/VirtualBox_)
    - [Linuxで入力したコマンドの履歴を消去する方法](http://d.hatena.ne.jp/kzfactory/20090914/1252940753)