As explained in this thread: https://lists.debian.org/debian-boot/2024/04/msg00061.html , netcfg doesn't read the search domain property sent by dhcp to make it available to udhcpc and fill /etc/resolv.conf + lease file properly. This setup doesn't work in an environment where you have multiple search domains and it's getting even more complicated if your network mirror is on one of those search domains that is different from $domain. A commit as already been made for the udhcpc script here: https://salsa.debian.org/installer-team/busybox/-/commit/bd0d90574a4e39b39d38b664ad15ac0c2ca1bbad We now just need to update netcfg package to make $search available to udhcpc. A proposed solution would be to update this line (https://salsa.debian.org/installer-team/netcfg/-/blob/master/dhcp.c#L38) as follow: const char* dhclient_request_options_udhcpc[] = { "subnet", "broadcast", "router", "domain", "hostname", "dns", "search", "ntpsrv", /* extra */ NULL }; Thanks
Here is a proposed patch:
diff -Naur netcfg-master/dhcp.c netcfg-master-updated/dhcp.c
--- netcfg-master/dhcp.c 2024-05-01 11:14:26.209026580 +0100
+++ netcfg-master-updated/dhcp.c 2024-05-01 11:15:11.888387848 +0100
@@ -41,6 +41,7 @@
"domain",
"hostname",
"dns",
+ "search",
"ntpsrv", /* extra */
NULL };
This will require a bit more work than anticipated. The patch posted above will only do half of the job. netcfg will call udhcp with the "-O search" option added which will update /etc/resolv.conf with the correct search domain values assuming that the patch for /etc/udhcpc/default.script is also applied along this one. Now the problem is that netcfg is calling the "netcfg_write_resolv" function from static.c that will overwrite any changes made by udhcpc on resolv.conf and will only keep the domain and nameservers. https://salsa.debian.org/installer-team/netcfg/-/blob/master/dhcp.c#L513 https://salsa.debian.org/installer-team/netcfg/-/blob/master/dhcp.c#L616 https://salsa.debian.org/installer-team/netcfg/-/blob/master/static.c?ref_type=heads#L261
Here is an updated patch for this issue:--- dhcp.c +++ dhcp.c @@ -41,6 +41,7 @@ "domain", "hostname", "dns", + "search", "ntpsrv", /* extra */ NULL }; @@ -510,7 +511,7 @@ * nameservers now so we can do rDNS lookups later to possibly * find out the domain. */ - netcfg_write_resolv(NULL, interface); + netcfg_write_resolv(NULL, NULL, interface); state = HOSTNAME; break; @@ -613,7 +614,7 @@ netcfg_write_common("", hostname, domain); netcfg_write_loopback(); netcfg_write_interface(interface); - netcfg_write_resolv(domain, interface); + netcfg_write_resolv(domain, search, interface); #if !defined(__FreeBSD_kernel__) kill_dhcp_client(); #endif--- static.c +++ static.c @@ -258,14 +258,16 @@ return 1; }
The patch above won't work alone as we would need udhcpc to write the
search domain to a file and make a read function in netcfg to get the info
(or something along those lines)
Here is an updated version of the hack:
d-i preseed/early_command string \
sed -i 's|printf "\$domain" > /tmp/domain_name|printf "$search" >
/tmp/domain_name|' /etc/udhcpc/default.script; \
mv /sbin/udhcpc /sbin/udhcpc.real; \
echo '#!/bin/sh' > /sbin/udhcpc; \
echo 'exec /bin/busybox udhcpc -O search "$@"' >> /sbin/udhcpc; \
chmod +x /sbin/udhcpc