- 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>
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.envpins, per-packageSlackBuildscripts,scripts/build-packages.shorchestrator,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 ownunraid-podmanscaffolding package. Not yet run end-to-end in a real Slackware environment (see note below). podman.plginstall/update/remove manifest — validated well-formed (including full DTD entity expansion inside INLINE script blocks) and release-round-tripped againstscripts/release.shwith synthetic build artifacts; not yet installed on a real Unraid system.rc.podmaninit 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_errorinpodman-common.sh; log rotation still open (cron-based, see ARCHITECTURE.md section 15) - Package + config rollback (backup previous
.txz/ config snapshots) —podman-backup.sh; pluspodman-verify-packages.shandpodman-update-packages.shfor 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/autostartfilepodman-autostart.shreads) - 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 composeCLI (the one deliberate CLI exception, seeajax/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).