gpt4 book ai didi

vagrant - 为什么 Packer provisioner 更改没有显示在 Vagrant box 中,即使它们被报告为成功?

转载 作者:行者123 更新时间:2023-12-04 16:07:56 27 4
gpt4 key购买 nike

我觉得我快要疯了。我正在尝试使用 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 "创建目录,该死的"

我在 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:出于故障排除目的,我尝试删除 vagrant 后处理器,只保留 VMware 和 VBox 图像而不转换为 Vagrant boxes。我启动了其中的每一个,然后我使用 Packer 进行的配置显示在那里。 这意味着问题发生在转换为 Vagrant box 期间或之后的某个地方,因为 VMware 和 VBox 非 Vagrant 图像都有所需的更改。希望这有助于缩小问题范围。

最佳答案

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

这仍然是相关的,“灵感”的另一个很好的 repo 是 https://github.com/chef/bento

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

检查新框的输出路径。然后运行这样的东西:

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

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

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

关于vagrant - 为什么 Packer provisioner 更改没有显示在 Vagrant box 中,即使它们被报告为成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48028073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com