podman-verify-packages.sh/podman-update-packages.sh reported every
package as "not installed" right after a genuinely successful install.
Root cause: /var/log/packages is itself a symlink on Unraid (->
../lib/pkgtools/packages), and GNU find's default -P mode doesn't
descend into a symlinked starting path at all without -L — confirmed
live by running the exact same find both with and without -L against a
host where the packages had just installed successfully.
Fixing that alone surfaced a second, previously-masked bug: "podman"'s
own glob also matches podman-compose's file (a literal prefix
collision), and find's unsorted output let podman-compose's record
silently win podman's own check.
Both fixed once via a new shared podman_find_installed_package_record()
helper in podman-common.sh, rather than separately in each caller.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Fixes a real bug in scripts/release.sh's per-package entity matching
found while cutting this release: "podman"'s own glob also matched
podman-compose's file (podman is a literal prefix of podman-compose),
and find | head -n1's unsorted output order let podman-compose's
package silently win the "podman" entity on this run. Now explicitly
skips any match that actually belongs to a different, more specific
component name also in the COMPONENTS list.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Dashboard:
- Plain-count stat tiles (Running/Stopped/Pods/Images/Volumes/Networks)
separated from a single "Resource Usage" card (CPU/Memory/Swap/Storage
meter rows) instead of forcing both into one tile grid, which produced
awkward spanning-tile/dead-cell layouts.
- Fixed CPU usage never changing (libpod's own cpuUtilization is computed
once and never resampled) by computing it from /proc/stat deltas instead.
- Fixed memory usage reading far too high by using /proc/meminfo's
MemAvailable instead of libpod's raw (non-reclaimable-aware) memFree.
- Added an Autostart Queue table reusing podman-autostart.sh's own
failure-counter files.
- Dashboard and Containers now auto-refresh every ~2s (paused when the
tab is hidden or a modal is open).
Toasts:
- Real success/warn/error/info toast notifications replacing every
alert() used for one-way feedback, across every panel.
Container detail modal:
- 5 new tabs: Resources, Logs, Console, Events, Healthcheck.
Containers panel:
- Folders to group containers (name + icon), stored in the plugin's own
folders.json — a folder's header always shows an icon+name+status chip
per member, matching Unraid's own Docker page folders. "Move to
Folder" becomes "Remove from Folder" once a container is already
grouped.
- Containers can carry an icon URL and a WebUI URL (small button next to
the name), both stored as container labels and auto-filled from
templates where applicable.
- Settings: an "Add container" control for the Autostart order table.
Fixes:
- Context menus now measure their own rendered size and flip above the
anchor when there isn't room below, instead of running off-screen.
- Containers table now uses table-layout:fixed with explicit column
widths — auto layout was shifting every column (and the header) on
every folder expand/collapse, and briefly again when a flex wrapper
was mistakenly placed directly on a <td>.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Built and verified via Gitea Actions (build-packages.yml run 124,
commit 9b9d1a0, all 11 packages succeeded). Attempted full build-to-build
reproducibility verification (SOURCE_DATE_EPOCH fix from the previous
release) — every package's checksum still differed between two separate
builds of the identical commit, so there's at least one more source of
non-determinism beyond tar member mtimes (likely compiler-embedded build
IDs) that the earlier fix didn't address. Given that, this release was
cut and published the same way v0.1.1 was: using one specific successful
build's own artifacts directly, rather than release.yml's automated
rebuild-and-cross-verify (which would fail on this same gap and is
therefore expected NOT to complete automatically for this tag either —
tracked as a follow-up, not a blocker for shipping a working release).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
v0.1.0's <URL>/<MD5> entity values were split across their own lines
inside the tags. Unraid's plugin manager (scripts/plugin, see download())
passes that raw text straight into a `wget ... -O $name $url` shell
command without trimming whitespace, so the leading newline split the
command in two: wget got no URL argument ("wget: missing URL") and the
URL text itself ran as a separate, failing shell command
("sh: line 2: https://...: No such file or directory") — which the
installer then reported as "download failure: zero-length file",
looking like a network problem when it was a formatting bug.
Confirmed live: v0.1.0 fails to install on a real Unraid host (reproduced
via the plugin manager's own CLI, scripts/plugin install, not just the
webGUI). Every real Unraid plugin keeps <URL>...</URL> on one line
(verified against unassigned.devices.plg on the same host) — this fix
matches that convention. Package contents are unchanged from v0.1.0; only
podman.plg's XML formatting and the version/baseURL entities are bumped.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
First cut release, built and verified via Gitea Actions (build-packages.yml
run against commit 18b414d, all 11 packages succeeded). Repo lives on
Gitea (git.mp-mueller.de), not GitHub — scripts/release.sh and
plugin/podman.plg's github/gitURL/supportURL/baseURL entities are updated
to point there instead of the GitHub placeholders they had before (this
project has never actually had a GitHub remote).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- 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>