STP vs. DHCP during Debian pxeboot installs

Jim Freeman jfree at
Fri Sep 18 12:45:29 CDT 2009


When performing unattended Debian installations across a network, some
switch protocols/configurations thwart required DHCP negotiation by
simply blocking traffic for a time, and DHCP gives up after its default
timeout period.

For instance, in installing some Dell M610 blades (Broadcom NetXtreme II
adapters - bnx2 linux driver module) within Cisco switch fabric running
STP (Spanning Tree Protocol), interface traffic is blocked until STP can
determine that the port coming on-line does not introduce any switching
loops.  The DHCP requests being sent during that time just fall on the
floor, and DHCP gives up before it's ever really given a chance.  suggests that
"d-i netcfg/dhcp_timeout string 60" can help, but the preseed file itself
may be fetched over the network (eg; via a pxelinux.cfg/<file> append
directive "url=http://host/path/to/preseed.cfg"), so DHCP already needs
to have completed its task.

Additionally, depending on your hardware/firmware/driver confluence and if/
how network adapters reset during system boot and/or driver initialization,
DHCP negotiaions may re-occur during different phases - PXE boot, after
booting the installer image, and again later during the install.

For DHCP to succeed during the network install, an additional pxelinux
append directive similar to "netcfg/dhcp_timeout=60" may be required to
allow a freshly-bounced NIC link to finish STP before giving up on DHCP.

Here's what a sample pxelinux.cfg/preseed for network installs might look like:

  default lenny-amd64
  timeout 5

  label lenny-amd64
    kernel lenny-amd64/linux
    append initrd=lenny-amd64/initrd.gz auto priority=critical url=http://netinstall/preseed.txt interface=eth0 base-installer/kernel/image=linux-image-2.6-amd64 netcfg/dhcp_timeout=60


I'd suggest patching
with something like the following:

--- example-preseed.txt	2009/09/18 17:15:30	1.1
+++ example-preseed.txt	2009/09/18 17:29:34
@@ -17,8 +17,9 @@
 # To pick a particular interface instead:
 #d-i netcfg/choose_interface select eth1
-# If you have a slow dhcp server and the installer times out waiting for
-# it, this might be useful.
+# If you have a slow dhcp server (or STP) and the installer times out waiting
+# for it, this might be useful. If this preseed file is loaded via network,
+# pre-preseed this eg; "netcfg/dhcp_timeout=60" in a pxelinux file instead
 #d-i netcfg/dhcp_timeout string 60
 # If you prefer to configure the network manually, uncomment this line and

More information about the Linux-PowerEdge mailing list