# Documentation and information relating to my PXE boot server ## Brief Infrastructure Overview Hosted on a headless Debian 13 VM dnsmasq used for TFTP, Nginx for HTTP and GRUB serving as the bootloader DHCP options handled via my already existing OpenWrt router Kernel, initramfs and other required files exist in a dedicated storage directory/disk and are exposed to Nginx via symbolic links ## High Level Architecture Overivew ``` Client (bare-metal or VM) configured to network boot turns on ⇣ DHCP request broadcast ⇣ OpenWrt DHCP server responds, assigning an IP and providing PXE options in the response ⇣ Client downloads the GRUB bootloader, its theme and configuration files via TFTP ⇣ Once the client is within GRUB you can select the desired environment to boot into ⇣ Kernel, initramfs and other required files are loaded over HTTP via Nginx ⇣ If needed, additional files are now downloaded from the Internet ⇣ Selected OS / installer or environment is now loaded ``` ## Features - Lightweight, with less than 2GB of disk space and under 200MB of RAM used for the VM with fresh headless Debian 13 install - UEFI and BIOS support - Custom GRUB theme for UEFI based systems - Zero DHCP dependency on server, will work in an existing environment - TFTP for bootstrapping, HTTP for payloads - Easy to add additional operating systems as additional menu entries and HTTP payloads - Currently supports booting into AlmaLinux, Arch Linux, Clonezilla, Debian, Memtest and SystemRescue all from the same menu - Installer files reside in dedicated storage directory which Nginx reads via symbolic links, allowing storage for payloads to be easily expanded - Default option of booting into the already existing local disk allowing clients to remain configured for network boot ## Extremely useful documentation https://manpages.debian.org/wheezy/dnsmasq-base/dnsmasq.8.en.html https://www.rfc-editor.org/rfc/rfc4578.html https://openwrt.org/docs/guide-user/base-system/dhcp https://clonezilla.org/livepxe.php https://www.system-rescue.org/manual/PXE_network_booting/ https://www.gnu.org/software/grub/manual/grub/html_node/Network.html https://www.gnu.org/software/grub/manual/grub/html_node/Theme-file-format.html