从 ISO 文件构建 Vagrant 盒子非常复杂。 您需要知道引导顺序和预种子。 这两个都很难读。
有时,我们只需要从现有的 Vagrant 盒子中构建一个盒子。 如果 Packer 有一个预处理器,它会在输入中接收一个 Vagrant 盒子,然后将其提供给“virtualbox-ovf”构建器,那就太好了。 或者,这可能是另一个构建器。
这将增加提供预构建的 Vagrant 盒子的能力,然后将其重新打包为 Vagrant 盒子。
理想情况下,输入中的 Vagrant 框可以取自本地上下文或 URL(例如来自 http://www.vagrantbox.es/ 的框)。
是否有意义?
+1
对于 Virtualbox,您目前可以通过下载 .box、提取其内容(它们只是 tarball,可选地 gzip 压缩)然后将 virtualbox-ovf 构建器的 source_path 指向从压缩包。
我同意尽管在不需要上述解决方法的情况下在 Packer 中实际支持 Vagrant 框将非常有用。
+1。 这将消除以下工作流程中的许多摩擦:获取现有的 Vagrant 盒子,更新内容,并更新已部署的盒子,以便其他用户可以受益。
+1。 拥有肯定会很方便。
+1
+1 - 我也在寻找那个功能 - 只是想对现有的基本盒子做些小改动。
+1
同意@aseigneurin
+1
+1 正如@jorisvddonk 所建议的那样,对VirtualBox 盒子执行此操作似乎相当简单。 我的猜测是大多数想要这个的人无论如何都打算为 VirtualBox Vagrant 提供者做这件事。
+1 这会让我更容易,因为很多时候我只想拿一个盒子然后添加简单的东西,比如厨师等,而不是从 ISO 完全安装操作系统
+1
问题在于,Vagrant Box 不一定适用于 VirtualBox 提供程序,并且可能不包含 OVF/OVA 文件。 但是对于所有想要这个工作流程的人来说,这不是问题。
+1
+1
+1
跳过安装过程的能力会很棒。
+1
+1
+1
对预处理器的考虑将是使用哪种类型的 vagrant box 提供程序; 我猜最常见的两个是 VirtualBox 和 VMWare
+1 这应该发生
+1
我坐在这里等待 Windows 更新......这需要很长时间。
我知道我应该在非高峰期这样做,但有时你只需要建造一个新盒子。 如果我不必从安装中进行 Windows 更新,那就太好了。
+1
我开始将现有的 Vagrant 工作流程转换为 Packer,这样我们也可以构建 AMI。 我很惊讶地发现 Packer 不支持直接从 Atlas 上的虚拟机构建。 :(
:+1:
+1
我有一个从 ISO 构建的 FreeBSD vagrant 盒子,如果我可以将它用作其他使用 FreeBSD 作为基础的 Packer 生成的盒子的基本盒子,那么我可以有更好的构建时间。
+1
我可能需要看看手动编写脚本需要什么(我不知道任何 Go)。 基本上根据盒子规范,.box 中有一个 metadata.json 文件,它解释了它是为哪个提供者构建的,如果你试图将一个盒子“转换”到另一个提供者,这将允许你出错(肯定更难支持)。 这至少可以相当容易地支持 Virtualbox 和 VMware(桌面),我还没有玩过 Vagrant 中的 Docker 支持来看看他们的盒子是如何构建的。
@dragon788是的,这正是我想要做的。 是从默认的virtualbox
提供者转换为vmware_fusion
我已经这样转换了,有时最好简单地重建盒子,如果
可能的。 你必须做一些疯狂的技巧,比如将盒子导入
Virtualbox,将其导出为 ova/ovf 但使用 OLD 0.9 版本,然后
使用 VMware OVF Tool 将其转换为 VMware(您必须
告诉它忽略警告),然后将其导入 VMware,如果您
幸运的是,您可以使用该 VMDK 并将其输入 Packer 以构建一个
新的“盒子”。
2015 年 7 月 8 日星期三凌晨 1:50,Brendan Thompson [email protected]
写道:
@dragon788 https://github.com/dragon788是的,这正是
我想做。 是从默认的virtualbox provider转换为
vmware_fusion—
直接回复此邮件或在 GitHub 上查看
https://github.com/mitchellh/packer/issues/869#issuecomment -119459486。
大家好,
我创建了几个工具来管理盒子,主要是从存储库下载盒子并将其用作 Packer 的起点。 此下载脚本允许您解压缩盒子,然后使用盒子内的 .ovf 文件作为您正在生成的 Packer 图像的起点。
在https://github.com/amontalban/vagrant-tools看看它,让我知道你的想法。
谢谢!
+1。 今天我从基础盒 + 我的配置构建我的盒子。 我用 vagrant up && halt && 包来做到这一点。 如果转到打包程序,我可以保留我的工作流程(我想要一个用于 docker、vbox ++ 的统一打包程序构建/模板)
+1
+1
+1
+1 - 我不知道这怎么不存在。 似乎是一个非常明显的用例。
+1
+1
+1 出于上述所有原因,它将允许人们逐步构建类似于 docker 模型。
+1 这将是一个巨大的帮助,特别是考虑到Canonical 提供的云图像中的 OVA/OVF 不能被 VirtualBox 读取(至少对于 Trusty LTS),因此不能被 Packer 和 Vagrant 使用。 已知问题:#1726
但是,从他们提供的 Vagrant 框中提取的 OVF/VMDK 是可用的。
Packer 用于下载和提取 Vagrant 框(或更一般地说:下载和提取 TAR)的预处理器将使我们能够缩小这一差距。
+1我以为这已经存在了。
+1
+1
如果 Hashicorp 的某个人可以对此发表评论,我会非常感兴趣。 我的意思是,这是值得思考的事情吗? 感觉很奇怪,这还不可用,而且近两年来没有任何“官方”评论过这个问题......
+1
+1这也是我工作流程中缺少的一步。 我想使用 CoreOS AMI 和 CoreOS .box 并让 Packer 为两者发起配置。 无法处理 .box 是一个痛点,需要在 Packer 之前返回一个丑陋的脚本才能将 .ovm 从 .box 中取出。
我假设 Hashi 没有人看过这个,因为它超出了 ISO 和 OVF 驱动程序的范围,并且需要第三个驱动程序,它实际上是特定于 vagrant 的。
但是,Hashi 为什么要支持他们自己的产品之间的互操作呢?
我也不知道 Go,但我们都是开发人员,所以让我们解决这个问题。
我想我们需要克隆 OVF 驱动程序,然后在导入步骤之前:
https://github.com/mitchellh/packer/blob/master/builder/virtualbox/ovf/builder.go#L76
您将在 ISO 驱动程序中集成类似于 DownloadStep 的内容:
https://github.com/mitchellh/packer/blob/master/builder/virtualbox/iso/builder.go#L230
您还需要在 ISO 驱动程序中进行更高级别的检查:
https://github.com/mitchellh/packer/blob/master/builder/virtualbox/iso/builder.go#L162
这很容易,但您还需要:
其实仔细看,也没那么难。 我只是不知道如何在 Go 中做到这一点。
+1
+1
+1
+1
+1
+1
+1
+1
在潮流中...+1
+1
+1
对于那些请求此功能的人,您是否打算转换
一个现有的 VirtualBox(或 VMware)盒子到一个更新的 VirtualBox(或
VMware)盒子,或者您打算从 VirtualBox 盒子转换为
VMware 盒子,反之亦然?
2015 年 12 月 1 日下午 2:04,“Atha Kouroussis” [email protected]写道:
+1
—
直接回复此邮件或在 GitHub 上查看
https://github.com/mitchellh/packer/issues/869#issuecomment -161079965。
我正在尝试使用现有的盒子作为其他盒子的基础。 对从 Virtualbox 转换到 VMware 不感兴趣。 目前通过保留基本盒子构建中的工件来解决这个问题,但并不理想。
我正在寻找的是能够在以前构建的 VirtualBox 盒子的基础上创建新的 VirtualBox 盒子。
使用 Amazon AMI,我可以让打包程序定义 A 从基本 Ubuntu AMI 作为源映像开始,然后打包程序定义 B 从 A 中的 AMI 构建开始,然后定义 C 从构建 B 中的 AMI 开始。
使用 VirtualBox(在仅支持基于 ISO 的构建的 Atlas 中)我必须从 A、B 和 C 的基本 Ubuntu ISO 映像开始。即 B 不能将 A 生成的 Virtualbox 框用作“源框”。
+1
目前,我们可以指定本地 vagrant box 文件的路径到 packer builder source_path
。
例如:
{
"type": "virtualbox-ovf",
"source_path": "/Users/xxx/.vagrant.d/boxes/bento-VAGRANTSLASH-centos-6.7/2.2.2/virtualbox/box.ovf",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"headless": true,
"shutdown_command": "echo 'packer' | sudo -S shutdown -P now"
}
+1
+1
+1
+1
我想使用 common/genericbento/centos-7.2 作为我的打包模板的起点。 或者,一旦我在 atlas 中有一个私人 vagrant,最好使用最后一个作为后续打包器构建的源。 作为我的供应商是幂等的,没有理由每次都从 ISO 构建盒子。
+1
目前我们可以指定本地vagrant box文件的路径到packer builder source_path。
这对于本地构建非常有效。
+1
+1
+1 有人在做这个吗? 如果没有,您是否在征求捐款?
随着 Packer 中即将推出的本地/主机 shell 命令,这将是微不足道的。
2016 年 3 月 2 日下午 12:33,“Ashish Tonse” [email protected]写道:
+1 有人在做这个吗? 如果没有,您是否在征求捐款?
—
直接回复此邮件或在 GitHub 上查看
https://github.com/mitchellh/packer/issues/869#issuecomment -191362198。
我也想知道,可以在 Packer 中使用预制盒子来继续构建 Vagrant 盒子吗?
:+1: 实现它。 也因为,它会大大加快这个过程。
至于“本地/主机外壳命令”,难道不能有类似的东西吗?
"builders": [
{
"type": "vagrantbox",
"sourcebox": "hashicorp/precise64",
"virtualization": "Virtualbox"
}
]
让 Packer 用 Atlas、Vagrant 和 Virtualbox 完成剩下的工作?
不太确定虚拟化位,如果 Packer 不能自己判断什么是可用的,但我希望你明白要点。 :微笑:
斯科特
斯科特,小提示,json 键名中不能有空格。 如果你有一个
将 .box(实际上只是一个 .tar 文件)解压缩到一个
目录结构,您可以对其进行解析和引用以进行将来的构建。
这是本地 shell 命令派上用场的地方,否则你
在 Packer 进行提取之前需要一个额外的阶段。
2016 年 3 月 5 日星期六凌晨 2:28,Scott [email protected]写道:
我也想知道,可以在 Packer 中使用预制的盒子来继续
建立一个流浪者盒子?[image: :+1:] 实现它。 也是因为,它会加速
过程相当大。至于“本地/主机外壳命令”,难道不能只拥有
就像是“建设者”:[
{
"type": "vagrantbox",
“源框”:“hashicorp/precise64”
“虚拟化”:“虚拟盒子”
}让 Packer 用 Atlas、Vagrant 和 Virtualbox 完成剩下的工作?
不太确定虚拟化位,如果 Packer 不知道是什么
可以单独使用,但我希望你能明白要点。 [图片::微笑:]斯科特
—
直接回复此邮件或在 GitHub 上查看
https://github.com/mitchellh/packer/issues/869#issuecomment -192607673。
已更正! 哈哈!
看起来 Packer 本身应该足够“聪明”来进行拆包、提取或其他任何必要的操作。
斯科特
+1
+1
+1
+1
+1
+1
+1 这将使生活更轻松!
+1 需要这个。
+1 - 这将极大地帮助加快构建速度
+1 会很有帮助
+1 超级有用,但即使有解决方法,也要发表一篇关于如何获得准确无业游民框图像的文章
+1 会很有帮助
+1
从 vmware_basebox -> vmware_extra_provisioning 框开始。 从打包机做这一切会很棒。 我为 iOS 构建使用 OS X 图像,并且重新打包是您经常做的事情以节省时间。
+1
这将不胜感激。
+1
嗨 HashiCorp 开发人员! 有没有机会让这一切顺利进行? 这个问题已经开放这么久了!
我发现了一个更好的系统。 码头工人! 再见 Hashicorp。
斯科特
Vagrant 也做 Docker,所以你不需要离开 . ;)
2016 年 9 月 13 日上午 7:36,“Scott” [email protected]写道:
我发现了一个更好的系统。 码头工人! 再见 Hashicorp。
斯科特
—
你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/mitchellh/packer/issues/869#issuecomment -246667118,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAdxXvgJ_ek2tvfiHWdtJFYA3vfckH6iks5qppi8gaJpZM4BeIMi
.
你在开玩笑吧? 编辑:我现在使用 Docker for Windows。 永远不会回头。 对不起。
斯科特
+1
希望看到此功能已添加 +1
这正是我目前所缺少的,所以+1
+1 - 还想非常感谢 Hashicorp 免费为我提供如此有用的工具。 惊人
+1 解决方法真的很脆弱。
+1
:100:
:+1:
+1
特别是尝试复制尽可能接近一些具有完整虚拟化VM而不是可能使用不同内核的容器的云提供商映像会很方便。
+1
我很惊讶这不是一件事。 可能是时候破解一些 Go 语言了
我破解了一个适合我的自定义生成器packer-builder-vagrant
。 它只是找到现有的 vagrant box(或尝试下载它)并在构建器定义中更新source_path
。 与打包机 0.12 + vagrant 1.9.0 + VirtualBox 5.1.8 一起工作正常(尝试了 mac 和 windows)。 它需要您稍微更新您的打包程序模板。 自述文件应该给你一个提示它是如何工作的。 随意尝试。
+1
+1
+1
这按照打包程序 0.12.2 的建议工作。 这是我正在使用的构建器配置
"builders": [
{
"type": "virtualbox-ovf",
"source_path": "{{user
ovf_path }}",
"headless": true,
"boot_wait": "2m",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"ssh_wait_timeout": "6h",
"shutdown_command": "shutdown /s /t 10 /f /d p:4:1 /c \"Packer Shutdown\"",
"floppy_files": [
"{{user
"builders": [
{
"type": "virtualbox-ovf",
"source_path": "{{user
无人参与}}",
"scripts/microsoft-updates.bat",
"scripts/win-updates.ps1",
"scripts/openssh.ps1"
]
},
"variables": {
"ovf_path": "./vbox/box.ovf",
"autounattend": "answer_files/2012_r2/Autounattend.xml"
}
使用来自https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box的解压框不适用于我的 packer/virtualbox。 它总是在“初始化非阻塞池”之后挂起。 有人有同样的问题吗?
澄清一下,使用带有 vagrant 的盒子可以正常工作。
@sebastianreloaded尝试添加串行设备。 您可能还需要将第一个 NIC 类型更改为 NAT:
"vboxmanage": [
[ "modifyvm", "{{ .Name }}", "--uart1", "0x3F8", "4" ],
[ "modifyvm", "{{ .Name }}", "--uartmode1", "disconnected" ],
[ "modifyvm", "{{ .Name }}", "--nic1", "nat" ]
]
无论如何,我建议坚持使用便当盒,因为在您成功启动后,您必须解决登录问题(ubuntu 对其默认的“ubuntu”用户使用随机密码,并且正在从一个版本更改为另一个版本)和谁知道还有什么。 在与 ubuntu 图像打了 2 天之后,我就这样放弃了。
@themalkolm非常感谢您尝试解决此问题。 不幸的是,您的解决方案高度针对 VirtualBox 提供程序,并且不支持构建器中的变量之类的东西。
很明显,许多人对 Hashicorp 技术不支持 Vagrant box 范围内的 Hashicorp 格式感到惊讶。 与其他人一样,我也有兴趣支持类似于 AMI builder 的管道,以使用现有图像并对其进行修改。
大多数人不希望每次都只添加一些小组件(例如软件版本凸点)来构建基础盒。 当您只想更改整体的一个子集时,它会强制将工作流锁定到 _golden image_ 模式,在这种模式下,您可以得到全部或一无所有。 这最终增加了实现_不可变生产_的摩擦。
+1
此功能将使 Vagrant 和 Packer 的交叉使用更好!
这是一个使用 vagrant box 作为 virtualbox builder 源的 bash 脚本:
build.sh
#!/bin/bash
set -e
vagrant box add --provider virtualbox ubuntu/xenial64 2> /dev/null || true
BOX_VERSION="$(ls -1 ~/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64 | grep ^20 | sort -r | head -1)"
BOX_FOLDER="$(realpath ~/.vagrant.d/boxes/ubuntu-VAGRANTSLASH-xenial64/${BOX_VERSION}/virtualbox)"
BOX_CHECKSUM="$(sed -n 's/.*ovf.*= \(.*\)/\1/p' ${BOX_FOLDER}/ubuntu-xenial-16.04-cloudimg.mf)"
BOX_BASE_MAC="$(sed -n 's/.*base_mac = "\(.*\)"/\1/p' ${BOX_FOLDER}/Vagrantfile)"
packer build \
-var "box_folder=${BOX_FOLDER}" \
-var "box_checksum=${BOX_CHECKSUM}" \
-var "box_base_mac=${BOX_BASE_MAC}" \
"template.json"
template.json
{
"builders": [
{
"type": "virtualbox-ovf",
"source_path": "{{ user `box_folder` }}/box.ovf",
"checksum": "{{ user `box_checksum` }}",
"checksum_type": "sha256",
"guest_additions_mode": "disable",
"headless": true,
"ssh_pty": true,
"ssh_username": "vagrant",
"ssh_private_key_file": "~/.vagrant.d/insecure_private_key",
"shutdown_command": "sudo shutdown -P now",
"output_directory": "/tmp/packer_output",
"target_path": "/tmp/packer_cache",
"skip_export": true,
"vboxmanage": [
[ "modifyvm", "{{ .Name }}", "--ostype", "Ubuntu_64" ],
[ "modifyvm", "{{ .Name }}", "--cpus", "2" ],
[ "modifyvm", "{{ .Name }}", "--memory", "2048" ],
[ "modifyvm", "{{ .Name }}", "--vrde", "off" ],
[ "modifyvm", "{{ .Name }}", "--nic1", "nat" ],
[ "modifyvm", "{{ .Name }}", "--uart1", "0x3F8", "4" ],
[ "modifyvm", "{{ .Name }}", "--uartmode1", "file", "/tmp/packer_output/console.log" ],
[ "modifyvm", "{{ .Name }}", "--macaddress1", "{{ user `box_base_mac` }}" ]
]
}
],
"provisioners": [
{
"type": "shell",
"inline": ["echo foo"]
}
]
}
+1
+1 用于介绍此功能。 会简化很多工作。
+1
+1
+1
我已经 +1 了这个请求。
但是在此功能可用之前, @davidkarlsen 的建议有什么问题?
即使用现有的流浪功能:
这种方法有什么问题吗?
@lqueryvg您可能想查看最近启动的 WSO2 的产品 Vagrant box 存储库 [1]。 在此存储库中,已使用您指出的方法。
在为 WSO2 产品构建 Vagrant 盒子时,我们遇到了这里讨论的相同问题,我们提出了相同的解决方案。 然而,希望这一功能能尽快推出。
+1
+1
+1 @KFoxder
@cornfeedhobo ,你说@themalkolm的解决方案不支持变量是什么意思?
他在测试中使用变量,一切看起来都很好。
+1
+1
问题首次公开 5 年后,让我也投一个 +1。
我已经为 virtualbox-ovf 构建器和 vmware-ovf 实现了一个集成,但我并不热衷于它增加代码的复杂性,我认为这作为一个独立的构建器会更好——所以接下来我将与 Vagrant 团队一起工作。
一旦我有一些工作,我希望志愿者来测试构建。
一旦我有一些工作,我希望志愿者来测试构建。
我是游戏
也愿意在进行中进行测试,随时联系我
我在这里创建
到目前为止,由于一些硬编码,它仅适用于 OSX(我已将二进制文件附加到该 PR),但我打算明天修复 linux 和 windows 的路径。
我喜欢一些测试和反馈。 文档更改包含在 PR 中,PR 评论中有一个使用示例。
vagrant builder 现在可以使用 Windows 和 linux 构建。
为此+1。 还表达了通过libvirt
而不仅仅是 VirtualBox 和 VMware 工作的需要/希望。
@sudomateo新的 vagrant 构建器将直接调用 vagrant,而不是要求用户设置底层构建器; 您将有机会设置适合您需求的任何流浪者提供者。
打包程序构建 \ -var "box_folder=${BOX_FOLDER}" \ -var "box_checksum=${BOX_CHECKSUM}" \ -var "box_password=${BOX_PASSWORD}" \ -var "box_base_mac=${BOX_BASE_MAC}" \ "模板。 json"
由于这仍然是开放的,因为我只想拿官方的流浪者盒子,执行一些 ansible 剧本,然后创建一个新的流浪者盒子或个人用途......
@Adezandee您是否有更新版本,因为我刚刚尝试使用 packer v1.3.4 并得到这个;
Failed to parse template: 14 error(s) occurred:
* Unknown root level key in template: 'checksum'
* Unknown root level key in template: 'checksum_type'
* Unknown root level key in template: 'guest_additions_mode'
* Unknown root level key in template: 'headless'
* Unknown root level key in template: 'output_directory'
* Unknown root level key in template: 'shutdown_command'
* Unknown root level key in template: 'skip_export'
* Unknown root level key in template: 'source_path'
* Unknown root level key in template: 'ssh_password'
* Unknown root level key in template: 'ssh_pty'
* Unknown root level key in template: 'ssh_username'
* Unknown root level key in template: 'target_path'
* Unknown root level key in template: 'type'
* Unknown root level key in template: 'vboxmanage'
@nhojpatrick我的原始评论是部分
@nhojpatrick合并#7221 时将添加功能:)
我要锁定这个问题,因为它已经关闭了_30天_⏳。 这有助于我们的维护人员发现并专注于活跃的问题。
如果您发现了与此类似的问题,请打开一个新问题并完成问题模板,以便我们获取进一步调查所需的所有详细信息。
最有用的评论
我破解了一个适合我的自定义生成器
packer-builder-vagrant
。 它只是找到现有的 vagrant box(或尝试下载它)并在构建器定义中更新source_path
。 与打包机 0.12 + vagrant 1.9.0 + VirtualBox 5.1.8 一起工作正常(尝试了 mac 和 windows)。 它需要您稍微更新您的打包程序模板。 自述文件应该给你一个提示它是如何工作的。 随意尝试。https://github.com/themalkolm/packer-builder-vagrant。