OVA(VMX)化Vagrant box
Vagrant是一款针对本地虚拟机的管理工具,使用起来非常方便。然而,虽然Vagrant是基于OVF与VMDK格式标准,但Vagrant box却并不是合法的OVF压缩包,而且本身也没有声明对VMWare的支持,所以,我们不能够直接将Vagrant box直接导入到VMWare产品如Fusion里面。但是,Vagrant box与VMWare VMX的鸿沟也并非那么大,我们可以通过修改Vagrant box的OVF描述文件以及压缩打包方式,将Vagrant box转为OVA或者VMX格式的压缩文件。
Vagrant box不是合法的OVF压缩包,主要的问题在于Vagrant box中文件的顺序不符合OVF压缩包(OVF Archive)规范。OVF压缩包对文件顺序的要求是:OVF必须是第一个,然后是虚拟机镜像文件(如VMDK),接着是MF文件,再接下来是其他的可选文件(如证书、I18N等)。但是,Vagrant box里面的顺序则是VMDK、MF、OVF、Vagrantfile,如下图。

我们可以用OVF工具去验证一下Vagrant box,比如VMWare的ovftool会提示如下的错误信息:
![]()
既然知道了问题的原因,那解决起来就好办多了。我们只需要将Vagrant box重新按照一定的顺序压缩即可。比如,我们可以直接用tar,如下图:

当然,我们也可以使用VMWare的ovftool来实现同样的目的:
ovftool box.ovf lucid32.ova
这样,我们就解决了Vagrant box不是合法OVF压缩包的问题。然而,通过上图可以看到,虽然Vagrant box里面是VMDK文件,而且VMDK同时被VirtualBox和VMWare支持,但是由于Vagrant box在box.ovf的Family里面只声明了virtualbox-2.2,故而也没有办法被VMWare打开。我们也可以使用VMWare的ovftool验证一番:

因此,为了Vagrant box也能够在VMWare里面打开和配置,我们需要修改Vagrant box里面box.ovf的一些配置,增加对VMWare的支持,并将其中一些VirtualBox特定的配置修改为VMWare兼容的。
为此,笔者开发了一个vagrant插件叫vagrant-ovf,可以很方便、自动地修改box.ovf以及box.mf(因为每次修改了box.ovf,都需要重新计算box.ovf文件的SHA1值)。
- 为了使用该插件,首先安装vagrant-ovf,如
gem install vagrant-ovf。 - 然后,通过
vagrant ovf [boxname]就会修改指定Vagrant box里面的box.ovf以及box.mf,使之增加对VMWare的支持。 - 接着,我们可以通过上面的步骤将Vagrant box重新压缩为OVF压缩包,例如lucid32.ova

- 最后,我们可以用ovftool将刚才得到的lucid32.ova再转化为VMX文件,
ovftool lucid32.ova lucid32.vmx
这样,我们刚才得到的OVF压缩包就转化为VMWare Fusion可以直接打开、导入的VMX文件。进一步,我们可以借助于VMWare提供的vapprun做一些深入的自动化工作。
[...] 基本上,Vagrant的box文件是一个OVF压缩包(为什么说基本上呢?大家可以移步我的这篇博文,这里不深入探究)。OVF(Open Virtualization Format,开放虚拟化格式)是由HP、VMWare、XenSource等公司或团体组成的DMTF(Distributed Management Task Force)组织提出的虚拟化格式标准,于2008年9月发布v1.0,截至本文为止的最新版本是v1.1.0。OVF描述了虚拟机打包与分发的各种配置和扩展点,其目的在于提供一种开放、安全、可移植和可扩展的格式,而不需要依赖于特定的超管理程序(hypervisor)或者处理器架构。目前,OVF已经被业界广泛接受,主要的虚拟化厂商与组织,如VMWare、IBM或者VirtualBox都已经提供了支持。OVF的详细格式可参阅OVF规范,这里不多做分析。 [...]
Vagrant初窥(二) at 知行
22 Mar 12 at 12:03 pm