commit 6b4fd60e904e9a6f27f034b90fd8e7067529f0b9 Author: Tobias Date: Sat Oct 3 15:01:37 2026 +0000 Add README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..fa18de0 --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ +# 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 \ No newline at end of file