All of this should go into a directory that is available via HTTP and NFS. In variables.ipxe you can provide the HTTP root and NFS root paths, which are used later. Also there are some variables to set the default iscsi root (without the last part after the colon) and the initiator iqn. These are used to auto-fill the iscsi menu options.
You should tell iPXE to boot bootstrap.ipxe.
The bootstrap process reads a bunch of files and sets a bunch of variables. Of importance, it will read the file macs/XXXXXXX.ipxe based on the mac address of the card. This file should do nothing more than set the name variable, which is then used to load names/${name}.ipxe. Between these, a bunch of variables are set, most notably the iscsi variables and ${arch}, which will be one of i386 or x86_64. The name file can then do what it pleases, and when it exits, the menu in default.ipxe is shown.
A whole bunch of things that are not included here, but which you should get:
- grub4dos/grub.exe - a chainloadable pre-packaged grub
- syslinux/
- extlinux - can read and boot linux off extN
- memdisk - can read and boot drives loaded into memory, including ISOs
- syslinux can read and boot linux off FAT and other windows fs
- memtest86 - neat to have around
- windows/wimboot - able to boot WinPE images
- windows/winpe-${arch} - WinPE images, straight from copype.exe
- gentoo/minimal-${arch} - Gentoo minimal install CD info, which can be extracted from the CD with the included script.
- ubuntu/xubuntu-${arch} - mounted xubuntu isos, which should be NFS-shared
Almost all of these have paths defined in variables.ipxe. Fedora is not listed here, because the installer can be loaded directly off the internet. Awesome, huh?