Apply per-client bootloader set overrides - #115
Conversation
0.1.73 Fix admin API auth bypass, add set-password CLI, ISO/description fixes
Update actions docker secrets
Add archlinux aur packages information
you must also configure the image boot parameters to, including a initial blank line:
initrd {{BASE_URL}}/boot/{{CACHE_DIR}}/iso/Boot/BCD bcd
initrd {{BASE_URL}}/boot/{{CACHE_DIR}}/iso/Boot/boot.sdi boot.sdi
…b share NB to use a non-default port, windows 11 24H2 (or later) or windows server 2025 (or later) is required.
wip: Resolve Issues
Fix ci for main
add support for booting windows pe and load the associated image drivers
wip: Adding bind addr option, kubernetes node feature
|
GPT 5.6 was used in this PR, however I have completed a manual (human) review of the codebase. I (personally) am happy with the changes here and feel they're as minimal as possible to implement the given functionality. I am still pulling apart the unit tests though and validating them. |
This reverts commit cb7504a.
# Conflicts: # internal/server/menu.go
garybowers
left a comment
There was a problem hiding this comment.
Please standardise on British English spelling where possible to keep consistency.
|
Thanks for this — the core mechanism is solid and the test coverage is genuinely good. The precedence resolution, the set-qualified path scheme, and the traversal hardening in Blocking1. Per-client sets break script-less iPXE builds. Stock iPXE binaries without an embedded script fetch Remedy: move the autoexec special case below the 2. Explicitly configured bootfile names get re-qualified into the override set. With Remedy: only qualify names that came from the override set itself. Extract a shared 3. One-shot next-boot is silently swallowed when the image's group is disabled. Remedy: in Behaviour changes I'd like to talk through
PerformanceEvery PXE packet now runs one or two synchronous database queries plus a manifest read/parse inside the single-threaded proxyDHCP UDP loop — and on Postgres, Style
Happy to go through any of these if you disagree |
|
Thanks for this — the core mechanism is solid and the test coverage is genuinely good. The precedence resolution, the set-qualified path scheme, and the traversal hardening in Blocking1. Per-client sets break script-less iPXE builds. Stock iPXE binaries without an embedded script fetch Remedy: move the autoexec special case below the 2. Explicitly configured bootfile names get re-qualified into the override set. With Remedy: only qualify names that came from the override set itself. Extract a shared 3. One-shot next-boot is silently swallowed when the image's group is disabled. Remedy: in Behaviour changes I'd like to talk through
PerformanceEvery PXE packet now runs one or two synchronous database queries plus a manifest read/parse inside the single-threaded proxyDHCP UDP loop — and on Postgres, Style
Happy to go through any of these if you disagree — the direction is right and I'd like to land it. |
Summary
Root cause
The client and client-group
bootloader_setfields are persisted and exposedby the UI, but the boot-serving path only consults
GetActiveBootloaderSet().Consequently, the per-client override advertised in the v0.1.13 release notes
has no effect during PXE boot.
proxyDHCP knows the requesting MAC, while the later TFTP request only carries a
filename. This change resolves the effective set during proxyDHCP and advertises
a path such as
bootloader-sets/custom/bootimus.efi, preserving that choice forthe subsequent transfer.
Unqualified requests continue to resolve through the global active set, so
external DHCP configurations retain their existing behaviour.
Validation
gofmt -l .go vet ./...go test ./...go test -race ./internal/proxydhcp ./internal/servergo build ./...GOOS=windows GOARCH=amd64 go build ./...GOOS=darwin GOARCH=arm64 go build ./...Fixes #116. Related global bootloader/proxyDHCP wiring: #78 and #96.