Packer 脚本可以更改从 ISO 构建的输出映像吗?

Can a Packer script change an output image built from an ISO?

我正在尝试使用 Packer build a Vagrant box from an ISO, using a boot2docker ISO。一切顺利,直到我尝试 运行 vagrant up,失败并返回 "Error: Authentication failure. Retrying..."。这个盒子没问题 - 我可以通过提供密码来使用 vagrant ssh 。但是ssh认证不起作用。

事实证明,这是一个 known solution 的已知问题 - 将 public 键添加到框上的 .ssh/authorized_keys。如果我在使用密码访问该框后手动执行此操作,则以后访问时不需要密码。所以我更新了我的 Packer 脚本来做到这一点 - 发现对引导卷所做的更改被丢弃而没有效果。 Packer 脚本对其他卷的更改有效,但对引导卷无效,而引导卷是我需要更新的。看起来它只能是 ISO 的映像。

创建自己的 ISO 并预装 public 密钥是我唯一的选择吗?有什么办法可以用Packer把key应用到output box上吗?

这是一个老问题,但由于没有答案,我会做出贡献。

我遇到了同样的问题;无论我在 Kickstart 或配置程序脚本中做了什么更改,我对 vagrant 用户 authorized_keys 的更改在 Packer 构建的最终框中是不可见的。直到我意识到 Vagrant 一直在使用我的 Vagrant box 的缓存(和更旧!)版本而不是最新版本。

原因是盒子被 Vagrant 复制了一次 "my-box",即使盒子本身在我测试修复时发生变化,Vagrant 仍然使用没有我修复的旧盒子,因为它缓存它,并且不经常检查更新。最简单的解决方案是添加

config.vm.box_check_update = true

到你的 Vagrantfile。或者,你可以让你的 Vagrantfile 每次在 config.vm.box 中通过一些 Ruby 代码给你的盒子一个不同的名字。