Getting *nix to Netboot Macs

Intro
So, you wanted to move your netbooting off of a OS X box, and onto a box running ISC DHCP, for one reason or another. Well, you stumbled on the right page! This should help you get booting from a ISC DHCP based DHCP server working with just a little bit of work.

What is this all about?
For any number of reasons, you may want to move the server(s) handling your Mac netboot to ISC's DHCP Server. I will not go into any of the reasons, as it does not matter for this material, and is highly dependent on your situation. The code below should allow you to enable netbooting for your Macs in such a manor that allows you to serve multiple images, that can be selected in firmware at the alt/option-boot menu.

What does this page assume?

 * You already have a working ISC DHCP Server setup, and want to expand it for serving up netboot images via BSDP.
 * You already have a server that will hold the netboots (either the same server as DHCP, or another, does not matter).

My Testing Environment

 * Internet Systems Consortium DHCP Server 4.2.3-P2 Gentoo-r0
 * (work issued) Apple MacBookPro6,2, Purchased Fall 2010

The Code

 * This presents two images to the Alt/Option Boot menu:
 * ID: 137, Name: DOE-Image (Also our default image)
 * ID: 138, Name: DSR-NB01012012-05122012
 * Sets ID 137 to be the Default Image for only holding down N at boot
 * Placed between global options and your subnet definitions, this is then enabled for all subnets (Will explore narrowing this down shortly)

Caveats

 * This does not present the netboot sets to the Startup Disk System Preferences Pane
 * The SD Pref Pane does send out the proper BSDP List packet, however since there is already a DHCP Client listening on the default ports, the SD Pref Pane needs the response sent to another port (which is included in the packet), however I have not yet found a way for ISC DHCP to send to this other port when specified. When it gets the List packet, it responds, but to the DHCP Client, not the Pref Pane, hence it doesn't populate.
 * Would be enabled on all subnets handled by this DHCP server
 * Have not tested it working across DHCP-Relays or VLANs/IP-Helpers yet, however there should be nothing preventing it from working
 * All Netboot name lengths (plus 5bit overhead) combined need to be less then 255 characters (Reference Line 40 above), but you could have as many fit into that. I still want to test if you've hit that limit, if we can send another :09: list entry to include more entries (Say for very descriptive names...)
 * While this does have a catch for use in redundant/load balancing netboot servers, I haven't tested this yet. However, I don't see this working "As Designed" (or as a full replacement for Apple's dedicated BSDP Service). My thinking is explained next.
 * Any functionality that relies on the BSDP Server remembering a previously picked image will 'fail' back to the default.
 * Apple's BSDP Server implements functionality that it will remember the last image that a client selected for boot. Along the same lines, there is also functionality built into it that will reduce the servers preference as it becomes loaded with clients, so then new clients go to other servers. I haven't yet tried to introduce either of these into ISC's DHCP server, however I don't see it being implemented easily.
 * I say 'fail', as it doesn't fail, but the server only knows to hand over the default.
 * This will most likely not work with Diskless NetBoot Sets (or "Thin Client" sets), where the server holds a temp location for the client to write files back to
 * (Think booting a SIU Image, like one created by JAMF Here). This involves some Remapping and other funky stuff way beyond just setting up DHCP to handle netboots.

Resources Used to Complete this

 * I basically took Bennett Perkin's work, whose work is based on others, and expanded upon it.
 * Used EasyCalculation.com for converting Dec->Hex, and Hex->Dec to verify (Image IDs and Lengths)
 * Used Dolcevie.com to convert ASCII/Strings to Hex (Image Names)
 * I originally got netbooting to work (without multiple images), using an article on AFP548
 * Also peaked at FOG Project's recommendations for getting Mac to Netboot
 * Verified DHCP Parameters with IANAs List
 * Also read Apple's BDSP Documentation about 20 different times

Fin

 * Once OSXDeployment.com is out of Read-Only Maintenance mode, I will be posting this information there too (as it's more central for this kind of information). I will be keeping it here too, as my own reference. This site has been rolled into AFP548.
 * I have learned more about BSDP then I ever wanted to know :)
 * I am available on IRC if you have any questions or comments; irc.freenode.net, channel ##OSX-Server. My Nickname is Sedorox.