December 9, 2015

PackerとESXiでPhotonのOVFを作る

これは、HashiCorp Advent Calendar 2015の9日目の記事です。

Packerって何というのは説明しませんので、公式ページを読んでください。

Packer 0.8.7からvmware-iso builderでESXiを利用したときに、OVFを作ることができるようになるので、その紹介です。

この機能をマージしてもらえるまでに1年くらいかかってしまい、その間にgovmomiがリリースされているので、いつかgovmomiを使った実装に書き換えたいと思っています。

とても簡単に説明するとvmware-isobuilderにformatというオプションが追加されるので、template.jsonに"format": "ovf"と書くとOVFがエクスポートされるようになるというものです。

元々は、作ったVMがunregisterされ、データストアにVMXとVMDKだけ残るという仕様で、後からどうやって使うのかという状態でした。

この記事ではESXiのVagrant boxを作って、それを使ってOVFをビルドする手順になっていますが、ご自宅にESXiが入っているサーバがある方はそれでビルドしてみてください。

ただ、個人的にはESXiのVagrant boxを作っておくとノートPCの上などで手軽にESXiで遊べるのでおすすめです。

以下、環境とビルドの方法です。

環境

  • Host OS: Ubuntu 14.04
  • VMware Workstation 11.1.3
    • Fusionでもいいはずです。
  • Packer 0.8.7.dev (77d9a89d1b3eef84a64edf7ca18b49c3ae5847c7)
    • まだ0.8.7がリリースされていないので、masterブランチからビルドしてください。
  • ESXi 6.0 u1 3029758
    • my vmware からVMware-VMvisor-Installer-6.0.0.update01-3029758.x86_64.isoをダウンロードしてください。
  • Vagrant 1.7.4
    • 公式ページからダウンロードしてインストールしてください。
  • vagrant-vmware-workstation 3.2.6
    • 有償なのでVMware providerのページから購入してインストールしてください。。。
  • vagrant-esxi 0.0.1
    • vagrant plugin install vagrant-esxi
    • ESXiのVagrant boxを使うために入れます。
  • vagrant-triggers 0.5.2
    • vagrant plugin install vagrant-triggers
    • vagrant uppacker buildまで走るようにするために入れます。
  • ovftool 4.1.0

ESXiのVagrant boxの作成

dougm/packer-esxiをフォークした、higebu/packer-esxiを使って作ります。

VMwareの@dougmさんのリポジトリは古くていろいろと躓くので、フォークして修正したものを使います。

まず、リポジトリをcloneしてesxi60ブランチをチェックアウトします。

git clone https://github.com/dougm/packer-esxi.git
git checkout esxi60

ビルドします。

packer build template.json

できあがったboxをインポートします。

vagrant box add --name esxi vmware_esxi60.box

これで、ESXiをvagrant upで起動できるようになります。

VagrantでESXiを起動してPackerでOVFをビルド

では、上記で作成したESXiのboxを使ってOVFをビルドします。

higebu/packer-esxi-exampleをcloneしてから、vagrant upします。

git clone https://github.com/higebu/packer-esxi-example.git
cd packer-esxi-example
vagrant up

いつものvagrant upのログの後にpacker buildのログも流れるのが見えると思います。

エラーになってしまった場合、template.jsonの<wait10>の数が足りないところがあるかもしれません。

中身を見るとわかるのですが、これはVMware社がOSSとして公開している、PhotonのVMをビルドするテンプレートです。 Photonにはkickstartのような仕組みがないため、GUIのインストーラに対してコマンドを流しているからです。

最後に

ポイントは最初にも書きましたが、template.jsonにformatというオプションを追加することです。

ovfovavmxに対応しています。

Packerはとても便利なのですが、まじめに使っていると機能が足りなかったり動かなかったりすることも多いので、みんなでどんどんプルリクしていきましょう。

© Yuya Kusakabe 2011-2022

Powered by Hugo & Kiss.