Remove the EFI binaries v2.0.0-fog.8 stopped shipping - #1191
Merged
Conversation
#1190 retired autoexec/ but not 10secdelay/'s EFI files, and that is the half that actually breaks a client. Those .efi are EMBED-marked, and the root now carries an autoexec.ipxe. efi_autoexec_network() falls back to /autoexec.ipxe when the binary's own directory has none -- and 10secdelay/ has none -- so one of them downloads the script, never runs it (first_image() returns its embedded one), nothing unregisters it, and initrd_load_all() concatenates 2 KB of iPXE script ahead of init.xz. The client panics with VFS: Unable to mount root fs on "/dev/ram0" or unknown-block(1,0) That is precisely the failure the EMBED-less change exists to make impossible, reintroduced by an upgrade on a path that worked before it. _copyIpxeTree() cannot clear them: it only ever writes, so anything a release stops shipping stays on disk. Observed on a server that had just upgraded -- the stale 10secdelay/snponly.efi still had "Sleeping 10 seconds" in its strings, and _signLocalIpxe() had given it a fresh mtime, so it looked current. _retireAutoexecDir() therefore becomes _retireStaleEfiPaths() and sweeps: autoexec/ both there and under stock/ 10secdelay/*.efi the loose files beside the BIOS builds 10secdelay/{i386,arm64}-efi/ and the same under stock/ The BIOS files in 10secdelay/ stay -- they are why the directory still exists, since legacy BIOS has no efi_autoexec_load() and so cannot take a --boot-delay. An admin who deliberately placed their own .efi there loses it. Accepted: every EFI binary that can legitimately sit in that directory now is one that would panic the client booting it, and a file that cannot be booted safely is not worth keeping over one that can. Also rejoins _copyIpxeTree()'s leading comment, which #1190 split mid-sentence by inserting these helpers through the middle of it. They now sit above the block rather than inside it.
Member
|
You may want to make sure that the installer still doesn't remove any custom built ipxe files by default. I was trying to avoid removing someone's ipxe file that already has their CA embedded, and trying to make it so rebuild of it only happens if there's been a change to ipxe version or to the ca they have configured that would need to be embedded. |
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.
Follow-up to #1190, which retired
autoexec/but not10secdelay/'s EFI files — and that is the half that actually breaks a client.The bug
Those
.efiare EMBED-marked, and the root now carries anautoexec.ipxe.efi_autoexec_network()falls back to/autoexec.ipxewhen the binary's own directory has none — and10secdelay/has none — so one of them downloads the script, never runs it (first_image()returns its embedded one), nothing unregisters it, andinitrd_load_all()concatenates 2 KB of iPXE script ahead ofinit.xz:That is precisely the failure the EMBED-less change exists to make impossible, reintroduced by an upgrade, on a path that worked before the upgrade.
_copyIpxeTree()cannot clear them — it only ever writes, so anything a release stops shipping stays on disk indefinitely.Observed, not theorised
On a server that had just upgraded to
v2.0.0-fog.8:_signLocalIpxe()had re-signed the stale file and given it a fresh mtime, so it looked current.The fix
_retireAutoexecDir()becomes_retireStaleEfiPaths()and sweeps:autoexec/stock/autoexec/10secdelay/*.efi10secdelay/{i386,arm64}-efi/stock/The BIOS files in
10secdelay/stay — they are why the directory still exists, since legacy BIOS has noefi_autoexec_load()and so cannot take a--boot-delay.An admin who deliberately placed their own
.efithere loses it. Accepted, and said so in the comment: every EFI binary that can legitimately sit in that directory now is one that would panic the client booting it, and a file that cannot be booted safely is not worth keeping over one that can.Also rejoins
_copyIpxeTree()'s leading comment, which #1190 split mid-sentence by inserting these helpers through the middle of it.🤖 Generated with Claude Code