-
released this
2026-05-29 15:12:27 -04:00 | 28 commits to main since this releaseOpenPXE v0.5.0
The v0.4.x chapter is closed — NFS works end to end — and v0.5.0
turns OpenPXE from "a PXE server" into something you can hand an L1
desktop tech: wake machines, get notified, brand the whole thing,
and check for updates, all from one container.Wake-on-LAN
Bind a MAC under Hosts, and each bound host now has a Wake
button. It sends a Wake-on-LAN magic packet to the limited broadcast
and the server's own subnet broadcast (computed from OpenPXE's
advertised IP + detected mask), so it reaches the right VLAN with zero
network config on the common "same segment" setup. No special container
capability required.Safety: WoL only fires for MACs that are actually bound — it's not an
open "spray packets at anything" endpoint.Webhook notifications (Slack / Teams / Discord / SMTP)
A new Advanced tab carries notification settings. Pick one provider,
paste the incoming-webhook URL (or fill in SMTP), hit Send test, and
you'll get a ping when:- a machine PXE-boots an image (the canonical "imaging started" moment),
- a host is woken via WoL.
All four transports are native — Slack, Discord, and Teams over their
incoming-webhook JSON shapes, email over SMTP (rustls, STARTTLS or
implicit TLS — never plaintext). Sends are best-effort and time-bounded,
so a flaky webhook can never wedge a PXE boot. The SMTP password is
stored but never returned by the API — the config screen shows
"(unchanged)" and only overwrites it if you type a new one.Advanced settings tab
New nav item under Settings. Holds the webhook config and the API
reference block (relocated from the bottom of Settings — Settings is
now just Account / SSO / Branding).Login page logo (FleetDM style)
The sign-in and first-run-setup screens now use the same brand treatment
as the dashboard: when you've uploaded a custom logo under
Settings → Branding, it spans the card header at full width and the
"OpenPXE" wordmark is dropped — your logo is the brand. No custom logo?
The bundled mark + wordmark, as before. Rendered from the public
/api/mebootstrap so there's no flash of the default.About: check for updates + licenses
- Check for updates button queries the project's Gitea releases API
and tells you whether you're current or a newer tag is out (with a
link to the release). Strictly on-demand — OpenPXE never polls in the
background, preserving the air-gapped promise. - A License card documents the dual MIT OR Apache-2.0 license
with links to both full texts, plus a note on bundled components
(iPXE GPLv2/UBDL, samba's smbclient, wimtools, the Rust crates).
Under the hood
- New
core::wolandcore::notify(config + persistence); delivery
lives inhttp-api::notify(reqwest for chat, lettre for SMTP). - New deps:
lettre(SMTP) and thejsonfeature onreqwest. Both
use rustls + ring — the static musl binary stays OpenSSL-free. - 179 tests passing (WoL magic-packet loopback, notify config
round-trip + password redaction, webhook validation, WoL-on-unbound
→ 404, version comparison).cargo clippy --workspace --all-targets -D warningsclean.
Container image
gitea.milesward.dev/mward4/openpxe:0.5.0gitea.milesward.dev/mward4/openpxe:latest
linux/amd64; static-musl
/openpxe; PNG-enabled x86_64 iPXE baked in
(from v0.4.69).Compatibility
- Additive. New state file
notify.json; existing files load unchanged. /api/megainshas_custom_logo+logo_rev(additive).- The API reference moved tabs in the UI but every endpoint is
unchanged; new endpoints:/api/hosts/:mac/wol,/api/notify,
/api/notify/test,/api/updates/check.
Downloads