CoreOSをVirtualBoxに手動でセットアップしたらめんどくさかった

最近CoreOSやらDockerやらの名前をよく聞くので面白そうと思って入れてみた。

ホストOSはOS X Mavericks。

OS XなのでBoot2Dockerとか使うほうが楽な気がするけど他の仮想マシンVirtualBoxで管理してるのでCoreOSもVirualBoxに入れた。

構成としてはVirtualBox内のDockerからはインターネットへの通信とホストのOS Xとの通信が可能なようにした。また、SSHで繋ぐ関係上IPアドレスを固定にした。これが一番めんどくさかった。

最初に言っとくとさらっと書いてるけど2日間くらい四苦八苦したので特に理由が無ければVagrant使うといいと思います。Vagrant使わなかったのはフォルダの管理があんまり好きじゃなかったから。

セットアップ

まずhttps://coreos.com/からセットアップ時に使うCoreOSのISOイメージをダウンロード。Download CoreOSのISO Imageから飛んだ先でダウンロード。

で、その間にでもVirtualBoxの下準備。仮想マシンを新しく作る。色々なコンテナを入れることが予想されるのでメモリと仮想ハードディスクは多めに取っておいた。アーキテクチャは「CoreOS」って名前で作るとOracleの64bitになるのでそれでいいはず。

作ったら設定から色々いじるんだけど、必須なのはネットワーク周りでインターフェイス1はNATのままでいいんだけどインターフェイス2などでホストオンリーアダプタを追加しないとホストとは通信できないので設定。他、ついでにCPUコア割り当てを1個じゃアレなので2個くらいに増やしとく。

そんでもってISOイメージのダウンロードが終わったらVirtualBoxの仮想ドライブにマウント。

で、ブート。

インストール

概ね公式ドキュメント通りなんだけど、今回は色々設定いじるので設定用のファイルcloud-config.yamlを作る。

そのファイルに記載すべきなのは

  • 接続元のSSHの公開鍵
  • IPアドレス固定のためのネットワーク設定ファイルの設定
    • CoreOSはネットワークインターフェイス周りをsystemd-networkdで管理なさるのでその流儀にしたがって
    • ここではブート後にifconfigとかroute -nとかして、ゲスト側のホストオンリーアダプタのインターフェイス名がenp0s8、あとNATのデフォルトゲートウェイ10.0.2.2だったので以下の様に作る。
    • あと、固定したいIPアドレスVirtualBoxのデフォルトの設定だと192.168.56.101-192.168.56.254だった気がするのでその範囲で
#cloud-config

write_files:
  - path: /etc/systemd/network/10-host-only.network
    content: |
      [Match]
      Name=enp0s8
      
      [Network]
      Address=192.168.56.1XX/24
      Gateway=10.0.2.2

ssh_authorized_keys:
  - ssh-rsa AAAAB3[以下略]

注意点としては

こうして用意したcloud-config.yamlを起動したCoreOSへ持っていく。ホストのOS X側で作ったYAMLファイルを、ワンライナーか何かでHTTPサーバ立てて一時的に公開して、CoreOS側でwget 192.168.56.1:10000/cloud-config.yamlとかすると楽。 ちなみにCoreOS君はJISキーボードじゃなくてUSキーボードで動くから:Shift+;な。他JISキーボードだといろんな記号が打ちにくいけど我慢して。

で、CoreOSではこんなかんじの操作する

coreos $ sudo su
coreos # wget url-to-cloud-config.yaml
coreos # coreos-install -d /dev/sda -C stable -V current -c cloud-config.yaml -v

CoreOSのstable版のcurrentバージョンのOSイメージを取りに行くので結構時間かかる。Wi-Fiで10-20分くらい掛かったっけな。オプションの意味はhttps://coreos.com/docs/running-coreos/bare-metal/installing-to-disk/を見ていただくとして、小文字の-vはverboseのvなので別に無くてもいい。 -Vもホントは無くて良かったはずなんだけど、どうやらオプション無しで取りに行くバージョンがNot Found食らったので明示的にバージョンをcurrentに指定してる。

終わったらshutdown -h nowして、VirtualBoxの設定画面からISOイメージを取り出して再起動。

で、ここが重要なんだけど、1回目の起動では上記の設定が反映されないのでログインプロンプト出ても問答無用で×ボタンからシャットダウン。もう一度起動すると設定が反映され、表示されるIPアドレスが設定通りになるのでようやくホストのOS X側からssh。初めて接続する場合はfingerprintの警告が出るのでyes。なんかエラー出たら~/.ssh/known_hostsIPアドレスが該当するエントリが既に無いか確認して有ればその行を削除してsshしなおし。公開鍵認証なので少し時間かかることもあるけどひとまず待つ。

host(OS X) $ ssh core@192.168.56.1XX
Last login: [略]
CoreOS (stable)
core@localhost ~ $

一応ping 8.8.8.8とかして疎通確認しとくと良い。

試しにDockerでnginxでも入れてみる

core@localhost ~ $ docker run -d -p 80:80 dockerfile/nginx
[色々取りに行くので気長に待つ。
終わったらホストOSからhttp://192.168.56.1XX/にでもアクセスして、
nginxのページが出れば成功]

なお、nginxを止めるには、↑のコマンドの最後に出てくるImage ID(ハッシュ値)を1a2b3c...とするとdocker stop 1a2b3cとかする。要らなくなったイメージとかを消すにはDockerで不要になったコンテナやイメージを削除する - @znz blog見ながら頑張れ。

そろそろ卒論近づいてきて時間が少しずつ削れてるけど頑張ります

*1:もちろんtasutenの部分は各自自分のIDで

当ブログに於いて、私tasutenによって創作されたことが自明である著作物に対しては、別途明示のある場合を除き全てCC0が適用されます。