From b28d4e85b23d0ad4d9c764ee4036094c5eef504d Mon Sep 17 00:00:00 2001 From: Markus Wennrich Date: Thu, 23 Jul 2026 07:19:27 +0200 Subject: [PATCH 1/2] fix: switch UEFI boot to snponly --- Makefile | 6 +++--- cmd/main.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index c3a3bf7..d08adb3 100644 --- a/Makefile +++ b/Makefile @@ -47,10 +47,10 @@ ipxe: ) cp ipxe/branding.h ipxe/ipxe/src/config/local/branding.h (cd ipxe/ipxe/src &&\ - make bin/ipxe.pxe bin/undionly.kpxe bin-x86_64-efi/ipxe.efi bin-i386-efi/ipxe.efi EMBED=../../../pixiecore/boot.ipxe) + make bin/ipxe.pxe bin/undionly.kpxe bin-x86_64-efi/snponly.efi bin-i386-efi/snponly.efi EMBED=../../../pixiecore/boot.ipxe) (rm -rf ipxe/ipxe/bin && mkdir ipxe/ipxe/bin) mv -f ipxe/ipxe/src/bin/ipxe.pxe ipxe/ipxe/bin/ipxe.pxe mv -f ipxe/ipxe/src/bin/undionly.kpxe ipxe/ipxe/bin/undionly.kpxe - mv -f ipxe/ipxe/src/bin-x86_64-efi/ipxe.efi ipxe/ipxe/bin/ipxe-x86_64.efi - mv -f ipxe/ipxe/src/bin-i386-efi/ipxe.efi ipxe/ipxe/bin/ipxe-i386.efi + mv -f ipxe/ipxe/src/bin-x86_64-efi/snponly.efi ipxe/ipxe/bin/snponly-x86_64.efi + mv -f ipxe/ipxe/src/bin-i386-efi/snponly.efi ipxe/ipxe/bin/snponly-i386.efi (cd ipxe/ipxe/src && make veryclean) diff --git a/cmd/main.go b/cmd/main.go index 4ab4e93..95a64cd 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -22,9 +22,9 @@ import ( func main() { cli.Ipxe[pixiecore.FirmwareX86PC] = ipxe.MustGet("undionly.kpxe") - cli.Ipxe[pixiecore.FirmwareEFI32] = ipxe.MustGet("ipxe-i386.efi") - cli.Ipxe[pixiecore.FirmwareEFI64] = ipxe.MustGet("ipxe-x86_64.efi") - cli.Ipxe[pixiecore.FirmwareEFIBC] = ipxe.MustGet("ipxe-x86_64.efi") + cli.Ipxe[pixiecore.FirmwareEFI32] = ipxe.MustGet("snponly-i386.efi") + cli.Ipxe[pixiecore.FirmwareEFI64] = ipxe.MustGet("snponly-x86_64.efi") + cli.Ipxe[pixiecore.FirmwareEFIBC] = ipxe.MustGet("snponly-x86_64.efi") cli.Ipxe[pixiecore.FirmwareX86Ipxe] = ipxe.MustGet("ipxe.pxe") cli.CLI() } From e883bda76eeb95c7e52f2c698bdced37dc668791 Mon Sep 17 00:00:00 2001 From: Markus Wennrich Date: Fri, 25 Sep 2026 15:02:33 +0200 Subject: [PATCH 2/2] add feature flag --ipxe-type=snponly --- Makefile | 7 ++++++- cmd/main.go | 6 +++--- pixiecore/cli/cli.go | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 0e896c2..41c2d21 100644 --- a/Makefile +++ b/Makefile @@ -48,10 +48,15 @@ ipxe: ) cp ipxe/branding.h ipxe/ipxe/src/config/local/branding.h (cd ipxe/ipxe/src &&\ - make bin/ipxe.pxe bin/undionly.kpxe bin-x86_64-efi/snponly.efi bin-i386-efi/snponly.efi EMBED=../../../pixiecore/boot.ipxe) + make bin/ipxe.pxe bin/undionly.kpxe \ + bin-x86_64-efi/ipxe.efi bin-i386-efi/ipxe.efi \ + bin-x86_64-efi/snponly.efi bin-i386-efi/snponly.efi \ + EMBED=../../../pixiecore/boot.ipxe) (rm -rf ipxe/ipxe/bin && mkdir ipxe/ipxe/bin) mv -f ipxe/ipxe/src/bin/ipxe.pxe ipxe/ipxe/bin/ipxe.pxe mv -f ipxe/ipxe/src/bin/undionly.kpxe ipxe/ipxe/bin/undionly.kpxe + mv -f ipxe/ipxe/src/bin-x86_64-efi/ipxe.efi ipxe/ipxe/bin/ipxe-x86_64.efi + mv -f ipxe/ipxe/src/bin-i386-efi/ipxe.efi ipxe/ipxe/bin/ipxe-i386.efi mv -f ipxe/ipxe/src/bin-x86_64-efi/snponly.efi ipxe/ipxe/bin/snponly-x86_64.efi mv -f ipxe/ipxe/src/bin-i386-efi/snponly.efi ipxe/ipxe/bin/snponly-i386.efi (cd ipxe/ipxe/src && make veryclean) diff --git a/cmd/main.go b/cmd/main.go index 95a64cd..4ab4e93 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -22,9 +22,9 @@ import ( func main() { cli.Ipxe[pixiecore.FirmwareX86PC] = ipxe.MustGet("undionly.kpxe") - cli.Ipxe[pixiecore.FirmwareEFI32] = ipxe.MustGet("snponly-i386.efi") - cli.Ipxe[pixiecore.FirmwareEFI64] = ipxe.MustGet("snponly-x86_64.efi") - cli.Ipxe[pixiecore.FirmwareEFIBC] = ipxe.MustGet("snponly-x86_64.efi") + cli.Ipxe[pixiecore.FirmwareEFI32] = ipxe.MustGet("ipxe-i386.efi") + cli.Ipxe[pixiecore.FirmwareEFI64] = ipxe.MustGet("ipxe-x86_64.efi") + cli.Ipxe[pixiecore.FirmwareEFIBC] = ipxe.MustGet("ipxe-x86_64.efi") cli.Ipxe[pixiecore.FirmwareX86Ipxe] = ipxe.MustGet("ipxe.pxe") cli.CLI() } diff --git a/pixiecore/cli/cli.go b/pixiecore/cli/cli.go index f6a8558..487a050 100644 --- a/pixiecore/cli/cli.go +++ b/pixiecore/cli/cli.go @@ -21,6 +21,7 @@ import ( "maps" "os" + "github.com/metal-stack/pixie/ipxe" "github.com/metal-stack/pixie/pixiecore" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -69,6 +70,7 @@ func serverConfigFlags(cmd *cobra.Command) { cmd.Flags().Int("metrics-port", 2113, "Metrics server port") cmd.Flags().Int("status-port", 0, "HTTP port for status information (can be the same as --port)") cmd.Flags().Bool("dhcp-no-bind", false, "Handle DHCP traffic without binding to the DHCP server port") + cmd.Flags().String("ipxe-type", "", "UEFI PXE build type to serve: ipxe or snponly") cmd.Flags().String("ipxe-bios", "", "Path to an iPXE binary for BIOS/UNDI") cmd.Flags().String("ipxe-ipxe", "", "Path to an iPXE binary for chainloading from another iPXE") cmd.Flags().String("ipxe-efi32", "", "Path to an iPXE binary for 32-bit UEFI") @@ -113,6 +115,10 @@ func serverFromFlags(cmd *cobra.Command) *pixiecore.Server { if err != nil { fatalf("Error reading flag: %s", err) } + ipxeType, err := cmd.Flags().GetString("ipxe-type") + if err != nil { + fatalf("Error reading flag: %s", err) + } ipxeBios, err := cmd.Flags().GetString("ipxe-bios") if err != nil { fatalf("Error reading flag: %s", err) @@ -144,6 +150,18 @@ func serverFromFlags(cmd *cobra.Command) *pixiecore.Server { DHCPNoBind: dhcpNoBind, } maps.Copy(ret.Ipxe, Ipxe) + switch ipxeType { + case "", "ipxe": + ret.Ipxe[pixiecore.FirmwareEFI32] = ipxe.MustGet("ipxe-i386.efi") + ret.Ipxe[pixiecore.FirmwareEFI64] = ipxe.MustGet("ipxe-x86_64.efi") + ret.Ipxe[pixiecore.FirmwareEFIBC] = ipxe.MustGet("ipxe-x86_64.efi") + case "snponly": + ret.Ipxe[pixiecore.FirmwareEFI32] = ipxe.MustGet("snponly-i386.efi") + ret.Ipxe[pixiecore.FirmwareEFI64] = ipxe.MustGet("snponly-x86_64.efi") + ret.Ipxe[pixiecore.FirmwareEFIBC] = ipxe.MustGet("snponly-x86_64.efi") + default: + fatalf("unsupported pxe type %q: must be one of: ipxe, snponly", ipxeType) + } if ipxeBios != "" { ret.Ipxe[pixiecore.FirmwareX86PC] = mustFile(ipxeBios) }