Our new server has PXE support to boot from scratch from the network, so I decided to try to install Debian with it. I didn’t just do this for fun (it wasn’t much fun): the new server had a gigabit ethernet card that wasn’t supported by my usual Debian network boot CD.
I started with syslinux, as it includes pxelinux and lots of helpful documentation. I choose atftpd for my TFTP server since its author (Jean-Pierre Lefebvre) wrote it to use with pxelinux.
I wanted to use udhcpd as the DHCP server because I liked udhcpc, but the client machine didn’t seem to like it: it seems that PXE might use some non-standard DHCP features. So, I used ISC dhcpd3, and it worked. But that was another surprise: it worked even though the DHCP port was being filtered by the local firewall! I assume this is becuase dhcpd3 uses the packet protocol to bypass the normal protocol stack. That’s also why it requires packet socket and socket filtering to be compiled into the kernel. I don’t like it, but it works.