このエントリーをはてなブックマークに追加

CoreOSのイメージ作成

CoreOSは自分でイメージを作成することもできます。自分でイメージを作成するとパスワードを設定したり、host側に事前にソフトウェアを入れたりと言ったことができます。(あまり利点が分かってない)

イメージ作成の具体的な手順は

https://coreos.com/docs/sdk-distributors/sdk/modifying-coreos/

に書かれているとおりです。今回はこれをそのままたどってみました。

作業内容

前提

イメージを作成に必要なマシンは、x86-64のLinuxであればディストリビューションは問いません。

その他に

  • git
  • curl

が必要です。が、だいたいのシステムには入っていますよね。

depot_toolsを入れる

CoreOSはrepoを使ってbuildします。これはAndroidで使っているものですね。depot_toolsをcloneしてきてPATHを通します。

% git clone
https://chromium.googlesource.com/chromium/tools/depot_tools.git
% export PATH="$PATH":`pwd`/depot_tools

SDK chrootを作成

% mkdir coreos; cd coreos
# .repoディレクトリを初期化します
% repo init -u https://github.com/coreos/manifest.git -g minilayout --repo-url \
https://chromium.googlesource.com/external/repo.git
# manifestで指定されたgit repoをすべて取得します (結構な時間がかかります)
% repo sync

イメージの作成

sdkをダウンロードしてきます。(sudoが必要です)

% ./chromite/bin/cros_sdk

これも結構な時間がかかりますが、しばらく待つと、こんな感じに出てきます。

cros_sdk:make_chroot: All set up.  To enter the chroot, run:
$ cros_sdk --enter

CAUTION: Do *NOT* rm -rf the chroot directory; if there are stale bind
mounts you may end up deleting your source tree too.  To unmount and
delete the chroot cleanly, use:
$ cros_sdk --delete

(cr) ((c15791e...)) r_rudi@hamspam ~/trunk/src/scripts $

"core"ユーザーのパスワードを設定するにはこう打ちます。(coreos/chroot/usr/lib64/crosutilsに入っています)

./set_shared_user_password.sh

このイメージのターゲットをamd64にするにはこうします。x86とかも指定できるようです。

echo amd64-usr > .default_board

board root ファイルシステムを /build/${BOARD} に設定するにはこう打ちます。

./setup_board

しばらくすると、こう出てきて完了します。

INFO    setup_board: Elapsed time (setup_board): 4m16s
INFO    setup_board: The SYSROOT is: /build/amd64-usr

バイナリパッケージをビルドをします。これも30分ぐらいかかります。

./build_packages
(省略)
>>> Using system located in ROOT tree /build/amd64-usr/

>>> No outdated packages were found on your system.
INFO    build_packages: Checking build root
INFO    build_packages: Builds complete
INFO    build_packages: Elapsed time (build_packages): 27m55s

終わったらdeveloper overlay(?あとで調べる)と一緒にバイナリパッケージを作成します。

./build_image --noenable_rootfs_verification dev

(省略)
2014/04/02 06:12:44 - generate_au_zip.py - INFO    : Generated
/mnt/host/source/src/build/images/amd64-usr/274.0.0+2014-04-02-0604-a1/au-generator.zip
COREOS_BUILD=274
COREOS_BRANCH=0
COREOS_PATCH=0
COREOS_SDK_VERSION=273.0.0
Done. Image(s) created in
/mnt/host/source/src/build/images/amd64-usr/274.0.0+2014-04-02-0604-a1
Developer image created as coreos_developer_image.bin
To convert it to a virtual machine image, use:
  ./image_to_vm.sh --from=../build/images/amd64-usr/274.0.0+2014-04-02-0604-a1 --board=amd64-usr
The default type is qemu, see ./image_to_vm.sh --help for other  options.

ここで出来たのはrawなbin imgなので、./image_to_vm.shで変換します。

./image_to_vm.sh --format virtualbox

(省略)
INFO    build_image: Elasr/274.0.0+2014-04-02-0604-a1
INFO    image_to_vm.sh:  - coreos_developer_virtualbox_image.vmdk
INFO    image_to_vm.sh:  - coreos_developer_virtualbox.ovf
INFO    image_to_vm.sh:  - coreos_developer_virtualbox.README
Copy coreos_developer_virtualbox_image.vmdk and
coreos_developer_virtualbox.ovf to a VirtualBox host and run:
VBoxManage import coreos_developer_virtualbox.ovf

なお、build_imageの最後に出てますが、defaultではqemuのimageが作られますが、今回のようにその他のイメージも作成できます。具体的には今のバージョンではこんな感じですね。vagrantやami、gceなどもできるみたいです。

  • ami
  • pxe
  • iso
  • openstack
  • qemu
  • qemu_no_kexec
  • rackspace
  • rackspace_vhd
  • vagrant
  • vagrant_vmware_fusion
  • virtualbox
  • vmware
  • vmware_insecure
  • xen
  • gce

今回はvirtualboxを選びましたので、coreos_developer_virtualbox_image.vmdkcoreos_developer_virtualbox.ovfというファイルが出来上がりました。

% cd ~/trunk/src/build/images/amd64-usr/274.0.0+2014-04-02-0604-a1
% ls -l
-rw-r--r-- 1 r_rudi r_rudi 7.7M  4  2 06:12 au-generator.zip
-rw-r--r-- 1 r_rudi r_rudi 2.9G  4  2 06:12 coreos_developer_image.bin
-rw-r--r-- 1 r_rudi r_rudi  160  4  2 06:27 coreos_developer_virtualbox.README
-rw-r--r-- 1 r_rudi r_rudi  11K  4  2 06:27 coreos_developer_virtualbox.ovf
-rw-r--r-- 1 r_rudi r_rudi 471M  4  2 06:27 coreos_developer_virtualbox_image.vmdk
drwxr-xr-x 2 root   root   4.0K  4  2 06:04 rootfs
-rw-r--r-- 1 r_rudi r_rudi   75  4  2 06:12 version.txt

これは、ホスト側ではcoreos/src/build/images/amd64-usr/274.0.0+2014-04-02-0604-a1に当たります。

これをvirtualboxで起動すればOKです。ユーザー名core、パスワードは先ほど自分で設定したパスワードでログインできます。

まとめ

実はまだちゃんとCoreOSを使ったわけではないのですが、最初のimageを作成するところから始めてみました。

build scriptがきちんと整備されており、詰まるところはまったくありませんでした。