この記事はQiitaで公開されていました
開発環境として、CoreOSをMac OS X+QEMUに導入したのでメモ書き。
情報
- QEMU stable 2.5.0
- CoreOS 835.13.0
QEMU
お手軽にHomebrewでインストールします。
$ brew install qemu
時間がかかるので、待ちましょう。
CoreOS
公式情報を参考にイメージを取得。
$ mkdir coreos $ cd coreos $ curl -O http://stable.release.core-os.net/amd64-usr/current/coreos_production_qemu.sh $ curl -O http://stable.release.core-os.net/amd64-usr/current/coreos_production_qemu_image.img.bz2 $ bzip2 -d coreos_production_qemu_image.img.bz2 $ chmod +x coreos_production_qemu.sh
上記は、シグネチャの検証をさぼってます。公式ドキュメントにあるように、gpgで検証した方がいいです。
起動スクリプトの修正
coreos_production_qemu.shはLinux前提になっているので、書き換えます。OS Xにはprocfsが無いので、CPUコア数を返す別のコマンドで代用します。
-VM_NCPUS="`grep -c ^processor /proc/cpuinfo`" +VM_NCPUS="`system_profiler SPHardwareDataType | awk '/Total Number of Cores/ { print $NF }'`"
同様に、KVMも無いので、KVMを使わないように設定します。
-SAFE_ARGS=0 +SAFE_ARGS=1
OS Xのmktempは、-tオプションの意味がLinuxとは異なるので、オプションを外してしまいましょう。
-CONFIG_DRIVE=$(mktemp -t -d coreos-configdrive.XXXXXXXXXX) +CONFIG_DRIVE=$(mktemp -d coreos-configdrive.XXXXXXXXXX)
これでcoreos_production_qemu.shを実行すると、
fsdev is not supported
といったエラーで実行できませんでした。これは9pを使って、ホストのリソースをCoreOSから参照できるようにするために必要です。CoreOSは、rootのパスワードが設定されていませんので、公開鍵を使ってSSH接続させるしかログインする方法がありませんが、9pが使えないので、公開鍵をCoreOSに渡すことができず、結局ログインできません。
どうしようかなと思いましたが、Config Driveとしてcloud-configファイルを含むisoイメージをマウントさせる方法で対応できました。
$ mkdir -p data/openstack/latest $ cat data/openstack/latest/user_data #cloud-config hostname: dev ssh_authorized_keys: - "ssh-rsa XXXXXXXXXX(SSH公開鍵の内容)" $ hdiutil makehybrid -iso -joliet -default-volume-name config-2 -o config.iso data
イメージができたら、起動スクリプトに設定します。
-CONFIG_IMAGE="" +CONFIG_IMAGE="config.iso" (snip) -set -- -drive if=virtio,file="${CONFIG_IMAGE}" "$@" +set -- -drive if=virtio,file="${CONFIG_IMAGE}",media=cdrom "$@"
ログイン
以下コマンドでログイン出来ます。
$ ssh -l core -p 2222 localhost
ホストからdockerを操作する
起動スクリプトで、ポートを解放します。
+DOCKER_PORT=2375 (snip) qemu-system-x86_64 \ -name "$VM_NAME" \ -m ${VM_MEMORY} \ -net nic,vlan=0,model=virtio \ - -net user,vlan=0,hostfwd=tcp::"${SSH_PORT}"-:22,hostname="${VM_NAME}" \ + -net user,vlan=0,hostfwd=tcp::"${SSH_PORT}"-:22,hostfwd=tcp::"${DOCKER_PORT}"-:2375,hostname="${VM_NAME}" \ "$@"
cloud-configファイルに以下を追加して、TCPで待ち受けるように変更します。
coreos: units: - name: docker.service command: start enable: true - name: docker-tcp.socket command: start enable: true content: | [Unit] Description=Docker Socket for the API [Socket] ListenStream=2375 BindIPv6Only=both Service=docker.service [Install] WantedBy=sockets.target
ディスク容量の追加
これで可能みたい。
$ qemu-img resize coreos_production_qemu_image.img +5G
または、不要なボリュームを削除しましょう。
docker volume rm $(docker volume ls -f 'dangling=true' -q)