CoreOSを自分でインストールする。
目的は、VirtualBoxや、VMWarePlayer, vSphere(ESXi)等で動かす自前のCoreOSイメージを作成するため。

CoreOSの初期設定

CoreOSはユーザアカウント等の初期設定をインストール時に一括で行う。
「一括で」とわざわざ書いたのには理由がある。
通常、LinuxやFreeBSDなどのインストールでは、インストール時に対話インタフェースが実行され、質問に答える形で各種設定を行う。
しかしCoreOSでは、あらかじめ準備した設定ファイルを、インストール時に指定する方法を採る。
つまり設定ファイルさえ書いておけば、コマンド一発でインストールができるということ。

その設定ファイルがCloud-Config。

Cloud-Configの書き方

ここに記載がある。
https://coreos.com/os/docs/latest/cloud-config.html

いきなりここにあるすべての設定を書き込むのは、後述の手順を見てもかなり大変。
よって、必要最低限のものしか書かない。
具体的には、CoreOSにターミナルログインするユーザ設定のみ。
そこから先は、OSインストール後に実施する。

ISOイメージでブート

https://coreos.com/os/docs/latest/booting-with-iso.html
上記からダウンロード。
VirtualBoxでもなんでも、すきな仮想ソフトウェアに読み込ませて起動する。
なお、仮想マシン作成時、OSを選ぶ際には64bit Linuxを選んでおけばよい。

Cloud-Configを書く前に

必要なのは、作業用アカウントの設定だけ。
したがって、ID、パスワード、作業用アカウントの権限くらいでよい。
当然のことながらパスワードを平文で保存するわけにはいかないから、mkpasswdを使ってハッシュ化したものを書き込むこと。

パスワードハッシュの生成

作業用アカウントのパスワードハッシュを生成する。
もちろん、SSHの公開鍵でもいいのだが、パスワードハッシュの方が楽。

mkpasswdの使い方はmkpasswd -hで得られる。

$ mkpasswd -h
Usage: mkpasswd [OPTIONS]... [PASSWORD [SALT]]
Crypts the PASSWORD using crypt(3).

      -m, --method=TYPE     select method TYPE
      -5                    like --method=md5
      -S, --salt=SALT       use the specified SALT
      -R, --rounds=NUMBER   use the specified NUMBER of rounds
      -P, --password-fd=NUM read the password from file descriptor NUM
                            instead of /dev/tty
      -s, --stdin           like --password-fd=0
      -h, --help            display this help and exit
      -V, --version         output version information and exit

If PASSWORD is missing then it is asked interactively.
If no SALT is specified, a random one is generated.
If TYPE is 'help', available methods are printed.

ハッシュ生成方法についてはmkpasswd -m helpで得られる。

$ mkpasswd -m help
Available methods:
des     standard 56 bit DES-based crypt(3)
md5     MD5
sha-256 SHA-256
sha-512 SHA-512

SHA-512までいけますね。
では、ハッシュ生成。
いったんテストして問題ないようなら、テキストファイルに書き込む。

$ mkpasswd -m sha-512 avedakedavra
$6$hIKFY6fnAE$gfpPpQu3rAcJMCeO3t93/3jUxVKBe7W/hC1.n5kwge3nnqsQngVnnoM8.jyWv/jYKbsJZoBm/6SSO7Ge4Zx/B0
$ mkpasswd -m sha-512 avedakedavra > cloud-config
$

以上でカレントディレクトリのcloud-configが生成された。
あとはこのcloud-configに必要な設定を書き加えるだけ。

Cloud-configの作成

設定ファイルの書式はYAML
YAMLは人間の眼には易しいが、フォーマットが合っているか不安になる。
その場合はatom等で書いておいてもよい。ハイライトしてくれるパッケージもある

そこで先述の通り必要最低限の記載だけする。
hostnameでホスト名、追加したいユーザと、そのユーザがsudoとdockerを使えるよう、groupに追加する。
以下のように。

#cloud-config

  hostname: "coreos"
  users:
    - name: "nobwak"
      passwd: $6$hIKFY6fnAE$gfpPpQu3rAcJMC....
      groups:
        - "sudo"
        - "docker"

CoreOSのインストール

作成したcloud-configを指定してインストールすればよい。
-dでインストール先デバイスを、-Cでチャネルを、-cで先ほど作成したcloud-configを指定する。

sudo coreos-install -d /dev/sda -C stable -c cloud-config

起動したら、作成したユーザでログインすることを確認する。