Skip to content

Restore the eight commands upstream's BIOS trim list disables - #3

Merged
mastacontrola merged 1 commit into
masterfrom
bios-restore-command-set
Aug 4, 2026
Merged

Restore the eight commands upstream's BIOS trim list disables#3
mastacontrola merged 1 commit into
masterfrom
bios-restore-command-set

Conversation

@mastacontrola

Copy link
Copy Markdown
Member

Legacy-BIOS PXE clients cannot boot FOG with the binaries this repository publishes. undionly.kkpxe loads, runs its embedded script, fetches default.ipxe, then dies:

params: command not found
Could not boot: Exec format error (https://ipxe.org/2e022001)

The installer generates default.ipxe with params, ten param lines and a boot.php##params chain, and bootmenu.class.php emits param/params 46 more times. Every BIOS PXE boot fails.

Cause

Upstream's /* Disable commands not historically included in BIOS builds */ block. "Historically" is upstream's history, not FOG's — before fogproject's f61a90d97 (2026-01-26) FOG's header carried no PLATFORM_pcbios block at all and all eight commands were on for BIOS. That commit copied upstream master's headers wholesale and brought the block along. fogproject's a02a2c2cd rebase caught three other flips from that same copy (CONSOLE_PCBIOS, ACPI_SETTINGS, DOWNLOAD_PROTO_FILE) but not these.

It stayed invisible because fogproject shipped committed prebuilt binaries until 182701dd6 moved iPXE here — only -S/--force-https installs rebuilt. Now every install boots what this repo builds, so a latent bug became universal. Both fogproject branches consume these assets: 1.5 and 1.6 are equally affected.

Why all eight, not just the broken one

FOG's use Impact while disabled
PARAM_CMD default.ipxe + 46 emissions in bootmenu.class.php every legacy BIOS PXE boot fails
CONSOLE_CMD console --picture boot-menu background; gates first sanboot --drive 0 background silently never renders; clients fall through to --drive 0x80
other six diagnostic commands the docs lean on unavailable on BIOS only

All eight were on before f61a90d97; none was ever a FOG decision.

Upstream's block is left byte-for-byte intact and the restore is an explicit override after it, so the next refresh onto a new upstream tag diffs cleanly and this reads as a deliberate deviation rather than more drift.

EFI is unaffected — the block is PLATFORM_pcbios-gated, which is also why UEFI testing never caught this.

Verification

VirtualBox BIOS client against a 1.6 server, same server / same default.ipxe / same DHCP, binary the only variable:

  • published binary → params: command not found
  • this binary → full registered-host FOG boot menu

87551 → 91464 bytes.

A legacy-BIOS PXE client cannot boot FOG with the binaries this repository
publishes. It loads undionly.kkpxe, runs the embedded script, fetches
default.ipxe over TFTP, and then dies:

    params: command not found
    Could not boot: Exec format error (https://ipxe.org/2e022001)

The installer generates default.ipxe with "params", ten "param" lines and a
"boot.php##params" chain, and bootmenu.class.php emits param/params 46 more
times. None of it works, so every BIOS PXE boot fails.

The cause is upstream's "Disable commands not historically included in BIOS
builds" block. "Historically" is upstream's history, not FOG's: before
fogproject's f61a90d97 (2026-01-26) FOG's header carried no PLATFORM_pcbios
block at all and all eight commands were enabled for BIOS. That commit copied
upstream master's headers in wholesale and brought the block with it.
fogproject's a02a2c2cd rebase caught three other flips from the same copy --
CONSOLE_PCBIOS, ACPI_SETTINGS, DOWNLOAD_PROTO_FILE -- but not these, so they
survived it.

It stayed invisible because fogproject shipped committed prebuilt binaries
until 182701dd6 moved iPXE here. Only -S/--force-https installs rebuilt, so
only they were affected. Now every install boots what this repository builds,
which turned a latent bug into a universal one. Both fogproject branches
consume these assets, so 1.5 and 1.6 are equally affected.

Two of the eight are load-bearing rather than diagnostic:

  PARAM_CMD    the failure above.
  CONSOLE_CMD  bootmenu.class.php uses "console --picture" for the boot menu
               background image and gates its first sanboot variant on
               "console && sanboot --drive 0". Without it the background
               silently never renders and BIOS clients quietly fall through to
               sanboot --drive 0x80.

The other six are the diagnostic commands FOG's documentation leans on and
were equally unintended casualties, so the whole set is restored rather than
just the two that visibly break. That returns BIOS builds to what FOG actually
shipped and tested for years.

Upstream's block is left byte-for-byte intact and the restore is an explicit
override after it. Deleting lines out of upstream's block would make the next
refresh onto a new tag diff dirty and make this read as more drift; an override
reads as a deliberate choice, which is the point of the deviations table.

EFI is unaffected -- the block is PLATFORM_pcbios-gated, which is also why UEFI
testing never caught this.

Verified on a VirtualBox BIOS client against a 1.6 server: with the published
binary, "params: command not found"; with this one, the full registered-host
FOG boot menu. Binary grows 87551 -> 91464 bytes.

Co-Authored-By: Claude Opus 5 <[email protected]>
@mastacontrola
mastacontrola merged commit ad436fe into master Aug 4, 2026
1 check passed
@mastacontrola
mastacontrola deleted the bios-restore-command-set branch August 4, 2026 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant