CoreOSをVirtualBoxにインストールする

## 作業環境
Ubuntu 15.04
VirtualBox 4.3
Linux系OSであればインストール方法はだいたい同じです。
## はじめに
CoreOS社が公開しているインストール方法に関するドキュメントは[こちら](https://coreos.com/os/docs/latest/booting-on-virtualbox.html)です。

初めてVirtualBoxにCoreOSをインストールしようとしたとき、ISOイメージに気を取られて、[CoreOSドキュメントページ](https://coreos.com/os/docs/latest/)の[ISOリンク](https://coreos.com/os/docs/latest/booting-with-iso.html)を参照してしまい、無駄な時間を過ごしました。VirtualBoxにインストールしたいときは[VirtualBoxリンク](https://coreos.com/os/docs/latest/booting-on-virtualbox.html)を参照します。

![1.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/7bd8c680-4448-efe5-cc9b-c233ec0f6eb3.gif)

## インストール手順
これらの作業はVirtualBoxがインストールされているコンピュータ上で行います。

**手順**
1. [VDIファイルを作成するためのシェルクリプトをダウンロードし、実行権限を付与](#step1)
2. [VDIファイルの作成](#step2)
3. [VDIファイルのハードドライブサイズを変更](#step3)
4. [必要に応じて作成したVDIファイルを複製](#step4)
5. [ISOファイルを作成するためのシェルクリプトをダウンロードし、実行権限を付与](#step5)
6. [ISOファイルの作成](#step6)
7. [作成したVDIファイルとISOファイルを使って仮想マシンを作成・起動](#step7)
以上。

## 1. <a id="step1">VDIファイルを作成するためのシェルクリプトをダウンロードし、実行権限を付与</a>
wgetコマンドがない場合は[こちら](https://github.com/coreos/scripts/tree/master/contrib)からダウンロードします。

```
user@localhost:~$ wget https://raw.github.com/coreos/scripts/master/contrib/create-coreos-vdi
user@localhost:~$ chmod a+x create-coreos-vdi
```

権限を付与した結果です。

```
user@localhost:~$ ls -l
-rwxrwxr-x 1 user user  3573 11月 18 18:55 create-coreos-vdi
```

## 2. <a id="step2">VDIファイルの作成</a>
作成するVDIファイルのパスとダウンロードするCoreOSのバージョンを指定してスクリプトを実行します。数百MBあるので、完了するまでに少々時間がかかります。

```
user@localhost:~$ ./create-coreos-vdi -d /home/user/VirtualBox -V beta
...
Success! CoreOS beta VDI image was created on coreos_production_835.5.0.vdi
```

スクリプトが正常に完了すると例えば以下のようになります。

```
user@localhost:~/VirtualBox$ ls -l
-rw------- 1 user user 788529152 11月 19 13:55 coreos_production_835.5.0.vdi
```
参考までにcreate-coreos-vdiシェルクリプトのヘルプです。

```
user@localhost:~$ ./create-coreos-vdi -h
Usage: ./create-coreos-vdi [-V version] [-d /target/path]
Options:
    -d DEST     作成されたVDIファイルを保存するパスを指定
    -V VERSION  ダウンロードするCoreOSのバージョンを指定。
                alpha, beta, stableのいづれか。指定しなければstableがダウンロードされる。
    -h          ヘルプを表示

This tool creates a CoreOS VDI image to be used with VirtualBox.
```

## 3. <a id="step3">VDIファイルのハードドライブサイズを変更</a>
作成されたVDIファイルのハードドライブサイズは4GB程度に設定されているので、変更したい場合は修正します。例えば10GBにしたい場合。

```
user@localhost:~/VirtualBox$ VBoxManage modifyhd coreos_production_835.5.0.vdi --resize 10240
```


## 4. <a id="step4">必要に応じて作成したVDIファイルを複製</a>
CoreOSの仮想マシンを複数構築する場合は、上記VDIファイルをベースイメージとして残します。
VirtualBoxのコマンドを使ってVDIファイルをコピーします。作成する仮想マシンの名前（hostname）を付けることが望ましいです。

```
user@localhost:~/VirtualBox$ VboxManage clonehd coreos_production_835.5.0.vdi hostname.vdi
...
Clone hard disk created in format 'VDI'. UUID: 2252000e-8a2b-4471-9767-00c469eb60b5
user@localhost:~/VirtualBox$ ls
coreos_production_835.5.0.vdi hostname.vdi
```

## 5. <a id="step5">ISOファイルを作成するためのシェルクリプトをダウンロードし、実行権限を付与</a>

手順１と同じくwgetコマンドがない場合は[こちら](https://github.com/coreos/scripts/tree/master/contrib)からダウンロードします。

```
user@localhost:~$ wget https://raw.github.com/coreos/scripts/master/contrib/create-basic-configdrive
user@localhost:~$ chmod a+x create-basic-configdrive
user@localhost:~$ ls -l
-rwxrwxr-x 1 user user      4820 11月 18 19:11 create-basic-configdrive
-rwxrwxr-x 1 user user      3573 11月 18 18:55 create-coreos-vdi
```

## 6. <a id="step6">ISOファイルの作成</a>
ISOファイルを作成するにあたり、SSH公開認証鍵が必要になります。鍵は下記コマンド1行で生成できます。暗号アルゴリズムにはdsaやrsaなどが選べますが、rsaを選択しておけば無難です。

```
user@localhost:~$ ssh-keygen -t rsa
user@localhost:~$ ls
id_rsa id_rsa.pub
```

サーバー名（Hostname）を指定するオプションとSSH公開鍵を指定するオプションは必須です。
下記認証鍵はユーザ ***core*** に紐付けられます。

```
user@localhost:~$ ./create-basic-configdrive -H hostname -S id_rsa.pub
...
Success! The config-drive image was created on /home/user/hostname.iso
```

参考までにcreate-basic-configdriveシェルクリプトのオプションです。

```
user@localhost:~$ ./create-basic-configdrive -h
Usage: ./create-basic-configdrive -H HOSTNAME -S SSH_FILE [-p /target/path] [-d|-e|-i|-n|-t|-h]
Options:
    -d URL             Full URL path to discovery endpoint.
    -e http://IP:PORT  Adviertise URL for client communication.
    -H HOSTNAME        Machine hostname.
    -i http://IP:PORT  URL for server communication.
    -l http://IP:PORT  Listen URL for client communication.
    -u http://IP:PORT  Listen URL for server communication.
    -n NAME            etcd node name.
    -p DEST            Create config-drive ISO image to the given path.
    -S FILE            SSH keys file.
    -t TOKEN           Token ID from https://discovery.etcd.io.
    -h                 This help

This tool creates a basic config-drive ISO image.
```

## 7. <a id="step7">作成したVDIファイルとISOファイルを使って仮想マシンを作成・起動</a>

仮想マシンを作成するためのVDIファイルとISOファイルが準備できたので、VirtualBoxで仮想マシンを新規に作成します。
![2.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/97f5e35a-47f5-1387-3ae9-f4bdaa75a90b.gif)

名前: 任意のサーバ名（hostname）を記入
タイプ: Linux
バージョン: Other Linux(64-bit)
![3.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/9df6f4c9-b46a-0690-2770-71679d37119c.gif)

CoreOSの推奨最低メモリサイズは1GBです。
![4.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/f0725ce2-de84-602a-f410-a5b652ca7f4b.gif)

作成したVDIファイルを選択
手順3でハードドライブのサイズを変更していれば、4.43GB以外のサイズになります。
![5.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/82293d4c-4e59-8771-168e-dcbd339afa79.gif)

作成された仮想ホストを設定
![6.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/ae1229bf-dff7-986a-a39c-1067bf40097c.gif)

ストレージ >> CD/DVDドライブ >> 作成したISOファイルを選択
選択し終わると下図のようになります。
![7.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/2c74896b-a891-cbf1-57a5-3689ce580c98.gif)

以上で設定は完了です。仮想ホストを起動します。
![8.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/3853a76f-4475-385d-ba1a-1521734b5370.gif)

下図の画面になればインストール作業は完了です。
パスワードは設定されていないので、この画面はこのままにしておき、ログインは別ホストから鍵を使って行います。
![9.gif](https://qiita-image-store.s3.amazonaws.com/0/98179/ada06a4a-d0d6-91af-f6a7-6804c7cc1655.gif)

手順6で作成したid_rsa鍵を使って別ホストからログインします。
認証鍵はユーザ ***core*** に紐付いています。

```
ssh -i id_rsa core@10.0.2.15
```

以上。

## 最後に
Docker, etcd, Fleetなどのソフトウェアはcloud-configファイルを作成し、coreos-cloudinitシェルスクリプトを使って別途インストールします。