从预下载的 vagrant box 创建 Packer Image
Creating Packer Image from Pre-downloaded vagrant box
我为 vagrant 下载了一个 Ubuntu 64 Trust vagrant box 并启动它,它工作正常。
vagrant box add /local/path/to/downloaded/box.box
vagrant init
vagrant up
vagrant ssh
我确保在从 Vagrant 文件本身启动时使用脚本更新系统、创建用户、启用端口转发、生成 ssh 密钥、安装依赖项等。它还将一个烧瓶和 postgres 网络应用程序从我的本地环境复制到 vagrant 机器中,以便在 apache 上成为 运行,并且一切正常。最后使用以下方式手动打包盒子:
vagrant package --base box-name
这时候我才知道Packer。 (脸掌)
我了解到您可以将整个过程自动化。所以现在,我有我的烧瓶和 Postgres 网络应用程序,以及一个预下载的 vagrant box。我已经阅读了文档,而且我对编写打包程序模板、配置它们、设置构建器等相当满意。这太棒了。
但是所有示例和文档都与下载 Ubuntu ISO、根据模板配置它以及将其转换为可用于 Amazon、Digital Ocean 的平台可部署映像有关,Google、azure 等等,最后使用 post-process 将其变成一个 vagrant box。
他们没有谈论使用预下载的 vagrant box 来做同样的事情。我的问题是,是否可以使用预下载的 vagrant box 和 packer 为 amazon、azure 等支持的平台创建机器映像?
如果可以,我该怎么办?
您不能将现有的 vagrant box 作为打包器构建器的输入。随着新版本的加壳器添加了许多新的构建器,因此您可以从现有的 virtual VM, for amazon you can have input as existing EBS drive, existing amazon instance, or amazon chroot etc etc .. you should check the packer builder doc
构建新的加壳器映像
正如 Frédéric 所提到的,可以使用 virtualbox-ovf/vmware-vmx 构建器将现有 VM 作为 Packer 的输入,运行 配置,然后输出一个新框。对于您的用例,您可以使用这些构建器之一并将 source_path
变量设置为与您要从中开始的框关联的 ovf/vmx 文件。
例如,如果您添加 official Ubuntu Trusty box 使用:
vagrant box add ubuntu/trusty64
您最终应该得到一个 ovf 文件,您可以在以下位置的 virtualbox-ovf 构建器的 source_path 变量中使用该文件:
$HOME/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-trusty64/20160908.0.0/virtualbox/box.ovf
备注:
- 我们将上述过程与 vmware-vmx 构建器一起使用,但我还没有使用 virtualbox-ovf 构建器进行测试。我的理解是它们的工作原理相似。
- 以上示例使用的是来自 Atlas 的官方 box,但您应该能够在
~/.vagrant.d/boxes/
下为您已经下载的任何本地 box 找到类似的目录结构
- ovf 的路径会在发布新盒子时发生变化,但根据需要编写脚本或手动更新新版本的路径应该不难。
我为 vagrant 下载了一个 Ubuntu 64 Trust vagrant box 并启动它,它工作正常。
vagrant box add /local/path/to/downloaded/box.box
vagrant init
vagrant up
vagrant ssh
我确保在从 Vagrant 文件本身启动时使用脚本更新系统、创建用户、启用端口转发、生成 ssh 密钥、安装依赖项等。它还将一个烧瓶和 postgres 网络应用程序从我的本地环境复制到 vagrant 机器中,以便在 apache 上成为 运行,并且一切正常。最后使用以下方式手动打包盒子:
vagrant package --base box-name
这时候我才知道Packer。 (脸掌)
我了解到您可以将整个过程自动化。所以现在,我有我的烧瓶和 Postgres 网络应用程序,以及一个预下载的 vagrant box。我已经阅读了文档,而且我对编写打包程序模板、配置它们、设置构建器等相当满意。这太棒了。
但是所有示例和文档都与下载 Ubuntu ISO、根据模板配置它以及将其转换为可用于 Amazon、Digital Ocean 的平台可部署映像有关,Google、azure 等等,最后使用 post-process 将其变成一个 vagrant box。
他们没有谈论使用预下载的 vagrant box 来做同样的事情。我的问题是,是否可以使用预下载的 vagrant box 和 packer 为 amazon、azure 等支持的平台创建机器映像?
如果可以,我该怎么办?
您不能将现有的 vagrant box 作为打包器构建器的输入。随着新版本的加壳器添加了许多新的构建器,因此您可以从现有的 virtual VM, for amazon you can have input as existing EBS drive, existing amazon instance, or amazon chroot etc etc .. you should check the packer builder doc
构建新的加壳器映像正如 Frédéric 所提到的,可以使用 virtualbox-ovf/vmware-vmx 构建器将现有 VM 作为 Packer 的输入,运行 配置,然后输出一个新框。对于您的用例,您可以使用这些构建器之一并将 source_path
变量设置为与您要从中开始的框关联的 ovf/vmx 文件。
例如,如果您添加 official Ubuntu Trusty box 使用:
vagrant box add ubuntu/trusty64
您最终应该得到一个 ovf 文件,您可以在以下位置的 virtualbox-ovf 构建器的 source_path 变量中使用该文件:
$HOME/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-trusty64/20160908.0.0/virtualbox/box.ovf
备注:
- 我们将上述过程与 vmware-vmx 构建器一起使用,但我还没有使用 virtualbox-ovf 构建器进行测试。我的理解是它们的工作原理相似。
- 以上示例使用的是来自 Atlas 的官方 box,但您应该能够在
~/.vagrant.d/boxes/
下为您已经下载的任何本地 box 找到类似的目录结构 - ovf 的路径会在发布新盒子时发生变化,但根据需要编写脚本或手动更新新版本的路径应该不难。