- Package #9-11: catatonit (pod infra init), nftables (netavark firewall backend), docker-compose (external compose provider for `podman compose`) — all vendored prebuilt binaries, versions.env pinned, propagated through build-packages.sh/release.sh/podman.plg/verify+update-packages.sh. - Fix WebUI: every POST action was silently failing (empty response body) because Unraid's own CSRF protection was never satisfied — app.js now sends the page's csrf_token as X-CSRF-Token. - Fix WebUI: PodmanClient::pullImage() assumed a single JSON response, but /images/pull actually streams newline-delimited JSON — every successful pull was throwing "Expected a JSON object/array response". - Fix WebUI: compose.php's up/down status detection had the same single-JSON-vs-NDJSON bug for `podman compose ps`, plus stderr was corrupting the parse. - Add cache-busting (?v=<mtime>) to Podman.page's script/style tags so a redeployed JS/CSS fix isn't served stale from browser cache. - Add a reusable modal dialog (app.js openFormModal) replacing prompt()/alert() for New Volume/Network/Pull Image. - Add host-path (bind-mount) support when creating a named volume. - Add Create Container (image, name, network mode incl. custom networks, ports, volumes, env, restart policy, privileged, start-after-create), auto-pulling the image on first use since /containers/create doesn't. All fixes verified live against a real podman system service and, where reachable, via the actual WebUI over the real socket — not just unit-level. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
109 lines
4.1 KiB
Bash
Executable File
109 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# scripts/build-packages.sh
|
|
#
|
|
# Orchestrates building all Slackware .txz packages this plugin ships
|
|
# (podman, conmon, crun, netavark, aardvark-dns, passt, fuse-overlayfs,
|
|
# catatonit, nftables, docker-compose), by running each package's
|
|
# <name>.SlackBuild in turn. See docs/ARCHITECTURE.md section 5.2
|
|
# (Build-Strategie).
|
|
#
|
|
# This script itself does not containerize anything — it assumes it is
|
|
# already running inside a Slackware-compatible build environment (see
|
|
# .github/workflows/build-packages.yml, which runs it inside a pinned
|
|
# Slackware Docker image). Running it on a non-Slackware host will likely
|
|
# still compile successfully for most components but the resulting .txz
|
|
# should not be trusted for an actual Unraid install — see the container
|
|
# image note in the CI workflow.
|
|
#
|
|
# Usage:
|
|
# scripts/build-packages.sh # build all packages
|
|
# scripts/build-packages.sh podman conmon # build only the named ones
|
|
#
|
|
# Output: $REPO_ROOT/dist/<name>-<version>-<arch>-<build><tag>.txz
|
|
# plus a .sha256 and .md5 sidecar file per package (see
|
|
# scripts/lib/slackbuild-common.sh, sb_make_package).
|
|
# Nothing under dist/ is committed to git — see .gitignore.
|
|
# =============================================================================
|
|
|
|
set -eu
|
|
|
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
PACKAGES_DIR="$REPO_ROOT/packages"
|
|
DIST_DIR="$REPO_ROOT/dist"
|
|
|
|
# The full, ordered set of packages this project builds automatically.
|
|
# containers-common is intentionally excluded for now — see packages/README.md.
|
|
# unraid-podman (the plugin's own scaffolding, not an upstream component —
|
|
# see packages/unraid-podman/README.md) is built last since it's by far the
|
|
# fastest and has nothing useful to report on failure that earlier package
|
|
# failures wouldn't already explain.
|
|
ALL_PACKAGES=(catatonit nftables docker-compose conmon crun netavark aardvark-dns passt fuse-overlayfs podman unraid-podman)
|
|
|
|
# catatonit, nftables, and docker-compose are listed first since they're
|
|
# all a plain fetch-and-repackage of an already-built upstream artifact
|
|
# (see their own README.md for why) — no compiler, fastest possible
|
|
# signal if their pinned URL/checksum in versions.env ever goes stale.
|
|
# Podman is listed second-to-last on purpose: among the compiled
|
|
# components it is the slowest build and the one most likely to fail on
|
|
# a dependency/tag mistake, so faster packages surface problems first
|
|
# during local iteration. unraid-podman is genuinely last since it
|
|
# packages this repo's own files and has no compile step at all.
|
|
|
|
requested=("$@")
|
|
if [ "${#requested[@]}" -eq 0 ]; then
|
|
targets=("${ALL_PACKAGES[@]}")
|
|
else
|
|
targets=("${requested[@]}")
|
|
fi
|
|
|
|
mkdir -p "$DIST_DIR"
|
|
|
|
echo "==> Building packages: ${targets[*]}"
|
|
echo "==> Output directory: $DIST_DIR"
|
|
echo
|
|
|
|
failed=()
|
|
built=()
|
|
|
|
for name in "${targets[@]}"; do
|
|
slackbuild="$PACKAGES_DIR/$name/$name.SlackBuild"
|
|
|
|
if [ ! -x "$slackbuild" ]; then
|
|
echo "!! No SlackBuild found/executable for '$name' ($slackbuild)" >&2
|
|
failed+=("$name")
|
|
continue
|
|
fi
|
|
|
|
echo "############################################################"
|
|
echo "## Building: $name"
|
|
echo "############################################################"
|
|
|
|
# Run each SlackBuild with OUTPUT pointed at the shared dist/ directory,
|
|
# so every package's .txz ends up in one place regardless of the
|
|
# per-package TMP/PKG scratch dirs it uses internally.
|
|
if OUTPUT="$DIST_DIR" "$slackbuild"; then
|
|
built+=("$name")
|
|
else
|
|
echo "!! Build failed: $name" >&2
|
|
failed+=("$name")
|
|
fi
|
|
echo
|
|
done
|
|
|
|
echo "============================================================"
|
|
echo "Build summary"
|
|
echo "============================================================"
|
|
echo "Succeeded (${#built[@]}): ${built[*]:-none}"
|
|
echo "Failed (${#failed[@]}): ${failed[*]:-none}"
|
|
|
|
if [ "${#failed[@]}" -gt 0 ]; then
|
|
echo
|
|
echo "!! One or more packages failed to build — see log above." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
echo "All packages built successfully. Artifacts in $DIST_DIR:"
|
|
ls -1 "$DIST_DIR"
|