-
v0.2.0 — pre-beta Pre-Release
released this
2026-04-30 02:28:10 -04:00 | 54 commits to main since this releasev0.2.0 — pre-beta
This is the bulk pre-beta cleanup pass. The protocol stack and operator UI are exercised by 66 automated tests (up from 56),
cargo clippy --workspace --all-targetsis fully clean, and the container image is 97 MB oflinux/amd64bytes.Pull
docker pull gitea.milesward.dev/mward4/openpxe:0.2.0Highlights
Per-MAC host bindings Pin a MAC to a boot target and the client skips the menu. The DHCP reply embeds
?mac=${mac}in theboot.ipxeURL; iPXE substitutes the literal MAC client-side, and the HTTP layer chains straight to the bound entry. NewHoststab and/api/hostsCRUD.Prometheus
/metrics. Counters for DHCP replies (per arch), TFTP transfers + bytes, HTTP requests (per route family). Gauges for ISO / client / gate / imaging counts, NFS active mounts, uptime, build info. Plain text exposition format. Lock-freeAtomicU64s — noprometheus/metrics-rsruntime dep.Light + dark themes. CSS-token toggle in the top-right corner (or press
T). Light palette designed against reference. Pre-paint inline script avoids the dark→light flash on every page load. Terminal pane stays dark in both themes.Windows boot workflow validation. A new integration test synthesizes a Windows-style ISO and asserts (1) introspection identifies it correctly, (2) the boot entry is the canonical 5-file wimboot chain, (3) the rendered iPXE script chains wimboot with
initrd --namefor each, and (4) no trust-store strings (bcdedit,testsigning,certutil,httpdisk,test-signed) appear. WinPEstartnet.cmdpicks up other open source utility lessons (explicitnet start Workstationbeforenet use, surfaced errors).Code cleanup pass
cargo clippy --workspace --all-targetsis now warning-free. Among the bigger fixes:format!()appended toString→std::fmt::Write::write!- manual reverse comparators →
Reverse map_or(false, …)→is_some_and- redundant closures → method references
std::io::Error::new(Other, …)→Error::other- merged identical match arms
Run on Unraid
docker pull gitea.milesward.dev/mward4/openpxe:0.2.0Same deployment as v0.1.0 — see
deploy/unraid/README.md. Dropdeploy/unraid/openpxe.xmlinto/boot/config/plugins/dockerMan/templates-user/for a one-click template. Web UI:http://<unraid-ip>/.What's next
A detailed Phase 6 punch list lives at
docs/NEXT_PHASE.md. The headline item is real-hardware validation across BIOS / UEFI x64 / UEFI ARM64 — the protocol legs are CI-tested, but no real firmware has booted OpenPXE yet.Image details
- Base:
debian:12-slim - Architecture:
linux/amd64 - Size: ~97 MB
- Digest:
sha256:d682c97f903caf16ae9e1631d547d7ec32a8da64b4db7ef93f64b12164233ea4 - Runs as uid 10001 (entrypoint chowns bind mounts as root, then drops via
gosu) - Required cap:
NET_BIND_SERVICE - Optional cap:
SYS_ADMINfor NFS share mounting
Downloads