Vagrant box 作成

# 一応開発環境
+ iMac OS X Yosemite 10.10.5
    + VitualBox 5.0.12
    + Vagrant 1.8.1
+ Centos version 7.2.1511

# マシン作成
* Centosのisoをダウンロード

> 今回は現在最新版の7.2.1511を使用します
リンク先 → [Index of /Linux/centos/7/isos/x86_64](http://ftp.riken.jp/Linux/centos/7/isos/x86_64/)
軽量化のためMinimalを使用し、最小構成をインストールする

## VitualBoxで仮装マシンを作成
> name:なんでもおk
type:Linux
version:Red Hat(64-bit)
memory:1024MB
HDD:10GB VDI 可変サイズ

## マシンの詳細設定
- オーディオ設定のオーディを無効化
- ポート設定のUSBコントローラーの無効化

## OSのインストール
 1. Install CentOS 7を選択
 2. 語源は何でもいいですが日本人なら日本語で(｡◕ε ◕。）
 3. インストール先のパーティションをもう一回選択（自分だけ？）
 4. ネットワークとホスト名で、イーサネット（enpOs3）を起動しておく
 5. ホスト名も変更しておく（なんでもおk）
 6. インストール開始をする
 7. rootユーザのパスワードを決め、ユーザも作成しておく
     * rootユーザのパスワード・ユーザのID・パスワードをvagrantで統一しておく
 8. インストールが終わり再起動を行い、正常起動を確認する

# OSの設定
まずは、現在の状態です。

```
# systemctl --type=service
  UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
  auditd.service                     loaded active running Security Auditing Service
  crond.service                      loaded active running Command Scheduler
  dbus.service                       loaded active running D-Bus System Message Bus
  getty@tty1.service                 loaded active running Getty on tty1
● kdump.service                      loaded failed failed  Crash recovery kernel arming
  kmod-static-nodes.service          loaded active exited  Create list of required static device nodes for the current kernel
  lvm2-lvmetad.service               loaded active running LVM2 metadata daemon
  lvm2-monitor.service               loaded active exited  Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling
  lvm2-pvscan@8:2.service            loaded active exited  LVM2 PV scan on device 8:2
  network.service                    loaded active exited  LSB: Bring up/down networking
  NetworkManager.service             loaded active running Network Manager
  polkit.service                     loaded active running Authorization Manager
  postfix.service                    loaded active running Postfix Mail Transport Agent
  rhel-dmesg.service                 loaded active exited  Dump dmesg to /var/log/dmesg
  rhel-import-state.service          loaded active exited  Import network configuration from initramfs
  rhel-readonly.service              loaded active exited  Configure read-only root support
  rsyslog.service                    loaded active running System Logging Service
  sshd.service                       loaded active running OpenSSH server daemon

                                     (中略)

33 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
```
firewallが入ってないという最初びっくりしました(｡◕ω ◕。）
なのにpostfixは入っている。。。謎だな
## パッケージのupdate
`# yum -y update`
## firewallのインストール・無効化とpostfixの無効化
入ってないのもアレなので一応を行います

```
・firewall
# yum -y install firewalld
# systemctl disable firewalld
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 木 2016-01-07 23:31:35 JST;
（以降省略

・postfix
# systemctl stop postfix
# systemctl disable postfix
```
これでいらないものがなくなりました。


## VirtualBox Guest Additionsのインストール
まずは必要なパッケージをインストール

```
# yum -y groupinstall "Development Tools"
```

そして、メニューから"Devices"から"Insert Guest Additions CD Images..."を選択
（そういえば自分の英語？）

```
・CDマウント
# mkdir /media/cdrom
# mount -r /dev/cdrom /media/cdrom
# sh /media/cdrom/VBoxLinuxAdditions.run

・取り出し
# umount /media/cdrom
```
- 3行目時に失敗してしまった
    - kernel-develが入ってなかったみたいです〜
    - "Development Tools"で入ってた気がしたけどなかったのかな

## SElinuxの無効化
次はFTPなどで使い可能性を考えSElinuxを止めていきます
`# vi /etc/selinux/config`のenforcingをdisabledに変更します

```:7行目
SELINUX=enforcing
       ↓
SELINUX=disabled
```
SELinuxは再起動しないと設定が反映されません（一時的変更は可能

現在の状態の確認

```
# getenforce 
Enforcing
```
- enforcing
    - SElinux機能、アクセス制御は有効状態
- permissive
    - SElinuxは警告をするが、アクセス制御は無効状態
- disabled
    - SElinux機能、アクセス制御は無効状態

SELinuxを一時的に有効化するコマンド
`# setenforce 0`
これを１にすると一時的に無効化することができます
## sudoの設定
vagrantユーザがsudoを実行するときにパスワードなしでできるようにします
`# visudo`

```
・56行目
　Defaults   requiretty
　　　　　　　↓
　# Defaults   requiretty

・108行目
　%vagrant      ALL=(ALL)     NOPASSWD: ALL
```
## sshの設定
vagrantユーザがssh接続する際に使う鍵を登録しておく

```
# mkdir /home/vagrant/.ssh
# chmod 700 /home/vagrant/.ssh
# curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub >> /home/vagrant/.ssh/authorized_keys
 chmod 600 /home/vagrant/.ssh/authorized_keys
# chown -R vagrant:vagrant /home/vagrant/.ssh
```
## ポートフォワーディング設定の削除
接続用に用意していたポトートフォワーディングを消しておく
## boxの最適化
- yumのキャッシュのクリア
    - `# yum clean all`
- フラグメンテーションの解消
    - `# dd if=/dev/zero of=/EMPTY bs=1M`
    - `# rm -f /EMPTY`

シャットダウンを行って下さい(｀・ω・´)<もうちょい！
`# shutdown -h now`
# Box作成
いよいよ最後です！！
ようやく箱作りの開始です

## まずは仮装マシンからパッケージを作成します

```:package化
$ vagrant package --base {仮装マシン名} --output {name}.box
```

```:例
$ vagrant package --base centos7 --output centos7.2.1511.box
```
作業中のディレクリ（カレント・ディレクトリ）にpackageが作成されます
--outputを記入しない場合は、package名は{package.box}になります。気にならない方は書かなくても大丈夫です

## 作ったパッケージをvagrantに追加します

```:追加
$ vagrant box add --name {name} {box name}.box
```

```:例
$ vagrant box add --name centos7.2 centos7.2.1511.box
```

```:boxリスト
$ vagrant box list
centos7.2 (virtualbox, 0)
```
# まとめ

長々とお付き合いいただきありがとうございました！

今までサーバ作るごとにインストールしてたのがバカみたいに思えてきました(｡◕ε ◕。）

開発環境の出し入れが簡単ですし、Vagrantfileから色々できそうなので、
まだまだ興味がつきませんね(｀・ω・´)