ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

CoreOS のパブリックイメージをリリースしました!

こんにちは。ニフティの日下部です。

CoreOS Alpha 494.0.0 のパブリックイメージをリリースしました。

coreos-wordmark-horiz-color

CoreOS というのは、 CoreOS, Inc が開発している、Docker を動かすことに特化した Linux ディストリビューションです。
現状では、リリースできた CoreOS 自体が Alpha であることと、 open-vm-tools を利用しているため、「ニフティクラウドユーザーブログライター」名義で公開しました。
Stable と Bata がリリースできていない理由は、下方の CoreOS のパブリックイメージ作成の経緯 で説明しています。

※ニフティクラウドでは、VMware Tools の削除、および同一機能を有するモジュールの追加を禁止しています。 参考:http://cloud.nifty.com/service/rule.htm

使い方

左メニューのイメージから、パブリックをクリックし、サイト上部の検索欄に「CoreOS」と入力すると、CoreOS Alpha 494.0.0 のイメージが表示されますので、ここから作成することができます。

coreos-public-image

また、CoreOS では、ネットワークの設定やユーザーの設定、 systemd の設定を cloud-config にて設定しますが、起動時スクリプトとして、 cloud-config の内容を入力できます。
例えば、Docker を起動しておくには下記のような cloud-config を入力します。

#cloud-config

coreos:
  units:
    - name: docker.service
      command: start

cloud-config は、 /var/lib/coreos-niftycloud/user-data に保存され、起動時に読み込まれます。
デフォルトでは、 nameserver も設定していないので、下記のようにすると良いかもしれません。 デフォルトで、下記のような設定が入っているため、ネットワーク周りを修正したい場合は、user-data で修正してください。(2014/12/15追記)

#cloud-config

coreos:
  units:
    - name: oem-ens192.network
      content: |
        [Match]
        Name=ens192

        [Network]
        DHCP=v4
        DNS=8.8.8.8
        DNS=8.8.4.4

cloud-config について、詳しくは CoreOS 公式のドキュメント をご参照ください。

作成が完了したら、 SSH でログインします。

ssh core@xxx.xxx.xxx.xxx -i hoge.pem

バージョンは、 /etc/os-release で確認します。

core@localhost ~ $ cat /etc/os-release
NAME=CoreOS
ID=coreos
VERSION=494.0.0+2014-11-10-0124
VERSION_ID=494.0.0
BUILD_ID=2014-11-10-0124
PRETTY_NAME="CoreOS 494.0.0+2014-11-10-0124"
ANSI_COLOR="1;32"
HOME_URL="https://coreos.com/"
BUG_REPORT_URL="https://github.com/coreos/bugs/issues"

先ほどの cloud-config を入力していた場合、下記のように Docker が起動した状態になります。

core@localhost ~ $ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib64/systemd/system/docker.service; disabled)
   Active: active (running) since Mon 2014-11-10 09:00:50 UTC; 22min ago
     Docs: http://docs.docker.io
  Process: 582 ExecStartPre=/bin/mount --make-rprivate / (code=exited, status=0/SUCCESS)
 Main PID: 583 (docker)
   CGroup: /system.slice/docker.service
           └─583 /usr/bin/docker --daemon --storage-driver=btrfs --host=fd://

Nov 10 09:00:50 localhost systemd[1]: Started Docker Application Container Engine.
Nov 10 09:00:50 localhost docker[583]: 2014/11/10 09:00:50 docker daemon: 1.3.0 c78088f; execdri...trfs
Nov 10 09:00:50 localhost docker[583]: [e02b33ed] +job serveapi(fd://)
Nov 10 09:00:50 localhost docker[583]: [info] Listening for HTTP on fd ()
Nov 10 09:00:50 localhost docker[583]: [e02b33ed] +job init_networkdriver()
Nov 10 09:00:51 localhost docker[583]: [e02b33ed] -job init_networkdriver() = OK (0)
Nov 10 09:00:51 localhost docker[583]: [info] Loading containers:
Nov 10 09:00:51 localhost docker[583]: [info] : done.
Nov 10 09:00:51 localhost docker[583]: [e02b33ed] +job acceptconnections()
Nov 10 09:00:51 localhost docker[583]: [e02b33ed] -job acceptconnections() = OK (0)
Hint: Some lines were ellipsized, use -l to show in full.

簡単ですが、使い方は以上です。
何か不具合などありましたら、このブログにコメントするか、 @higebu までご連絡ください。

CoreOS のパブリックイメージ作成の経緯

まず、 CoreOS に VMware Tools を追加することができず、リリースが遅くなってしまいました。
実際に試していただくとわかると思うのですが、 CoreOS にはパッケージをインストールできないのと、公式の VMware Tools が systemd に対応していないのが原因です。
open-vm-tools であれば、 systemd に対応しているため、 CoreOS 自体のビルド時に入れることが可能で、 CoreOS 471.1.0 から、 VMware 環境用のイメージに open-vm-tools が入るようになっています。
ちなみに私はこの open-vm-tools 対応に少しだけ貢献しています。

coreos-overlay-open-vm-tools

CoreOS の開発者の方のリポジトリにプルリクエストしたため、わかりにくい取り込まれ方をしていますが、パッチのヘッダーに私の名前が書いてあります。

他には、ニフティクラウドの初期化スクリプトを改修し、 coreos-cloudinit に対応しています。
この辺りのソースは下記のリポジトリに置いてありますので、興味のある方はご参照いただければと思います。

https://github.com/higebu/coreos-overlay/tree/niftycloud/
https://github.com/higebu/scripts/tree/niftycloud/

また、ビルドの仕方についても機会があれば、どこかに公開したいと思います。

今後の話

現状のニフティクラウドでは open-vm-tools は NG ということになっているので、 OK にして、公式イメージにしたいと思っています。 また、 Stable と Beta のチャンネルのバージョンでは、まだ open-vm-tools が入っていないため、ニフティクラウド上では動かせませんが、入り次第対応します。 さらに、今回ニフティクラウド用に足した部分を本家リポジトリにマージしていただいたり、 CoreOS のオフィシャルプラットフォーム になったりできると良いですね。