我有一台用于无人值守的Debian安装的DHCP服务器:从PXE启动,然后用预先安装的操作系统。
DHCP服务器(Debian的isc-dhcp-server软件包)被configuration为在分发新租约时执行操作(执行HTTP POST):
subnet 192.168.0.0 netmask 255.255.252.0 { [...] filename "pxelinux.0"; on commit { set client_ip = binary-to-ascii(10, 8, ".", leased-address); execute("curl", "-X", "POST", [...]) } } [...] host vmhost2 { hardware ethernet 00:19:66:60:c3:61; fixed-address 192.168.1.13; }
我注意到,在无人参与的安装过程中,HTTP POST执行两次:机器启动几秒钟后(这是预期的),大约30秒后,当Debian安装程序正在configurationnetworking。
我不期待第二个要求。 其实这是相应的预置configuration:
di netcfg / get_hostnamestringvmhost2 di netcfg / get_domainstringpelicandd.com di netcfg / choose_interfaceselect自动 di netcfg / disable_autoconfig布尔值true di netcfg / disable_dhcp布尔值true di netcfg / dhcp_failed注意 di netcfg / dhcp_optionsselect手动configurationnetworking di netcfg / get_ipaddressstring192.168.1.13 di netcfg / get_netmaskstring255.255.252.0 di netcfg / get_gatewaystring192.168.1.1 di netcfg / get_nameserversstring192.168.1.3 192.168.1.4 8.8.8.8 8.8.4.4 di netcfg / confirm_static布尔值true
我以为netcfg/disable_dhcp选项表示安装程序不应该需要联系DHCP服务器,但它仍然。
问题:
为什么安装程序第二次与DHCP服务器联系,尽pipe预先设置了选项?
有没有办法阻止它这样做,无论是通过预选的选项,或通过修改ISC DHCP服务器的configuration忽略第二个租约?
第一个DHCP DORA(发现,提供,请求,接受)序列由客户端PXE固件尝试查找IP / MASK和PXE数据(NBP + TFTP位置)触发。
PXE固件然后TFTP检索并运行相应的内核+ initrd。 当这个内核开始运行时,它需要一个IP / MASK,然后触发第二个DHCP DORA序列(这是一个常规的“非PXE”DHCP请求)
为了避免第二次DHCP命中,您必须在“内核”命令行上 手动设置静态networkingconfiguration; 你不能将这个信息设置为必须被networking检索的按下的文件,因为内核将被迫使用DHCP来使其networking服务正确工作以检索预先select的文件…你能看到鸡蛋的问题吗?
您可以将相应的静态networking预置variables“附加”传递给内核命令行或使用Pxelinux ipappend命令。
注意:在预定义文件或内核命令行中使用时,请考虑预先使用的variables的语法略有不同,即:
di netcfg/get_ipaddress string 192.168.1.13 <<< preseed file netcfg/get_ipaddress=192.168.1.13 <<< kernel command line
最后的append应该是这样的。 删除换行符,这里只是为了提高可读性和防止水平滚动。
append [...] netcfg/get_ipaddress=192.168.1.13 netcfg/get_netmask=255.255.252.0 netcfg/get_gateway=192.168.1.1 netcfg/get_nameservers=192.168.1.3 netcfg/disable_autoconfig=true