为什么 Packer 配置器更改即使报告成功也不会显示在"Vagrant box"中?



我觉得我快疯了。我正在嘗試使用 Packer 從 CentOS 7 ISO 創建一個 Vagrant VirtualBox 映像。更具体地说,我正在运行virtualbox-iso生成器并使用 Vagrant 后处理器。根据packer build操作的输出,我的配置器都在工作,但是当我使用 Vagrant 打开盒子时,我的配置更改都没有显示。例如,我正在使用文件配置器将文件上传到/home/vagrant 目录。在我看来,这很简单。

"provisioners": [
{
"type": "file",
"source": "files/file",
"destination": "/home/vagrant/file"
}
...

Packer不会抛出任何错误,并且通过所有迹象表明,文件上传成功。下面是来自 Packer 跟踪的消息,指示文件已上传。

==> virtualbox-iso: Uploading files/file => /home/vagrant/file

然而,当我在 Vagrant 中打开盒子并 SSH 输入时,文件不在那里。我的脚本也是如此 - Packer 指示它们正在运行,我什至使用&&shell 脚本添加了打印调试语句,以验证命令是否已成功执行,例如:

mkdir -p /home/vagrant/folder1 && echo "Made the directory, dammit"

我在packer build跟踪中看到我的echo语句,但在登录时仍然没有在/home/vagrant 中。我觉得我错过了一些明显的东西...有人知道问题可能是什么吗?

编辑:这是VBox图像的模板。我也在构建一个 VMware 映像,但我没有在这里包含该映像。

"builders": [
{
"type": "virtualbox-iso",
"boot_command": [
"<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ks.cfg<enter><wait>"
],
"boot_wait": "10s",
"disk_size": 81920,
"guest_os_type": "RedHat_64",
"headless": true,
"http_directory": "http",
"iso_urls": [
"CentOS-7-x86_64-Minimal-1708.iso",
"http://mirrors.ocf.berkeley.edu/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso"
],
"iso_checksum_type": "sha256",
"iso_checksum": "bba314624956961a2ea31dd460cd860a77911c1e0a56e4820a12b9c5dad363f5",
"ssh_username": "vagrant",
"ssh_password": "vagrant",
"ssh_port": 22,
"ssh_wait_timeout": "10000s",
"shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p",
"guest_additions_path": "VBoxGuestAdditions_{{.Version}}.iso",
"virtualbox_version_file": ".vbox_version",
"vm_name": "packer-centos-7-x86_64",
"vboxmanage": [
[
"modifyvm",
"{{.Name}}",
"--memory",
"1024"
],
[
"modifyvm",
"{{.Name}}",
"--cpus",
"2"
]
]
},
...

运行packer build后,我正在运行vagrant up virtualbox这是我的Vagrantfile中定义的VM名称:

# VirtualBox.
# `vagrant up virtualbox --provider=virtualbox`
config.vm.define "virtualbox" do |virtualbox|
virtualbox.vm.hostname = "virtualbox-centos7"
virtualbox.vm.box = "file://builds/virtualbox-centos7.box"
virtualbox.vm.network :private_network, ip: "172.16.3.2"
config.vm.provider :virtualbox do |v|
v.gui = false
v.memory = 1024
v.cpus = 1
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--ioapic", "on"]
end
config.vm.provision "shell", inline: "echo Hello, World"
end

我正在 GitHub 上的以下存储库工作(我意识到它可能有点过时):https://github.com/geerlingguy/packer-centos-7

但是,我正在尝试调整示例以满足我自己的需求。

编辑2:出于故障排除目的,我尝试删除流浪后处理器,只保留VMware和VBox映像而不转换为流浪者框。我启动了其中的每一个,我使用 Packer 所做的配置都显示在那里。这意味着问题发生在转换为Vagrant盒子期间或之后的某个地方,因为VMware和VBox非Vagrant映像都具有所需的更改。希望这有助于缩小范围。

https://github.com/geerlingguy/packer-centos-7

这仍然是相关的,另一个很好的"灵感"回购是 https://github.com/chef/bento

但是,听起来您可能没有在本地更新流浪者的盒子。 尝试重新添加您的流浪后处理器并运行您的打包程序构建。

检查新框的输出路径。然后运行如下操作:

vagrant box add --force --name {your vagrant box name} {path to your new .box file}

然后,当您vagrant initvagrant up时,您应该使用新框。

或者,如果您的打包程序构建使用的是 vagrant 云后处理器,请确保您正在递增您的版本,以便 vagrant 客户端可以检测到该盒子的更新版本。

正如 Flo 评论的那样 - 您需要明确"删除"流浪者框,以便通过vagrant up获取对框的更改:

vagrant remove ./my_nice_vagrant_box.box

相关内容

  • 没有找到相关文章

最新更新