前回の記事「IDCFクラウド対応CoreOSテンプレートをリリース」で、IDCFクラウド対応CoreOSテンプレートのリリースと基本的な使い方を紹介いたしました。
今回は、IDCFクラウド対応(VMwareとCloudStackに対応)CoreOSテンプレートの作成手順を紹介します。CoreOSテンプレートのカスタマイズ方法のヒントになればと思います。
以下、CoreOSの公式ドキュメントを参考に実際の手順を解説します。
1. VMDKの編集ができるLinux環境の準備
本手順の後半で仮想ハードディスクファイル(VMDKファイル)のマウントやサイズ変更などを行うので、事前にVMDKの編集ができるLinux環境を準備します。
1-1. VDDK for vSphere 5.5のインストール
VMDKを編集するためのツールとして、「** Virtual Disk Development Kit (VDDK)**」が公開されています。VDDKの利用条件として、64ビットOSが必要なので、64ビット版のLinuxサーバーを事前に用意します。VMware社のDeveloper Centerサイトから、VDDKの最新版(執筆時点での最新版は5.5.2)をLinuxサーバーにダウンロードします。なお、ダウンロードのためにはMy VMwareへの登録が必要となります。
次に、ダウンロードしたパッケージを展開、インストールしていきます。
# tar xvzf VMware-vix-disklib-*.tar.gz (*はバージョン番号)
# cd vmware-vix-disklib-distrib
# ./vmware-install.pl
(VDDKインストールウィザードが開始される)
インストールが完了したら、のちに利用することになるコマンドへのパスが通っているか確認します。
# which vmware-mount
/usr/bin/vmware-mount
# which vmware-vdiskmanager
/usr/bin/vmware-vdiskmanager
1-2. OVF Toolのインストール
IDCFクラウドのテンプレートとして登録するためにはOVA形式でUploadする必要があります。VMDKからOVAファイルを作成するために、OVF Toolをインストールします。
まずOVF Tool配布サイトからLinux 64bit向けのインストールファイルをダウンロードします。ダウンロード後、以下のようにしてインストールを行います。ここではVersion 3.5.0を例にコマンド例を記載します。
# chmod 755 VMware-ovftool-3.5.0-1274719-lin.x86_64.bundle
# ./VMware-ovftool-3.5.0-1274719-lin.x86_64.bundle
(インストールが行われる)
# which ovftool
/usr/bin/ovftool
以上で環境準備が整いました。
2. CoreOS本家のビルド済み仮想マシンイメージの取得
CoreOS開発元では、各種IaaS向けのビルド済み仮想マシンイメージを配布しています。IDCFクラウドはHypervisorとしてVMware ESXiを利用しているので、以下のファイル名のファイルを下記の配布先からダウンロードします。
** ダウンロードするファイル **
- coreos_production_vmware.vmx
- coreos_production_vmware_image.vmdk.bz2
** 配布サイト **
- alpha版 http://alpha.release.core-os.net/amd64-usr/(バージョン)
- beta版 http://beta.release.core-os.net/amd64-usr/(バージョン)
- stable版 http://stable.release.core-os.net/amd64-usr/(バージョン)
配布サイトの最新情報はCoreOSドキュメントのページをご確認ください。
ダウンロードしたファイルはハッシュを念のため確認し、その後vmdkファイルを展開します。
# bunzip2 coreos_production_vmware_image.vmdk.bz2
3. CloudStack対応OEMスクリプトの追加
3-1. CloudStack対応OEMスクリプトのダウンロード
CloudStackのUser DataやSSH Key取得のためのスクリプトはGitHubのこちらの場所に公開されています。 これらのファイルすべてをLinuxサーバー上にダウンロードします。ファイルの役割は以下の通りです。
ファイル名 | 役割 |
---|---|
cloud-config.yml | CoreOS起動時にCloudStack対応スクリプトを実行するための設定ファイル |
cloudstack-coreos-cloudinit | CloudStackのUser Dataからcloud-config.ymlを取得して設定を実行するスクリプト |
cloudstack-dhcp | User Dataなどの取得先IP(DHCPサーバーのIP)を取得するスクリプト |
cloudstack-ssh-key | DHCPサーバーからCloudStackで設定されたSSHキーを取得し、coreユーザーのキーとして設定するスクリプト |
coreos-setup-environment | CoreOSのEnvironment変数(/etc/environment)を設定するスクリプト |
3-2. CoreOSのVMDKイメージへのOEMスクリプト追加
まず、CoreOSのイメージをLoopback Mountします。VMDKの保存先に合わせて/path/to/vmdk/
は適切に変更してください。
# vmware-mount /path/to/vmdk/coreos_production_vmware_image.vmdk 6 /mnt
重要なポイントは、OEMスクリプトを保存する場所はVMDKファイルの中の6番目のパーティション(CoreOS上では/usr/share/oem
)であるという点です。
次に、マウントしたディレクトリの下にファイルを適切に配置します。CloudStack対応スクリプトの保存先に合わせて/path/to/script/
は適切に変更してください。
# cp /path/to/script/cloudstack-* /mnt/bin/
# chmod 755 /mnt/bin/cloudstack-*
# cp /path/to/script/coreos-setup-environment /mnt/bin/
# chmod 755 /mnt/bin/coreos-setup-environment
設置したスクリプトをOS起動時に実行するよう、/mnt/cloud-config.yml
の内容にCloudStack用cloud-config.ymlの内容を追記します。追記結果については、次のNTP設定の結果と合わせて後程記載します。
3-3. IDCFクラウド用のNTP設定追加
IDCFクラウドではNTPサーバーも提供しているので、NTP参照先を変更します。そのために、write_files:セクションを/mnt/cloud-config.yml
に追記して/etc/ntp.conf
を作成するようにします。また、coreos>unitsセクションでNTPサービスを再起動するようにします。
また、TimeZoneをJSTに変更するためにcoreos>units配下にTimeZone設定コマンドを実行するよう記述します。
ここまでの手順をすべて行った結果、/mnt/cloud-config.ymlは以下の通りとなります。
#cloud-config
coreos:
units:
- name: settimezone.service
command: start
content: |
[Unit]
Description=Set the timezone
[Service]
ExecStart=/usr/bin/timedatectl set-timezone Asia/Tokyo
RemainAfterExit=yes
Type=oneshot
- name: vmtoolsd.service
command: start
content: |
[Unit]
Description=VMware Tools Agent
Documentation=http://open-vm-tools.sourceforge.net/
ConditionVirtualization=vmware
[Service]
ExecStartPre=/usr/bin/ln -sfT /usr/share/oem/vmware-tools /etc/vmware-tools
ExecStart=/usr/share/oem/bin/vmtoolsd
TimeoutStopSec=5
- name: cloudstack-ssh-key.service
command: restart
runtime: yes
content: |
[Unit]
Description=Sets SSH key from metadata
[Service]
Type=oneshot
StandardOutput=journal+console
ExecStart=/usr/share/oem/bin/cloudstack-ssh-key
- name: cloudstack-cloudinit.service
command: restart
runtime: yes
content: |
[Unit]
Description=Cloudinit from CloudStack-style metadata
Requires=coreos-setup-environment.service
After=coreos-setup-environment.service
[Service]
Type=oneshot
EnvironmentFile=/etc/environment
ExecStart=/usr/share/oem/bin/cloudstack-coreos-cloudinit
- name: ntpd.service
command: restart
oem:
id: cloudstack
name: CloudStack
version-id: 0.1
home-url: http://cloudstack.apache.org/
bug-report-url: https://github.com/coreos/coreos-overlay
write_files:
- path: /etc/ntp.conf
content: |
tinker panic 0
# Common pool
server -4 ntp1.noah.idc.jp burst iburst
server -4 ntp2.noah.idc.jp burst iburst
# - Allow only time queries, at a limited rate.
# - Allow all local queries (IPv4, IPv6)
restrict default ignore
restrict -6 default ignore
restrict 127.0.0.1
restrict ::1
restrict ntp1.noah.idc.jp nomodify notrap noquery
restrict ntp2.noah.idc.jp nomodify notrap noquery
3-4. VMDKファイルの編集完了
VMDKの編集が完了したら、アンマウントとロック解除を行います。
# umount /mnt
# df
(/mntがマウントされていないことを確認)
# vmware-mount /path/to/vmdk/coreos_production_vmware_image.vmdk -d
(VMDKへのロックを解除)
4. VMDKサイズ拡張とOVAテンプレート化
VMDKサイズはダウンロード当初は約8GB程度に設定されています。これをIDCFクラウド標準テンプレートのサイズである15GBに拡張します。
# vmware-vdiskmanager -x 15GB /path/to/vmdk/coreos_production_vmware_image.vmdk
Grow: 100% done.
Disk expansion completed successfully.
WARNING: If the virtual disk is partitioned, you must use a third-party
utility in the virtual machine to expand the size of the
partitions. For more information, see:
http://www.vmware.com/support/kb/enduser/std_adp.php?p_faqid=1647
次に、OVA形式に変換するため、ovftoolコマンドを実行します。/path/to/ova/
はOVA保存先パスに適宜読み替えてください。
# ovftool coreos_production_vmware.vmx /path/to/ova/CoreOS_494.1.0_beta_64-bit.ova
Opening VMX source: coreos_production_vmware.vmx
Opening OVA target: /path/to/ova/CoreOS_494.1.0_beta_64-bit.ova
Writing OVA package: /path/to/ova/CoreOS_494.1.0_beta_64-bit.ova
Transfer Completed
Completed successfully
以上でOVAテンプレートファイルが完成しました。あとはIDCFクラウドのTemplateアップロード手順に従ってテンプレートの登録を行うことで、利用が可能になります。
今回、弊社提供CoreOSテンプレートの作成手順を解説しましたが、上記の手順を使えば、自分好みのカスタマイズも可能になります。ぜひお試しください。
<関連記事>