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
起動したら、作成したユーザでログインすることを確認する。