PackerでOVA作成シリーズです。
Part9で構築したNested VT-x VMware Player
を動かしているWindows VMware Player
上のUbuntu 14.04 Desktop amd64
にログインします。
今回の目的は、LinuxのVMware Player
に、VIXとVDDKを別途ダウンロードすることにより、
PackerでOVAを作成するときに必要なVMware Workstation
と同等のコマンドを使えるようにすることです。
VMware Playerの初期設定
VMware Player
を起動して、SoftwareupdateとVMwareToolsダウンロードしておきます。
初回起動時に、VMwarePlayerがダイアログを出すのでに二度目以降は表示しないチェックを入れます。
Player Preference
- Close Behavior -> Confirm before closing a virtual machineにアンチェック
- Software Updates -> Check for product updates on start upにアンチェック
- Software Updates -> Check for software components as neededにアンチェック
VIX SDK for Linux 64-bit
VIX SDK for Linux 64-bitをダウンロードします。
今回のバージョンは1.13.2です。
インストールするとvmrunコマンドが使えるようになります。
$ sudo bash VMware-VIX-1.13.2-1744117.x86_64.bundle $ which vmrun /usr/bin/vmrun
|
VDDK SDK for Linux
VDDK SDK for LinuxのダウンロードにはVMwareアカウントが必要なのでログインします。
バージョンは5.5.0です。
$ cd ~/Downloads $ tar zxvf VMware-vix-disklib-5.5.0-1284542.x86_64.tar.gz $ cd vmware-vix-disklib-distrib/
|
Perlのインストーラーを実行します。
$ sudo ./vmware-install.pl
|
Packer環境
Goなのでさっと構築します。
$ cd ~/Downloads $ wget https://dl.bintray.com/mitchellh/packer/0.6.0_linux_amd64.zip $ unzip 0.6.0_linux_amd64.zip -d ~/bin $ source ~/.profile
|
バージョンは0.6.0です。
$ packer version Packer v0.6.0
|
Goの開発環境
PackerのProcessorをビルドするため、Goの開発環境を構築します。最低限マルチプレクサとvimを使えるようにします。
$ sudo sed -i~ -e 's/archive.ubuntu.com/ftp.jaist.ac.jp/' /etc/apt/sources.list $ sudo apt-get update $ sudo apt-get install byobu
|
/usr/bin/vim.basicを選択します。
$ sudo apt-get install vim $ sudo update-alternatives --config editor
|
Goのビルドに必要な、いつものセットです。
$ sudo apt-get install golang git mercurial $ echo export GOPATH=$HOME/gocode >> ~/.profile $ echo export PATH=$PATH:$GOPATH/bin >> ~/.profile $ source ~/.profile
|
packer-post-processor-ovftool のインストール
Packerでovftoolを使いOVAを作成するpost-processorのpacker-post-processor-ovftoolをgo install
します。
$ go get github.com/iancmcc/packer-post-processor-ovftool $ go install github.com/iancmcc/packer-post-processor-ovftool
|
~/.packerconfigにインストール設定を記述します。
~/.packerconfig{ "post-processors": { "ovftool": "packer-post-processor-ovftool" } }
|
ESXi4用OVAの作成プロジェクト
プロジェクトを作成します。
$ mkdir -p ~/packer_apps/ubuntu1404 $ cd !$ $ mkdir http scripts
|
template.jsonを作成します。今回はESXi4を使っているIDCFクラウド用のOVAを作成するため、
vmx_dataに"virtualHW.version": "7"
を指定します。あとISOは日本のミラーからダウンロードするようにしました。
./template.json{ "builders": [ { "type": "vmware-iso", "boot_command": [ "<esc><wait>", "<esc><wait>", "<enter><wait>", "/install/vmlinuz<wait>", " auto<wait>", " console-setup/ask_detect=false<wait>", " console-setup/layoutcode=us<wait>", " console-setup/modelcode=pc105<wait>", " debconf/frontend=noninteractive<wait>", " debian-installer=en_US<wait>", " fb=false<wait>", " initrd=/install/initrd.gz<wait>", " kbd-chooser/method=us<wait>", " keyboard-configuration/layout=USA<wait>", " keyboard-configuration/variant=USA<wait>", " locale=en_US<wait>", " netcfg/get_hostname=ubuntu-1404<wait>", " netcfg/get_domain=vagrantup.com<wait>", " noapic<wait>", " preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg<wait>", " -- <wait>", "<enter><wait>" ], "boot_wait": "30s", "disk_size": 4096, "guest_os_type": "ubuntu-64", "http_directory": "http", "iso_checksum": "01545fa976c8367b4f0d59169ac4866c", "iso_checksum_type": "md5", "iso_url": "http://ftp.jaist.ac.jp/pub/Linux/ubuntu-releases/trusty/ubuntu-14.04-server-amd64.iso", "ssh_username": "packer", "ssh_password": "packer", "ssh_port": 22, "ssh_wait_timeout": "1000s", "shutdown_command": "echo 'packer'|sudo -S shutdown -P now", "vmx_data": { "virtualHW.version": "7", "memsize": "512", "numvcpus": "1", "cpuid.coresPerSocket": "1" } } ], "provisioners": [ { "type": "shell", "execute_command": "echo 'packer' | {{ .Vars }} sudo -E -S sh '{{ .Path }}'", "override": { "vmware-iso": { "scripts": [ "scripts/base.sh", "scripts/cleanup.sh" ] } } } ], "post-processors": [{ "type": "ovftool", "only": ["vmware-iso"], "format": "ova" }] }
|
preseed.cfgはユーザー情報だけ変更しました。
./http/preseed.cfgchoose-mirror-bin mirror/http/proxy string d-i base-installer/kernel/override-image string linux-server d-i clock-setup/utc boolean true d-i clock-setup/utc-auto boolean true d-i finish-install/reboot_in_progress note d-i grub-installer/only_debian boolean true d-i grub-installer/with_other_os boolean true d-i partman-auto-lvm/guided_size string max d-i partman-auto/choose_recipe select atomic d-i partman-auto/method string lvm d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true d-i partman-lvm/device_remove_lvm boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i partman/confirm_write_new_label boolean true
# Default user d-i passwd/user-fullname string packer d-i passwd/username string packer d-i passwd/user-password password packer d-i passwd/user-password-again password packer d-i passwd/username string packer
# Minimum packages (see postinstall.sh) d-i pkgsel/include string openssh-server d-i pkgsel/install-language-support boolean false d-i pkgsel/update-policy select none d-i pkgsel/upgrade select none
d-i time/zone string UTC d-i user-setup/allow-password-weak boolean true d-i user-setup/encrypt-home boolean false tasksel tasksel/first multiselect standard, ubuntu-server
|
scriptsは2つだけです。
base.shでは、aptを日本のURLへの変更と、ユーザーのsudo設定をします。
./scripts/base.shsudo sed -i~ -e 's;http://us.archive.ubuntu.com/ubuntu;http://ftp.jaist.ac.jp/pub/Linux/ubuntu;' /etc/apt/sources.list sed -i -e '/Defaults\s\+env_reset/a Defaults\texempt_group=sudo' /etc/sudoers sed -i -e 's/%sudo ALL=(ALL:ALL) ALL/%sudo ALL=NOPASSWD:ALL/g' /etc/sudoers
|
cleanup.shではaptのクリーンだけしました。
./scripts/cleanup.shapt-get -y autoremove apt-get -y clean
|
packer build
ようやくpacker build
できます。その前に一応validateで構文チェックします。
$ packer validate template.json Template validated successfully. $ PACKER_LOG=1 packer build template.json
|
作成されたOVAを確認します。OVAファイルはtarで展開します。
$ tar xvf packer_vmware-iso_vmware.ova packer_vmware-iso_vmware.ovf packer_vmware-iso_vmware.mf packer_vmware-iso_vmware-disk1.vmdk
|
OVFのVirtualSystemTypeは指定したようにvmx-07になっています。
packer_vmware-iso_vmware.ovf<vssd:VirtualSystemType>vmx-07</vssd:VirtualSystemType>
|
マニフェストを削除してOVAの再パッケージ
ただしESXi4の場合、OVAにマニフェストがあるとプロビジョニングに失敗するので、
マニフェストを削除してOVAを作り直します。
$ mkdir -p ~/packer_apps/tmp $ cd ~/packer_apps $ mv packer_vmware-iso_vmware-disk1.vmdk tmp $ mv packer_vmware-iso_vmware-disk1.ovf tmp $ cd tmp $ tar cvf ../packer_vmware-iso_vmware_07_nomf.ova packer_vmware*
|
まとめ
もう何回目かわかりませんが、古いESXi4用のOVAをPackerで作成することができました。
次回はいよいよIDCFクラウドにプロビジョニングしても大丈夫そうです。