我觉得我快疯了。我正在嘗試使用 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 init
vagrant up
时,您应该使用新框。
或者,如果您的打包程序构建使用的是 vagrant 云后处理器,请确保您正在递增您的版本,以便 vagrant 客户端可以检测到该盒子的更新版本。
正如 Flo 评论的那样 - 您需要明确"删除"流浪者框,以便通过vagrant up
获取对框的更改:
vagrant remove ./my_nice_vagrant_box.box