From 5ff1cff7d400c86fbf4f6d8c6af28261d393781b Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 14 May 2026 10:23:49 -0400 Subject: [PATCH] Fix iPXE chainload loop by excluding iPXE from pxe-service iPXE was stuck in a loop: boot iPXE -> DHCP -> get ipxe.0 again -> boot iPXE -> repeat. Add tag:!ipxe to pxe-service directives so iPXE clients get the HTTP script URL via dhcp-boot instead of being served the bootloader again. Co-Authored-By: Claude Opus 4.6 --- internal/pxe/supervisor.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/internal/pxe/supervisor.go b/internal/pxe/supervisor.go index 8c6970b..9bd6145 100644 --- a/internal/pxe/supervisor.go +++ b/internal/pxe/supervisor.go @@ -204,13 +204,15 @@ dhcp-ignore=tag:!known enable-tftp tftp-root={{.TFTPRoot}} -# PXE boot menu (timeout 0 = boot immediately) -pxe-prompt="Provisioning",0 -pxe-service=x86PC,"Provisioning",undionly -pxe-service=X86-64_EFI,"Provisioning",ipxe - -# iPXE chainload: once iPXE boots, serve HTTP script +# Detect iPXE (user-class "iPXE") to break chainload loop dhcp-userclass=set:ipxe,iPXE + +# Initial PXE firmware: serve iPXE bootloader (skip if already iPXE) +pxe-prompt="Provisioning",0 +pxe-service=tag:!ipxe,x86PC,"Provisioning",undionly +pxe-service=tag:!ipxe,X86-64_EFI,"Provisioning",ipxe + +# iPXE: serve HTTP boot script dhcp-boot=tag:ipxe,{{.PublicURL}}/ipxe/${mac:hexhyp} log-dhcp