- 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>
101 lines
5.3 KiB
Markdown
101 lines
5.3 KiB
Markdown
# Roadmap
|
|
|
|
This roadmap mirrors the phase plan in
|
|
[ARCHITECTURE.md](ARCHITECTURE.md#20-phasenplan). 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)
|
|
|
|
- [x] Repository scaffolding
|
|
- [x] 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).
|
|
- [x] `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.
|
|
- [x] `rc.podman` init script (start/stop/restart/status)
|
|
- [x] Storage on cache pool (`podman.img`, XFS ftype=1, overlay driver) —
|
|
`podman-storage.sh`
|
|
- [x] Config sync (`/boot/config/plugins/podman/` ↔ `/etc/containers/`) —
|
|
`podman-config.sh` (seed/sync logic sandbox-tested)
|
|
- [x] Autostart flat-file mechanism — `podman-autostart.sh`, including
|
|
per-container Safe-Mode after repeated failures (parsing logic
|
|
unit-tested)
|
|
- [x] Preflight checks & error handling (storage mount, disk space, kernel
|
|
reqs) — `podman-preflight.sh`
|
|
- [x] Basic logging — `podman_log`/`podman_log_error` in `podman-common.sh`;
|
|
log rotation still open (cron-based, see ARCHITECTURE.md section 15)
|
|
- [x] 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
|
|
- [x] 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](../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).
|
|
|
|
- [x] 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)
|
|
- [x] 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
|
|
- [x] Autostart management in GUI (Settings panel — reorder/remove, writes
|
|
the same `/boot/config/plugins/podman/autostart` file
|
|
`podman-autostart.sh` reads)
|
|
- [x] Log viewer (Logs panel, polling-based "Follow")
|
|
- [x] 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
|
|
- [x] 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](ARCHITECTURE.md#21-offene-fragen--risiken) for
|
|
the current list (Podman version/update cadence, cache-pool requirement, service
|
|
vs. on-demand start, iptables locking with Docker, release signing).
|