sorry, can't give too many details on the specific, but the PXE booting spec requires that you start up a:
- DHCP server that responds to broadcasts on 0.0.0.0
- TFTP server that responds to requests for the bootstrap image
- HTTP server (for most linux distros, anyways) that fetches more boot resources that are big enough that TFTP is probably not the best protocol (UDP doesn't have packet transmission guarantees).
I use a dead-simple, transient erlang HTTP server that my buddy wrote: https://github.com/StoneCypher/htstub
And hand-rolled custom DHCP and TFTP servers (existing options are not exactly what I need) that basically operate like htstub.
This is all tied into a mix task, so you start the mix task, then walk over to your target machine (or IPMI), reboot it, and then it's provisioned from scratch, reproducibly, with two-touches. Since everything is done in a single language, if something is wrong in your provisioning scheme, it's really easy to figure out what went wrong and deploy a fix.