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