CentOS 7をインストールしてVagrant boxを作る その2


## 前回

[CentOS 7をインストールしてVagrant boxを作る その１](http://qiita.com/marmot1123/items/9bc7bfed35b9048621d2)
CentOS 7をインストールしたところまでやりました。
今回は`vagrant`ユーザの作成、SSHの設定、SELinuxの無効化、boxの作成までをやります。

## `vagrant`ユーザの作成

インストール時に作成した`root`ユーザでログインします。

```
$ adduser vagrant
$ passwd vagrant  # なんでもかまいませんが、無難にvagrantにしました
$ id vagrant
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
```

続いて`vagrant`ユーザを`sudoer`にします。

```
$ visudo
```

ttyでないsudoコマンドも通せるようにします。
56行目あたりにある次の行をコメントアウトします。
`tty`で検索すると良いかと。

```
# Defaults		requiretty  # コメントアウト
```

99行目あたりに`vagrant`の行を付け足します。

```
97 ## Allow root to run any commands anywhere
98 root		ALL=(ALL)	ALL
99 vagrant	ALL=(ALL)	NOPASSWD:	ALL  # 付け足し
```

これで`vagrant`ユーザはパスワードを入れることなく`sudo`を実行できるようになりました。


### SSHの設定

SSHの設定にはOpenSSHが必要です。
入っているとは思いますが、一応調べておきます。

```
$ systemctl status sshd
```

activeの文字が出れば大丈夫です。

Vagrantの良い点の一つは特に公開鍵とかを考えなくとも
`vagrant ssh`と打つだけでVMに接続できることですが、
その仕組みは、VagrantはVMにSSH接続を試みるときに、
まずあらかじめ生成されたInsecureなKeypairを用いて
SSHを試みるからです。
そのInsecure Keypairは[VagrantのGitHubリポジトリ](https://github.com/mitchellh/vagrant/tree/master/keys)で公開されています。

```
$ mkdir /home/vagrant/.ssh
$ chmod 700 /home/vagrant/.ssh
$ curl -kLo authorized_keys 'https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub'
$ chmod 700 /home/vagrant/.ssh
$ chmod 600 /home/vagrant/.ssh/authorized_keys
$ chown -R vagrant.vagrant /home/vagrant/.ssh
```

## SELinuxの無効化

SELinuxは取り扱いが非常に難しいらしいので無効化します。

```
$ vi /etc/sysconfig/selinux

# enforcing -> disabled
SELINUX=disabled
```

## VirtualBox Guest Additionsのインストール

ドキュメントはUbuntuを想定してるのでちょっとパスが違ってます。

```
$ curl -kLo VBoxGuestAdditions_5.0.10.iso 'http://download.virtualbox.org/virtualbox/5.0.10/VBoxGuestAdditions_5.0.10.iso'
$ mkdir -p /mnt/VBoxGuestAdditions
$ mount -r VBoxGuestAdditions_5.0.10.iso /media/VBoxGuestAdditions
$ yum install -y bzip2 gcc gcc-c++ kernel-devel kernel-headers
$ sh /mnt/VBoxGuestAdditions/VBoxLinuxAdditions.run
$ umount /mnt/VBoxGuestAdditions
$ rmdir /mnt/VBoxGuestAdditions
```

## `yum update`と`yum clean`

```
$ yum update
$ yum clean
```

## udevのルールの削除

参考にしたサイトでは`udev`のルールを削除していたりするのですが、
削除対象のファイルを見てみたらコメントしかなかったので削除しません。
その１の方でVirtualBoxの設定でUSBやオーディオを無効化していたのに相当するのかもしれません（わかってない）

## フラグメンテーションの解消

フラグメンテーションを解消するために `/EMPTY` という空のファイルを作って削除しているみたいです。
どうしてこれでフラグメンテーションが解消されるのかはよく分かってません。

```
$ dd if=/dev/zero of=/EMPTY bs=1M
$ rm -f /EMPTY
```

## boxの作成

ゲスト(CentOS)をシャットダウンし、ホスト(Mac)でboxを作ります。

```
$ shutdown -h now

# Host (Mac)
$ vagrant package --base <VM_Name>  # VirtualBoxのVMの名前を入れます
$ vagrant box add centos71-minimal package.box  # centos71-minimalは任意の名前です
```

## できたもの

できたものを[Atlasに公開](https://atlas.hashicorp.com/marmot1123/boxes/centos71-minimal/versions/1.0.0)してみました。
この設定で使いたいという方がいたらどうぞ。
（動作保証はできません）

使い方は、

```
$ vagrant init marmot1123/centos71-minimal
$ vagrant up
```

です。


## 参考サイト

[公式ドキュメント](http://docs.vagrantup.com/v2/boxes/base.html)

以下のサイトに大変お世話になりました。

* [CentOS 6.6 x86_64 minimalのVagrant boxを作る | 作業ノート id:te2u](http://te2u.hatenablog.jp/entry/2015/05/11/012225)
* [VirtualBoxのCentOS7にGuestAdditionsをインストール | Qiita hiroseabook](http://qiita.com/hiroseabook/items/dc7a9c9ce9e49f15ed45)