Categories: Cisco IOS

Open Service Container の OVA パッケージを作成する

前回予告したとおり、今回は Open Service Container の OVA パッケージを作成してみたいと思います。

最初にパッケージに必要なコンテンツを確認しておきましょう。パッケージには以下の4つのファイルが必要になります。

  1. YAML 形式のパッケージ定義ファイル
  2. ディスク イメージ
  3. マニフェスト ファイル
  4. バージョン ファイル

パッケージ作成のための環境(いわゆる母艦)には、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

次回は、何かそれっぽいアプリケーションを動かしてみたいと思います ヽ(゚∀゚)ノ

 

佐藤 哲大

2001年、シスコシステムズ株式会社(当時)に新卒として入社。官公庁、製造担当のハイタッチ SE を経て、ルータ系の技術支援、ソリューション開発に従事。SDN 応用技術室の開設に伴い、2013年4月から現職。

(趣味と実益を兼ねて)日夜、プログラミングや OSS と戯れ中。