When configuring dnsmasq for PXE booting, why do I need to change undionly.kpxe to undionly.0

coreosdhcpdnsmasqpxe-boot

I have configured dnsmasq to PXE boot iPXE clients by referring them to a HTTP server (matchbox in this case). I have also configured it to deal with older PXE clients by placing a copy of iPXE in the root of my TFTP server to allow these older clients to chainload to iPXE. To do this, I have used the following line in my dnsmasq.conf:

dhcp-boot=tag:!ipxe,undionly.kpxe

I have placed the undionly.kpxe file at the root of my TFTP server, however a few places say that you need to symlink or copy undionly.kpxe to undionly.kpxe.0 or undionly.0 (CoreOS, FOG Wiki).

Firstly, why does dnsmasq not look for the exact filename you specify in the config and secondly which one is the correct one, undionly.0 or undionly.kpxe.0?

Best Answer

the filename ending in .0 is only relevant for versions of dnsmasq prior to 2.76. from the changelog of 2.76:

Subtle change in the semantics of "basename" in --pxe-service. The historical behaviour has always been that the actual filename downloaded from the TFTP server is . where is an integer which corresponds to the layer parameter supplied by the client. It's not clear what the function of the "layer" actually is in the PXE protocol, and in practise layer is always zero, so the filename is .0 The new behaviour is the same as the old, except when includes a file suffix, in which case the layer suffix is no longer added. This allows sensible suffices to be used, rather then the meaningless ".0". Only in the unlikely event that you have a config with a basename which already has a suffix, is this an incompatible change, since the file downloaded will change from name.suffix.0 to just name.suffix

if you are using a version of dnsmasq after 2.76 just use the actual filename. if using a version from prior, use "filename".0

Related Topic