• v0.5.0 f9df3f8bd8

    mward4 released this 2026-05-29 15:12:27 -04:00 | 28 commits to main since this release

    OpenPXE 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/me bootstrap 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::wol and core::notify (config + persistence); delivery
      lives in http-api::notify (reqwest for chat, lettre for SMTP).
    • New deps: lettre (SMTP) and the json feature on reqwest. 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 warnings clean.

    Container image

    • gitea.milesward.dev/mward4/openpxe:0.5.0
    • gitea.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/me gains has_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