Vagrant Box をイチから作る！（備忘録）

自分が忘れそうなので備忘録。
Vagrant用のboxをVirtualBoxでイチから作ります。
画像が多めです。
※筆者の環境はMac OS Xです

# 対象
+ vagrant初心者
+ 自分でboxを作ってみたい人

# 事前準備
+ VirtualBoxがインストール済み
+ Vagrantがインストール済み
+ OSのインストールディスク等を用意

## VirtualBoxのインストール
+ URL: https://www.virtualbox.org/wiki/Downloads
+ 環境に合わせたものをダウンロードしてください
+ 本記事ではv4.3.26

## Vagrantのインストール
+ URL: http://www.vagrantup.com/downloads.html
+ 環境に合わせたものを(ry
+ 本記事ではv1.7.4

## CentOSのISOをダウンロード
+ URL: https://www.centos.org/download/
+ Minimal ISOをダウンロードします
+ 今回は[CentOS6.7 64bit](http://ftp.jaist.ac.jp/pub/Linux/CentOS/6/isos/x86_64/CentOS-6.7-x86_64-minimal.iso)をダウンロードします

# 手順
## 仮装マシンにOSをインストールする！
1. 新規仮装マシンを作成
![2015-11-07 21.55.20.png](https://qiita-image-store.s3.amazonaws.com/0/99594/d937ae22-2e98-74e9-e452-69923d2fb783.png)
2. 名前は適当に、タイプは今回は「Linux」、バージョンは「Red Hat(64bit)」
![2015-11-07 22.04.52.png](https://qiita-image-store.s3.amazonaws.com/0/99594/3f7ddc64-baad-64ee-d3bd-fc449d1bd7b4.png)
3. メモリは512MB（あまり大きすぎるとPCスペックによっては動作が不安定になります）
![2015-11-07 22.08.11.png](https://qiita-image-store.s3.amazonaws.com/0/99594/aea769e9-e215-42be-c981-13ac606f926a.png)
4. 仮装ドライブを作成します
![2015-11-07 22.10.23.png](https://qiita-image-store.s3.amazonaws.com/0/99594/ec7d5444-14ce-4561-48db-2f0d633774bc.png)
5. 種類は「VDI(VirtualBox Disk Image)」を選択します
![2015-11-07 22.11.08.png](https://qiita-image-store.s3.amazonaws.com/0/99594/9d8b6db6-4881-039e-a5d4-a5fe52b80432.png)
6. 仮装ハードドライブは「可変サイズ」を選択します
![2015-11-07 22.12.30.png](https://qiita-image-store.s3.amazonaws.com/0/99594/8d7b2ef9-ef4a-4e99-bff6-940385de19e8.png)
7. 仮装ハードドライブのサイズは250GBくらいにします
![2015-11-07 22.15.13.png](https://qiita-image-store.s3.amazonaws.com/0/99594/64dc7185-5e94-2445-e58b-1494dd5a5038.png)
8. 「設定」をクリックします
![スクリーンショット 2015-11-07 22.17.13.png](https://qiita-image-store.s3.amazonaws.com/0/99594/9080d2c8-3240-a05c-1595-7f505c3bf676.png)
9. 「ストレージ」をクリックし、「CD/DVDデバイスの追加」をクリックする
![スクリーンショット 2015-11-07 22.19.18.png](https://qiita-image-store.s3.amazonaws.com/0/99594/8476e1b3-0869-fbeb-6fe8-edbaed364fd3.png)
10. 「ディスクを選択」でダウンロードしたISOを選択します
![2015-11-07 22.21.21.png](https://qiita-image-store.s3.amazonaws.com/0/99594/d4c10d1e-47fd-b1ed-154d-7342d7d3a7ad.png)
11. 「オーディオ」をクリックし、「オーディオを有効化」のチェックを外します
![2015-11-07 22.24.05.png](https://qiita-image-store.s3.amazonaws.com/0/99594/f7e342a9-fdbe-b416-66fc-0765e7b8aaec.png)
12. 「ポート」をクリックし、「USB」をクリックする
![2015-11-07 22.26.39.png](https://qiita-image-store.s3.amazonaws.com/0/99594/28d66f91-c7d2-8f28-af1c-ff5e5c0d1713.png)
13. 「USBコントローラーを有効化」のチェックを外し、OKをクリック
![2015-11-07 22.27.52.png](https://qiita-image-store.s3.amazonaws.com/0/99594/855a26f8-3a3c-a291-1cf5-4feb8abf038a.png)
14. ここまでできたらいよいよ「起動」しましょう
![2015-11-07 22.29.23.png](https://qiita-image-store.s3.amazonaws.com/0/99594/f967dcb0-eeac-dba5-d061-4757676cb24c.png)
15. 起動したら「Install or upgrade an existing system」を選択します
![2015-11-07 22.31.04.png](https://qiita-image-store.s3.amazonaws.com/0/99594/2f1ae489-d6c1-8444-4bda-05364d52fcf5.png)
16. メディアはインストールしないので、「Skip」を選択します
![2015-11-07 22.33.56.png](https://qiita-image-store.s3.amazonaws.com/0/99594/14d407ee-c4ca-526b-a608-e67418c5c70a.png)
17. 「Welcome to CentOS!」と表示されるので「OK」を選択します
![2015-11-07 22.34.25.png](https://qiita-image-store.s3.amazonaws.com/0/99594/77e9fbce-5006-c87a-0a7e-62830f0fd519.png)
18. 言語は「Japanese」を選択します
![2015-11-07 22.34.48.png](https://qiita-image-store.s3.amazonaws.com/0/99594/ac0717c9-a84e-e5fe-039a-a2d4af52e673.png)
19. 日本語でのインストールは対応していないので、英語で続行します
![2015-11-07 22.35.02.png](https://qiita-image-store.s3.amazonaws.com/0/99594/62360ced-0184-7824-a3c7-c24a1c1ca49d.png)
20. キーボードは「jp106」を選択します
![2015-11-07 22.35.17.png](https://qiita-image-store.s3.amazonaws.com/0/99594/87a2f46f-74a9-0039-a895-38ad7db2d452.png)
21. Reinitializeする必要があると表示されるので、「Re-initialize all」を選択します
![2015-11-07 22.35.34.png](https://qiita-image-store.s3.amazonaws.com/0/99594/8b0b0641-3bb8-68c0-0fa0-d18cdc9faf67.png)
22. タイムゾーンは「Asia/Tokyo」を選択します
![2015-11-07 22.35.50.png](https://qiita-image-store.s3.amazonaws.com/0/99594/fe0497b7-e451-d820-293e-f35433bbb6df.png)
23. rootパスワードは「vagrant」と入力します
![2015-11-07 22.36.16.png](https://qiita-image-store.s3.amazonaws.com/0/99594/fbc78c12-497b-4e55-8f31-c4e7e1f9f607.png)
24. パスワードが簡単すぎると警告がでますが、「Use Anyway」を選択します
![2015-11-07 22.36.36.png](https://qiita-image-store.s3.amazonaws.com/0/99594/094a54d1-39e0-a586-7c83-32e294f5ddc0.png)
25. インストール用パーティションを作成する場所を聞かれるので、「Use entire drive」を選択します
![2015-11-07 22.36.57.png](https://qiita-image-store.s3.amazonaws.com/0/99594/00a450c1-dd1c-bb7f-44bd-84ac99d46293.png)
26. 既にデータがある警告がでますが、「Write changes to disk」を選択します
![2015-11-07 22.37.23.png](https://qiita-image-store.s3.amazonaws.com/0/99594/1db4d63c-1f7e-be97-9306-3718365c74d6.png)
27. しばらくするとインストールが完了するので「Reboot」を選択します
![2015-11-07 22.52.58.png](https://qiita-image-store.s3.amazonaws.com/0/99594/6c3512eb-cdb6-3d0d-2854-bacf6634a95f.png)

## サーバの設定を行う！
　
<ol><li>再起動したら、rootユーザでログインします

```shell-session
localhost login: root
Password: vagrant
```
</li><li>NICの設定をする

```shell-session
# ln -f -s /dev/null /etc/udev/rules.d/70-persistent-net.rules 
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
```
```shell-session:/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
```
```shell-session
# service network restart
```

</li><li>sudoを設定する

```shell-session
# visudo
```
```shell-session:/etc/sudoers
// 56行目をコメントアウトする
# Defaults    requiretty
// 最終行に下記を追記
vagrant         ALL=(ALL)       NOPASSWD: ALL
```
</li><li>SELinuxを無効にする

```shell-session
# vi /etc/selinux/config
```
```shell-session:/etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
```
</li><li>iptablesを無効化する

```shell-session
# chkconfig iptables off
```
</li><li>yumパッケージを最新版にしておく

```shell-session
# yum -y update
# yum -y groupinstall "Base"
# yum -y groupinstall "Japanese Support"
# yum -y install kernel-devel gcc
```
</li><li>一度再起動する

```shell-session
# shutdown -r now
```
</li><li>Guest Additionsのインストール
VirtualBoxのメニューから「Devices」→「Insert Guest Additions CD image...」を選択
（特になにも表示されていないがマウントされている）

```shell-session
# mount -r -t iso9660 /dev/cdrom /mnt
# sh /mnt/VBoxLinuxAdditions.run
Building the OpenGL support module [FAILED]は無視してOK
```
</li><li>vagrantユーザを追加する

```shell-session
# groupadd vagrant
# useradd vagrant -g vagrant -G wheel
# passwd vagrant
New Password: vagrant
Retype new password: vagrant
# su - vagrant
```
</li><li>authorized_keysを登録する

```shell-session
$ mkdir ~/.ssh/
$ chmod 0700 ~/.ssh/
$ touch ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
$ curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub > ~/.ssh/authorized_keys
$ hitory -c
$ exit
```
</li><li>DISCを綺麗にする

```shell-session
# yum -y remove kernel-devel gcc
# yum clean all
# dd if=/dev/zero of=/EMPTY bs=1M
# rm -f /EMPTY
# history -c
```
</li><li>シャットダウンする

```shell-session
# shutdown -h now
```
</li></ol>

## boxを作成する！
　
<ol><li>Macのターミナルを立ち上げる
</li><li>boxを作成する

```shell-session
$ cd ~/VirtualBox\ VMs/[仮装マシン名]
$ vagrant package --base [仮装マシン名]
```
</li><li>好きな名前に変更する

```shell-session
$ mv package.box centos6_ja.box
```
</li><li>完成！</li></ol>

# 参考にさせていただいたサイト
+ http://momijiame.tumblr.com/post/77460699382/vagrant-の-virtualbox-用-base-box-ファイルを手動で作ってみる
+ http://te2u.hatenablog.jp/entry/2015/05/11/012225