CentOS Atomic HostをVagrant Box化してみた

先日[CentOS Atomic HostをVirtual Boxにインストールする](http://qiita.com/smile-0yen/items/d3937dbf9df69259fdc4)というエントリを書きました。
Virtual Box上での作業はやはり少しやりにくいのでより気軽に、慣れたターミナルで
Atomic Hostを使いたいと思いvagrant box化しました。

## 環境

MacOS X: 10.9.5
vagrant: 1.6.3

## 前提

- [Virtual Boxでの環境構築](http://qiita.com/smile-0yen/items/d3937dbf9df69259fdc4)は済んでいる。

## vagrantユーザー追加

### ユーザーの追加

**ユーザー追加**

```
$ sudo useradd vagrant
```
**ユーザーのグループ追加**
必須ではないのですが**あくまでお試し環境**ですので利便性のために以下のグループへ追加し、
ひと通りの権限を与えます。

```
$ sudo usermod -G adm,wheel,systemd-journal vagrant
```

### 公開鍵の設置

**ディレクトリ作成**

```
$ sudo -u vagrant mkdir /home/vagrant/.ssh/
$ sudo -u vagrant chmod 700 /home/vagrant/.ssh
```
**鍵の設置**
vagrantのデフォルト公開鍵はgitに上がっています。リンク先の鍵を設置して下さい。[公開鍵gitリンク](https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub)

```
/home/vagrant/.ssh/authorized_keys
```
＊[前回](http://qiita.com/smile-0yen/items/d3937dbf9df69259fdc4)init.isoを作るときに読み込ませたuser-dataの公開鍵に設定するとcentosユーザの公開鍵として
`/home/centos/.ssh/authorized_keys`に設置されるため、VM内のコピーで事足ります。

### sudo権限の追加

vagrantユーザにはパスワード無しのsudo権限が必要です。`/etc/sudoers`を修正します。

```
$ sudo visudo
```
次の3行を追加します。

```
Defaults:vagrant !requiretty
vagrant ALL=(ALL) NOPASSWD:ALL
%vagrant ALL=(ALL) NOPASSWD:ALL
```

## vagrant box作成

VMを起動しているMBPのターミナルからbaseとするVMの名前(VirtualBoxでVMを作成するときに
つけた名前)を指定して次のコマンドを実行します。

```
$ vagrant package --base centos7atomic
==> centos7atomic: Exporting VM...
==> centos7atomic: Compressing package to: /hoge/package.box
```

するとカレントディレクトリに`package.box`ができますのでこれをVagrantへ追加します。
オプションで渡している`name`は`Vagrantfile`で`config.vm.box`に指定する名前です。

```
$ vagrant box add package.box --name centos7atomic
```

これで完成しました！

## 注意点

今回の手順ですと少なくとも下記2つの制約があります。その他にもあるかもしれません。
なお、vagrant sshできるので当然ですがポートフォワーディングは問題ありません。

- Vagrantfileのconfig.vm.hostnameの設定はうまく動きません。
- [公式の手順](https://docs.vagrantup.com/v2/virtualbox/boxes.html)にあるVirtualBox Guest Additionsを今回の手順では入れていません（入りませんでした...）
 - ホストOSとのファイル共有はできません。＊これはVirtualBoxでも同じ。
 - 他にも機能に制限が発生していると考えられます。

## サンプル

**Vagrantfile**

```
Vagrant.require_version ">= 1.6.3", "< 1.9.9"
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.boot_timeout = 60

  # box add済みなのでconfig.vm.box_urlは不要
  config.vm.box = "centos7atomic"

  # 共有フォルダは設定しない。
  config.vm.synced_folder ".", "/vagrant", disabled: true

  config.vm.post_up_message = "Welcome to CentOS 7 Atomis Host"
  config.vm.network "forwarded_port", guest: 8080, host: 9000

end
```

立ち上げて中身を見てみます。

```
$ vagrant up
```

デフォルトでインストール済のDockerは`rpm-ostree upgrade`で1.4.1になっています。

```
$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8/1.4.1
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8/1.4.1
```

同じくデフォルトで入るkubernetesは0.7です。

```
$ kube-controller-manager -version
Kubernetes v0.7.0-18-g52e165a4fd720d
```

Project Atomicで採用されているUI、cockpitはバージョン0.27です。

```
$ rpm -qa | grep cockpit
cockpit-0.27-1.el7.centos.x86_64
cockpit-assets-0.27-1.el7.centos.noarch
```

これで、さらに簡単に諸々試せる環境が揃えられたかと思います。

### 私家版BOX

私の作ったboxもvagrant cloudにあげましたのでもし使いたい方がいれば以下の通りご利用下さい。
`docker`を使い込むことを考え、[公式](http://www.projectatomic.io/docs/quickstart/)の「Configuring the New Drive」に従って`/var/lib/docker`へ
30GB追加しています。

[vagrant cloud(Atlas)](https://atlas.hashicorp.com/)にアカウントがあるものとします。登録は無料です。

```
$ vagrant login
$ vagrant box add --insecure smile-0yen/centos7atomic
$ vagrant box list  # 確認
smile-0yen/centos7atomic (virtualbox, 0.1) (virtualbox, 0.1)
```

あとはご存知の通り`Vagrantfile`の`config.vm.box`へ`smile-0yen/centos7atomic`を指定して下さい。

## リンク
- [CREATING A BASE BOX](https://docs.vagrantup.com/v2/virtualbox/boxes.html)
- 書籍：[実践 Vagrant](http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5-Vagrant-Mitchell-Hashimoto/dp/4873116651/ref=sr_1_2?ie=UTF8&qid=1421765939&sr=8-2&keywords=vagrant)