我一直在研究 Andrew Lowther 在使用 PXE 和实时服务器映像自动安装 20.04 服务器。例如使用类似于以下内容的 Linux cmdline:
linux /vmlinuz ip=dhcp url=http://${pxe_default_server}/tftp/ubuntu-20.04-live-server-amd64.iso autoinstall ds=nocloud-net\;s=http://${pxe_default_server}/tftp/
....并使一切正常(感谢安德鲁!)
在处理完这个问题后,我又有了另一个问题。正如我们所看到的,安装程序将从http://${pxe_default_server}/tftp/ubuntu-20.04-live-server-amd64.iso
该示例中下载 ISO。在我的 httpd 日志中,我可以看到在进行一次自动安装时,ISO 会通过网络下载 3 次。有什么方法可以让它不这样做吗?
192.168.1.225 - - [06/Apr/2021:22:09:47 +0000] "GET /ubuntu-20.04.1-live-server-amd64.iso HTTP/1.1" 200 958398464 "-" "Wget"
192.168.1.225 - - [06/Apr/2021:22:13:24 +0000] "GET /ubuntu-20.04.1-live-server-amd64.iso HTTP/1.1" 200 958398464 "-" "Cloud-Init/20.2-45-g5f7825e2-0ubuntu1~20.04.1"
192.68.1.225 - - [06/Apr/2021:22:16:50 +0000] "GET /ubuntu-20.04.1-live-server-amd64.iso HTTP/1.1" 200 958398464 "-" "Cloud-Init/20.2-45-g5f7825e2-0ubuntu1~20.04.1"
谢谢!
答案1
我看到了这个在 Discourse 上得到了答案但我想分享我的发现。
添加cloud-config-url=/dev/null
到内核参数确实会阻止cloud-init
下载 ISO,并且 ISO 只会下载一次。完整的 grub 行现在是
linux /vmlinuz ip=dhcp url=http://${pxe_default_server}/tftp/ubuntu-20.04-live-server-amd64.iso autoinstall ds=nocloud-net\;s=http://${pxe_default_server}/tftp/ cloud-config-url=/dev/null
为什么会发生这种情况
使用 PXE 时,url=
必须将参数添加到内核参数中以指定 ISO 文件的位置。我相信casper
可以处理这个问题,并且参数必须采用以下形式 url=*.iso
cloud-init
还将解析url
内核参数并尝试使用它(显然是两次)。从https://github.com/canonical/cloud-init/blob/fc5d541529d9f4a076998b7b4a3c90bb4be0000d/doc/sources/kernel-cmdline.txt
当“cloud-init start”运行时,它将检查“cloud-config-url”或“url”之一是否以键/值的方式出现在内核命令行中...然后 Cloud-init 将读取给定 url 的内容。
正如 Discourse 帖子指出的那样cloud-config-url
,首先检查,因此您可以使用临时解决方案来避免额外的下载。