Publish the ipxe.efi Secure Boot chain alongside snponly.efi - #2
Merged
Conversation
Only the snponly pair was staged, which made Secure Boot the one boot path in FOG with no fallback loader. The two loaders fail on disjoint hardware. snponly.efi drives the NIC through the firmware's own UEFI SNP protocol -- the right default, since it is whatever the vendor shipped and tested -- but it is dead in the water where SNP is broken or absent. ipxe.efi carries iPXE's native drivers and takes the NIC over from the firmware, recovering exactly those machines while hanging on the ones where takeover fails. Every non-Secure-Boot install has had both since forever and admins pick between them with DHCP option 67; a Secure Boot site had nothing to move to. Upstream already signs both -- ipxeboot.tar.gz ships x86_64-sb/ipxe.efi and arm64-sb/ipxe.efi under the same "iPXE Secure Boot Automatic Code Signing G1A" key as snponly.efi -- so this stages and signer-asserts them the same way. No new hash pin is needed: IPXEBOOT_SHA256 already covers the whole tarball. The shim is byte-identical between the two chains; only its filename differs, because automatic_next_path() picks the second stage by rewriting the "-shim<arch>.efi" suffix of its own name. So ipxe-shimx64.efi loads ipxe.efi and snponly-shimx64.efi loads snponly.efi, from the same directory, and switching chains is purely a DHCP change. Upstream ships those two names as symlinks to one binary for this reason; we keep materialising real files because some TFTP daemons refuse to follow symlinks. That costs ~2MB of duplicated shim per release, against an admin otherwise having no signed fallback at all. Verified: stage.sh runs clean, all four loaders verify against the expected signer, each staged binary is byte-identical to its upstream source, and all four shim names resolve to a loader present in the same directory. Asset set grows 4.4MB -> 7.2MB. Co-Authored-By: Claude Opus 5 <[email protected]>
mastacontrola
added a commit
to FOGProject/fogproject
that referenced
this pull request
Aug 3, 2026
The release that first carries the ipxe.efi Secure Boot chain (FOGProject/fog-ipxe#2). Without this bump the paragraph added in the previous commit names a boot file the installer never downloads, which is worse than not documenting it at all -- the admin points DHCP at a path that TFTP 404s and has no way to tell that from a broken chain. iPXE itself is unchanged at v2.0.0; only the fog-ipxe packaging moved. Co-Authored-By: Claude Opus 5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The Secure Boot asset set staged only the
snponlypair, which made Secure Boot the one boot path in FOG with no fallback loader. This adds theipxe.efichain beside it, for both x86_64 and arm64.The two loaders fail on disjoint hardware:
snponly.efidrives the NIC through the firmware's own UEFI SNP protocol. Right default — it's whatever the vendor shipped and tested — but dead in the water where SNP is broken or absent.ipxe.eficarries iPXE's native drivers and takes the NIC over from the firmware. Recovers exactly those machines, and hangs on the ones where takeover fails.Every non-Secure-Boot install has had both since forever, and admins pick between them with DHCP option 67. A Secure Boot site had nothing to move to.
Why this is cheap
Upstream already signs both.
ipxeboot.tar.gzshipsx86_64-sb/ipxe.efiandarm64-sb/ipxe.efiunder the sameCN=iPXE Secure Boot Automatic Code Signing G1Akey assnponly.efi, so they stage and signer-assert identically. No new hash pin —IPXEBOOT_SHA256already covers the whole tarball.The shim is byte-identical between chains; only its filename differs, because
automatic_next_path()picks the second stage by rewriting the-shim<arch>.efisuffix of its own name. Soipxe-shimx64.efiloadsipxe.efiandsnponly-shimx64.efiloadssnponly.efi, from the same directory. Switching chains is purely a DHCP change with nothing to rename server-side. Upstream ships those two names as symlinks to one binary for exactly this reason; we keep materialising real files because some TFTP daemons refuse to follow symlinks.Cost
Asset set grows 4.4MB -> 7.2MB, ~2MB of which is the duplicated shim. Weighed against an admin having no signed fallback at all.
Verification
Ran
secureboot/stage.shend to end:ipxeboot.tar.gz).No installer change is needed:
configureTFTPandPXEcopies the staged tree wholesale, and theautoexec.ipxehard-link loop already coverssecureboot/andsecureboot/arm64-efi/.A companion PR on
fogprojectdocuments the fallback on the Secure Boot configuration page.🤖 Generated with Claude Code