Files
unraid-podman/docs/ROADMAP.md
T
maggesandClaude Sonnet 5 e2fefcdf9c
Build Packages / Build .txz packages (push) Failing after 9s
Lint / ShellCheck (push) Failing after 43s
Lint / Validate .plg XML (push) Successful in 10s
Lint / EditorConfig (push) Failing after 6s
Add reproducible build system, native Unraid plugin, and WebUI
- versions.env pins podman, conmon, crun, netavark, aardvark-dns, passt,
  and fuse-overlayfs to verified upstream source checksums; SlackBuild
  recipes, scripts/build-packages.sh, checksums.sh, release.sh, and
  update-versions.sh implement the reproducible pipeline; GitHub Actions
  workflows build in a Slackware container and publish releases without
  committing any binaries.

- plugin/podman.plg installs/updates/removes all eight packages (the
  seven components plus the plugin's own unraid-podman scaffolding
  package) via upgradepkg, using the official Unraid array-event hook
  mechanism (event/disks_mounted, event/stopping) instead of editing
  /boot/config/go. rc.podman and the sbin/ helper scripts implement
  storage creation, config seeding/sync, preflight checks, autostart
  with per-container Safe-Mode, and package verify/update/rollback.

- webui/plugins/podman implements the Dashboard, Containers, Pods,
  Images, Volumes, Networks, Logs, Terminal, Compose, and Settings
  panels against the approved mockup (webui/mockups/prototype.html),
  talking to podman system service exclusively via PodmanClient.php
  (libpod REST API over the Unix socket), with two documented
  exceptions: Terminal's one-shot exec model and Compose's use of the
  podman compose CLI, since libpod has no REST equivalent for either.

- docs/ARCHITECTURE.md and docs/ROADMAP.md record the design decisions
  and honest current status (syntax-checked, unit- and
  integration-tested against fake sockets/servers; not yet run against
  a real Unraid/Podman/Slackware system).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-11 10:51:14 +00:00

5.3 KiB

Roadmap

This roadmap mirrors the phase plan in ARCHITECTURE.md. It will be kept in sync as scope shifts; treat ARCHITECTURE.md as the source of truth for why, and this file as the tracking view for what/when.

Phase 1 — MVP (CLI core)

  • Repository scaffolding
  • Reproducible build system: versions.env pins, per-package SlackBuild scripts, scripts/build-packages.sh orchestrator, scripts/checksums.sh, scripts/release.sh, scripts/update-versions.sh, GitHub Actions (build-packages.yml, release.yml, lint.yml) — builds podman, conmon, crun, netavark, aardvark-dns, passt, fuse-overlayfs, and the plugin's own unraid-podman scaffolding package. Not yet run end-to-end in a real Slackware environment (see note below).
  • podman.plg install/update/remove manifest — validated well-formed (including full DTD entity expansion inside INLINE script blocks) and release-round-tripped against scripts/release.sh with synthetic build artifacts; not yet installed on a real Unraid system.
  • rc.podman init script (start/stop/restart/status)
  • Storage on cache pool (podman.img, XFS ftype=1, overlay driver) — podman-storage.sh
  • Config sync (/boot/config/plugins/podman//etc/containers/) — podman-config.sh (seed/sync logic sandbox-tested)
  • Autostart flat-file mechanism — podman-autostart.sh, including per-container Safe-Mode after repeated failures (parsing logic unit-tested)
  • Preflight checks & error handling (storage mount, disk space, kernel reqs) — podman-preflight.sh
  • Basic logging — podman_log/podman_log_error in podman-common.sh; log rotation still open (cron-based, see ARCHITECTURE.md section 15)
  • Package + config rollback (backup previous .txz / config snapshots) — podman-backup.sh; plus podman-verify-packages.sh and podman-update-packages.sh for integrity checking and reconciliation
  • Official Unraid array-event hooks (event/disks_mounted, event/stopping) instead of editing /boot/config/go — verified against real-world plugin source (unassigned.devices)
  • Real-world install/uninstall/update test on an actual (or virtualized) Unraid system — everything above has been syntax-checked, unit-tested in isolation, and XML-validated, but not run against real Unraid/ Podman/Slackware yet

Phase 2 — WebUI & network management

Built ahead of the original phase order (see webui/README.md and the mockup at webui/mockups/prototype.html, which was reviewed before implementation started) — PHP/JS/AJAX, talking to podman system service exclusively via PodmanClient (two documented, deliberate exceptions: the Terminal panel's one-shot exec model, and the Compose panel's use of the podman compose CLI, since libpod has no REST endpoint for either true PTY sessions or Compose — see those ajax/*.php files' header comments).

  • WebUI stage 1: read-only overview (Dashboard), start/stop/restart/remove for Containers/Pods, backend logic unit- and integration-tested against a fake podman.sock server (real Unix socket, real cURL transport)
  • Images, Volumes, Networks panels (list + create/remove/pull) — not part of the original "stage 2/3" split, built alongside stage 1 since the backend pattern (PodmanClient + one ajax/*.php file) is identical
  • Autostart management in GUI (Settings panel — reorder/remove, writes the same /boot/config/plugins/podman/autostart file podman-autostart.sh reads)
  • Log viewer (Logs panel, polling-based "Follow")
  • Terminal panel — one-shot exec, not a true interactive PTY (see ajax/exec.php); a real PTY would need a WebSocket bridge, tracked as a follow-up, not implemented as a shell-out workaround
  • Compose panel — project list + YAML view + up/down/pull via the podman compose CLI (the one deliberate CLI exception, see ajax/compose.php)
  • Container creation forms — the Containers panel manages the lifecycle of existing containers only; there is no "new container" form yet (the mockup shows one; the real implementation doesn't wire it up)
  • Custom network / macvlan creation UI beyond the basic name+subnet form already in the Networks panel
  • Real interactive PTY terminal (WebSocket bridge)
  • Storage snapshot feature (reflink-based, BTRFS/ZFS cache pools)
  • Run against a real Unraid + Podman install — the backend has been tested against a hand-written fake podman.sock server (verifying the transport layer, JSON shaping, and error handling genuinely work), not against real libpod

Phase 3 — Rootless & Docker-optional

  • Rootless Podman option
  • Docker enable/disable switch
  • Community Applications template compatibility layer

Phase 4 — Pods

  • Pod support (Quadlet-equivalent without systemd — approach TBD, see ARCHITECTURE.md open question)

Open questions blocking later phases

See ARCHITECTURE.md, section 21 for the current list (Podman version/update cadence, cache-pool requirement, service vs. on-demand start, iptables locking with Docker, release signing).