• v0.5.2 7adf5e2918

    v0.5.2 Pre-Release

    mward4 released this 2026-05-31 16:11:59 -04:00 | 25 commits to main since this release

    OpenPXE v0.5.2

    Builds on the v0.5.1 SAML SSO release with a FleetDM-style login, themable
    branding, and a full unattended-install pipeline (Kickstart / Preseed /
    Autoinstall / Windows answer files) wired through host pins and the queue.

    Pull into Unraid (host networking):

    docker pull gitea.milesward.dev/mward4/openpxe:0.5.2   # or :latest
    

    Authentication / login page

    • FleetDM-style separation. The local username/password form is now a
      self-contained block; when SSO is enabled, a distinct “Sign in with …”
      button sits below an or divider (optionally with the IdP logo) instead of
      the credential fields doubling as the SSO trigger.
    • The Settings → SSO copy now reflects that SAML is live (no more
      “runtime pending” language).

    Branding — three logo slots

    Branding splits into three independent slots, all on one row in
    Settings → Branding:

    • Light mode and Dark mode logos drive the top-left mark and the
      sign-in page — whichever theme is active picks its variant (with
      cross-theme fallback). Toggling the theme swaps the logo live.
    • Client logo is the raster painted above the PXE boot menu
      (/branding/pxe-logo), seen by booting machines.
    • The favicon is now pinned to the bundled OpenPXE mark on its own
      endpoint (/assets/favicon.svg) — it never follows custom branding, so the
      browser-tab icon stays recognisably OpenPXE.
    • A pre-v0.5.2 single uploaded logo is migrated automatically into the
      dark + client slots on first launch.

    Unattended installs (Storage → Advanced)

    • New Unattended file upload drop-zone: “Drop a Kickstart, Preseed,
      Autoinstall, or Answer File here.”
      Accepts .ks, .cfg, .seed,
      .yaml, .yml, .xml, and user-data. Files are classified on upload
      and stored in their own directory (/var/lib/openpxe/unattended) — never
      the ISO listing or the PXE menu.
    • Use {{HOSTNAME}}, {{IP}}, {{MAC}} placeholders in your answer file;
      they are substituted per-host at boot.

    Host pins + Queue profiles

    • Hosts pin form gains Auto hostname (optional), Auto IP address
      (optional)
      , and an Unattended file dropdown next to Label; the table
      shows an Auto-deploy summary per binding.
    • Queue positions gain a Profile button that prompts for the same
      three fields per queued device.
    • On boot, a bound/queued MAC with an unattended file selected has the right
      kernel argument injected automatically:
      • Kickstart → inst.ks=…
      • Preseed → auto=true priority=critical url=…
      • Autoinstall → autoinstall ds=nocloud-net;s=…/ (cloud-init NoCloud seed
        dir, serving user-data + meta-data)
      • The auto hostname/IP are templated into the served answer file. OpenPXE
        remains a DHCP proxy — it does not assign leases; the values are
        applied by the installer as static-network directives in the answer file.

    Storage — Remote shares

    • Default protocol is now NFS (no credential row, cleaner form).
    • Updated copy: “Remote .iso libraries are read on demand — no local cache to
      preserve disk usage. Support for NFS 3.0 and SMB. Ensure that the hosts IP
      address is provisioned.”

    Under the hood

    • Still a single static x86_64-unknown-linux-musl binary — pure Rust, no
      OpenSSL/C deps added.
    • Workspace: 235 tests green, clippy clean.
    • New API surface: POST/GET /api/unattended, DELETE /api/unattended/:id,
      public GET /unattended/:id (templated serve) + NoCloud seed dir;
      POST/DELETE /api/branding/logo/:slot; PUT /api/queue/:id/profile;
      host pin + queue entry carry an optional deployment profile.
    Downloads