前回予告したとおり、今回は Open Service Container の OVA パッケージを作成してみたいと思います。
最初にパッケージに必要なコンテンツを確認しておきましょう。パッケージには以下の4つのファイルが必要になります。
- YAML 形式のパッケージ定義ファイル
- ディスク イメージ
- マニフェスト ファイル
- バージョン ファイル
パッケージ作成のための環境(いわゆる母艦)には、CentOS7.1 を使いました。
パッケージ作成の準備 – ディスク イメージの作成
パッケージ作成の前に、ディスク イメージを用意します。
今回は、Ubuntu 14.04 の 64 bit Cloud Image を使いたいと思います。以下のサイトからQCOW2形式のイメージをダウンロードします。
https://cloud-images.ubuntu.com/trusty/current/
Cloud Image はインストール時に Cloud Init によりメタデータ サービスで初期化することを想定しているので、そのままではパスワード ログインができません。
そこで、母艦に仮想化ツール群をインストールしておきます。
$ sudo yum install qemu libvirt-client virt-manager virt-viewer guestfish libguestfs-tools virt-top
virt-sysprep を使って Cloud Image の root パスワードを上書きします。virt-sysprep の前に環境編集の設定が必要になります。
$ export LIBGUESTFS_BACKEND=direct
$ virt-sysprep –root-password password:root -a ubuntu-14.04-server-cloudimg-amd64-disk1.img
[ 0.0] Examining the guest …
[ 8.0] Performing “abrt-data” …
[ 8.0] Performing “bash-history” …
[ 8.0] Performing “blkid-tab” …
[ 8.0] Performing “crash-data” …
[ 8.0] Performing “cron-spool” …
[ 8.0] Performing “dhcp-client-state” …
[ 8.0] Performing “dhcp-server-state” …
[ 8.0] Performing “dovecot-data” …
[ 8.0] Performing “logfiles” …
[ 8.0] Performing “machine-id” …
[ 8.0] Performing “mail-spool” …
[ 8.0] Performing “net-hostname” …
[ 8.0] Performing “net-hwaddr” …
[ 8.0] Performing “pacct-log” …
[ 8.0] Performing “package-manager-cache” …
[ 8.0] Performing “pam-data” …
[ 8.0] Performing “puppet-data-log” …
[ 8.0] Performing “rh-subscription-manager” …
[ 8.0] Performing “rhn-systemid” …
[ 8.0] Performing “rpm-db” …
[ 8.0] Performing “samba-db-log” …
[ 8.0] Performing “script” …
[ 8.0] Performing “smolt-uuid” …
[ 8.0] Performing “ssh-hostkeys” …
[ 8.0] Performing “ssh-userdir” …
[ 8.0] Performing “sssd-db-log” …
[ 8.0] Performing “tmp-files” …
[ 8.0] Performing “udev-persistent-net” …
[ 8.0] Performing “utmp” …
[ 8.0] Performing “yum-uuid” …
[ 8.0] Performing “customize” …
[ 8.0] Setting a random seed
[ 8.0] Setting passwords
[ 9.0] Performing “lvm-uuids” …
ディスク容量の拡張
Cloud Image はそのままだとディスク容量が 2GB ちょっとしかありません。必須ではないですが、便宜のため 4GB に拡大しておきます。
まずはイメージを確認しておきます。フォーマットは QCOW2 形式のフォーマット仕様が 0.10 であることがわかります。
$ qemu-img info ubuntu-14.04-server-cloudimg-amd64-disk1.img
image: ubuntu-14.04-server-cloudimg-amd64-disk1.img
file format: qcow2
virtual size: 2.2G (2361393152 bytes)
disk size: 249M
cluster_size: 65536
Format specific information:
compat: 0.10
パーティションは /dev/sda1 の1つで、2GB です。
$ virt-filesystems –long –parts –blkdevs -h -a ubuntu-14.04-server-cloudimg-amd64-disk1.img
Name Type MBR Size Parent
/dev/sda1 partition 83 2.0G /dev/sda
/dev/sda device – 2.2G –
QCOW2 形式の 4GB のイメージを用意します。このとき、フォーマット仕様を必ず 0.10 にしてください。
$ qemu-img create -f qcow2 -o compat=0.10 ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img 4G
Formatting ‘ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img’, fmt=qcow2 size=4294967296 compat=’0.10′ encryption=off cluster_size=65536 lazy_refcounts=off
元のイメージをベースに、新しく作成し 4GB のイメージにリサイズします。拡張するパーティションは /dev/sda1 です。
$ virt-resize –expand /dev/sda1 ubuntu-14.04-server-cloudimg-amd64-disk1.img ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img
Examining ubuntu-14.04-server-cloudimg-amd64-disk1.img …
100% ?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa? 00:00
**********
Summary of changes:
/dev/sda1: This partition will be resized from 2.0G to 4.0G. The
filesystem ext4 on /dev/sda1 will be expanded using the ‘resize2fs’
method.
**********
Setting up initial partition table on ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img …
Copying /dev/sda1 …
100% ?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa? 00:00
100% ?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa? 00:00
Expanding /dev/sda1 using the ‘resize2fs’ method …
Resize operation completed with no errors. Before deleting the old disk,
carefully check that the resized disk boots and works correctly.
念のために、新しく作成したイメージを確認します。
$ qemu-img info ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img
image: ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img
file format: qcow2
virtual size: 4.0G (4294967296 bytes)
disk size: 1.2G
cluster_size: 65536
Format specific information:
compat: 0.10
$ virt-filesystems –long –parts –blkdevs -h -a ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img
Name Type MBR Size Parent
/dev/sda1 partition 83 4.0G /dev/sda
/dev/sda device – 4.0G –
うまく、4GB に拡張できました。
OVA パッケージの作成
さて、OVA パッケージの作成です。以下のようなパッケージ定義ファイル(package.yaml)とバージョンファイル(version.ver)を用意します。
package.yaml
manifest-version: 1.0
info:
name: ubuntu-trusty
description: “Ubuntu 14.04”
version: 1.0
app:
# Indicate app type (vm, paas, lxc etc.,)
apptype: vm
resources:
cpu: 50
memory: 2048000
vcpu: 1
disk:
– target-dev: hdc
file: ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img
interfaces:
– target-dev: net1
serial:
– console
– aux
# Specify runtime and startup
startup:
runtime: kvm
boot-dev: hd
version.ver
1.0
以上の 3つのファイルからマニフェスト ファイルを作成します。
$ openssl sha1 ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img package.yaml version.ver > ubuntu.mf
最後のこれらを TAR でアーカイブします。拡張子は ova です。
$ tar cvf ubuntu-trusty64.ova ubuntu-14.04-server-cloudimg-amd64-disk1-4gb.img package.yaml version.ver ubuntu.mf
以上の作業で、Open Service Container にインストール可能な OVA パッケージができました。
前回紹介した方法で、インストール、アクティベートすると、以下のようになります。
CSR1KV#show virtual-service
Virtual Service Global State and Virtualization Limits:
Infrastructure version : 1.7
Total virtual services installed : 1
Total virtual services activated : 1
Machine types supported : KVM, LXC
Machine types disabled : none
Maximum VCPUs per virtual service : 1
Resource virtualization limits:
Name Quota Committed Available
————————————————————–
system CPU (%) 75 50 25
memory (MB) 2048 2000 48
bootflash (MB) 20000 2819 2599
次回は、何かそれっぽいアプリケーションを動かしてみたいと思います ヽ(゚∀゚)ノ