On Saturday, December 11, 2010 07:31:48 am Christian PERRIER wrote: > Correct. Apparently, though, that behaviour didn't bother anybody > enough to look at current netcfg code and propose the needed patch
Fair enough. Attached a patch that introduces a new netcfg/hostname option that -if set- takes precedence over the RDNS/DHCP hostname magic. This patch has a dependency on my other bug/patch: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=606515 (Preseed installation does not wait for network to be ready) Because if netcfg/hostname is set, the reverse DNS check is skipped, and the chance is higher that the installer attempts to fetch the kickstart file before the network link is up & running. -- Yours sincerely, Floris Bos
diff -ur netcfg.orig1/debian/netcfg-common.templates netcfg/debian/netcfg-common.templates --- netcfg.orig1/debian/netcfg-common.templates 2009-09-12 16:13:23.000000000 +0200 +++ netcfg/debian/netcfg-common.templates 2010-12-11 17:20:01.361351304 +0100 @@ -105,6 +105,12 @@ administrator. If you are setting up your own home network, you can make something up here. +Template: netcfg/hostname +Type: string +Description: Hostname that can be preseeded. + . + If specified this disables the automatic detection of the hostname by netcfg. + Template: netcfg/invalid_hostname Type: error # :sl2: diff -ur netcfg.orig1/dhcp.c netcfg/dhcp.c --- netcfg.orig1/dhcp.c 2010-08-06 23:49:44.000000000 +0200 +++ netcfg/dhcp.c 2010-12-11 23:18:25.841977721 +0100 @@ -473,12 +473,19 @@ } /* - * Default to the hostname returned via DHCP, if any, + * If the netcfg/hostname preseed value is set use that + * Otherwise default to the hostname returned via DHCP, if any, * otherwise to the requested DHCP hostname * otherwise to the hostname found in DNS for the IP address * of the interface */ - if (gethostname(buf, sizeof(buf)) == 0 + debconf_get(client, "netcfg/hostname"); + if (!empty_str(client->value)) + { + strncpy(buf, client->value, sizeof(buf)); + debconf_set(client, "netcfg/get_hostname", buf); + } + else if (gethostname(buf, sizeof(buf)) == 0 && !empty_str(buf) && strcmp(buf, "(none)") && verify_hostname(buf) == 0 diff -ur netcfg.orig1/static.c netcfg/static.c --- netcfg.orig1/static.c 2010-08-06 06:32:41.000000000 +0200 +++ netcfg/static.c 2010-12-12 00:12:44.691551386 +0100 @@ -454,9 +464,28 @@ GET_GATEWAY : CONFIRM; break; case GET_HOSTNAME: - seed_hostname_from_dns(client, &ipaddress); - state = (netcfg_get_hostname(client, "netcfg/get_hostname", &hostname, 1)) ? - GET_NAMESERVERS : GET_DOMAIN; + debconf_get(client, "netcfg/hostname"); + if (!empty_str(client->value)) { + /* Copy preseeded netcfg/hostname to hostname variable and netcfg/get_hostname */ + hostname = strdup(client->value); + debconf_set(client, "netcfg/get_hostname", hostname); + + /* FQDN? Then set domain */ + char *s = strchr(hostname, '.'); + if (s && s[1] != '\0') { + domain = strdup(s + 1); + debconf_set(client, "netcfg/get_domain", domain); + have_domain = 1; + *s = '\0'; + } + state = GET_DOMAIN; + + } else { + seed_hostname_from_dns(client, &ipaddress); + state = (netcfg_get_hostname(client, "netcfg/get_hostname", &hostname, 1)) ? + GET_NAMESERVERS : GET_DOMAIN; + } + break; case GET_DOMAIN: if (!have_domain) {