![删除 proxmox 模板的 ubuntu-minimal-cloudimg 中的 /etc/machine-id](https://linux22.com/image/206397/%E5%88%A0%E9%99%A4%20proxmox%20%E6%A8%A1%E6%9D%BF%E7%9A%84%20ubuntu-minimal-cloudimg%20%E4%B8%AD%E7%9A%84%20%2Fetc%2Fmachine-id.png)
我正在尝试为我的 Ubuntu VM 制作一个模板,主要是按照 Techno Tim 的说明进行操作这里。我与 Tim 的不同之处在于我还想安装 qemu-guest-agent,这样我就可以获取虚拟机的 IP,而无需手动安装。我在使用命令导入 .img 之前执行此操作virt-customize -a focal-minimal-cloudimg-amd64.img --install qemu-guest-agent
。但不幸的是,这对我设置机器 ID 有利,而我不希望在我的模板中设置该机器 ID。现在,我也可以virt-customize -a focal-minimal-cloudimg-amd64.img --delete /etc/machine-id
在 /var/lib/dbus/machine-id 中运行,它可以完成任务并将其删除。但不幸的是,在从该虚拟机启动任何新虚拟机期间,系统启动时会出现许多错误,因为 machine-id 不存在,并且由于某种原因 /etc 被挂载为只读。有没有什么办法解决这一问题?
我可以通过 virt-customize 来解决这个问题,而不是使用 virt-customize 进行删除,而是通过 virt-customize 放入一个首次启动脚本,该脚本会删除并重新生成机器 ID,并重新启动以使其生效,但这似乎不太理想方法来做到这一点。有没有更好的办法?
答案1
不要删除/etc/machine-id
。相反,使用类似 的命令截断它truncate -s 0 /etc/machine-id /var/lib/dbus/machine-id
。machine-id
如果删除该文件,则不会创建该文件,但如果该文件为空,则会填充新值。
链接
实际上,/etc/machine-id 必须至少存在(空也可以)才能重新生成它——然后 systemd 将在 /run 中的临时位置创建一个新的,将 /etc/machine-id 绑定挂载到它,然后 systemd-machine-id-commit.service 会在 fs 变为读写后将其写入 /etc/machine-id