Replace vendored docker-compose with podman-compose
podman-compose and docker-compose aren't discovered the same way by `podman compose` - verified live (a fake-binary test reading podman's own provider-search error output) that docker-compose is searched for by exact path across a fixed list of CLI-plugin directories, while podman-compose is instead looked up as a plain command on $PATH. This package installs to /usr/local/bin/podman-compose accordingly, not under any cli-plugins/ directory. Unlike docker-compose (a single static Go binary), podman-compose is a Python script with two runtime dependencies neither of which ship with Unraid's own Python3 - PyYAML and python-dotenv, vendored here as plain pure-Python source (no C extension build; PyYAML's own fallback handles its optional C accelerator being absent). Verified end-to-end on a real host: with the previous docker-compose binary temporarily moved aside to confirm podman-compose was actually the one invoked, `podman compose up/ps/down` ran a real compose project correctly, including a live HTTP check against the started service. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@ name: Build Packages
|
|||||||
|
|
||||||
# Builds the eleven Slackware .txz packages defined under packages/
|
# Builds the eleven Slackware .txz packages defined under packages/
|
||||||
# (podman, conmon, crun, netavark, aardvark-dns, passt, fuse-overlayfs,
|
# (podman, conmon, crun, netavark, aardvark-dns, passt, fuse-overlayfs,
|
||||||
# catatonit, nftables, docker-compose, unraid-podman) inside a Slackware
|
# catatonit, nftables, podman-compose, unraid-podman) inside a Slackware
|
||||||
# container, verifies + consolidates their checksums, and uploads the
|
# container, verifies + consolidates their checksums, and uploads the
|
||||||
# result as a workflow artifact.
|
# result as a workflow artifact.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ wählen können — mit deutlicher GUI-Warnung bzgl. Performance und Spin-up-Ver
|
|||||||
| `passt`/`pasta` | Rootless-Networking | Nachfolger von slirp4netns, Phase 2, aber Paket schon mitbauen (geringe Kosten) |
|
| `passt`/`pasta` | Rootless-Networking | Nachfolger von slirp4netns, Phase 2, aber Paket schon mitbauen (geringe Kosten) |
|
||||||
| `catatonit` oder `tini` | Init-Prozess in Containern (optional, falls von Templates genutzt) | |
|
| `catatonit` oder `tini` | Init-Prozess in Containern (optional, falls von Templates genutzt) | |
|
||||||
| `nftables` | Firewall-Backend für `netavark` | Pflicht seit netavark 2.0 (iptables-Treiber entfernt); Unraid liefert kein `nft` mit — als offizielles Slackware-Paket vendored, nicht selbst gebaut |
|
| `nftables` | Firewall-Backend für `netavark` | Pflicht seit netavark 2.0 (iptables-Treiber entfernt); Unraid liefert kein `nft` mit — als offizielles Slackware-Paket vendored, nicht selbst gebaut |
|
||||||
| `docker-compose` (CLI-Plugin) | External-Compose-Provider für `podman compose` | `podman compose` hat keine eigene Compose-Implementierung, sondern sucht ein `docker-compose`-Binary in festen CLI-Plugin-Pfaden; ohne dieses Paket schlägt jede Compose-Panel-Aktion auf einem frischen Unraid-Install fehl |
|
| `podman-compose` | External-Compose-Provider für `podman compose` | `podman compose` hat keine eigene Compose-Implementierung, sondern sucht ein Kommando namens `podman-compose` auf `$PATH` (live verifiziert — anders als das ältere, ebenfalls unterstützte `docker-compose`, das stattdessen in festen CLI-Plugin-Pfaden gesucht wird); ohne dieses Paket schlägt jede Compose-Panel-Aktion auf einem frischen Unraid-Install fehl. Python-Skript, vendored zusammen mit PyYAML/python-dotenv als reines Python-Source (kein C-Build) |
|
||||||
|
|
||||||
### 5.2 Build-Strategie
|
### 5.2 Build-Strategie
|
||||||
|
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
# packages/docker-compose/
|
|
||||||
|
|
||||||
Pinned version: see `DOCKER_COMPOSE_VERSION` in [versions.env](../../versions.env).
|
|
||||||
|
|
||||||
Not built from source — `docker-compose.SlackBuild` fetches and repackages
|
|
||||||
upstream's own prebuilt static x86_64 release binary (`docker/compose`,
|
|
||||||
the Go-based Compose v2 CLI plugin — a different project from the older
|
|
||||||
Python `podman-compose`). It's a small, purely static ELF with zero
|
|
||||||
runtime library dependencies (verified: `ldd` reports "not a dynamic
|
|
||||||
executable"), so there's nothing meaningful to gain from a from-source
|
|
||||||
build.
|
|
||||||
|
|
||||||
`podman compose` (backing the WebUI's Compose panel, see
|
|
||||||
`webui/plugins/podman/ajax/compose.php`) has no compose implementation of
|
|
||||||
its own — it shells out to an "external compose provider" it discovers by
|
|
||||||
searching a fixed list of CLI-plugin directories for a binary named
|
|
||||||
`docker-compose`. Without one present, every Compose panel action fails
|
|
||||||
outright. Installed to `/usr/local/lib/docker/cli-plugins/docker-compose`
|
|
||||||
— one of podman's own search paths (extracted from the pinned podman
|
|
||||||
binary: `strings /usr/bin/podman | grep cli-plugins`), chosen specifically
|
|
||||||
under `/usr/local/` rather than `/usr/lib/docker/...` so this package
|
|
||||||
never collides with (or gets silently shadowed by) a genuine Docker
|
|
||||||
installation's own compose plugin on hosts that also run Unraid's
|
|
||||||
built-in Docker support.
|
|
||||||
|
|
||||||
Found by live-testing the Compose panel end-to-end against a real Unraid
|
|
||||||
install: it happened to work only because that particular host already
|
|
||||||
had Docker's own `docker-compose` plugin installed from an unrelated,
|
|
||||||
pre-existing Docker setup — a clean Unraid install has no compose
|
|
||||||
provider at all without this package. See
|
|
||||||
[docs/ARCHITECTURE.md, section 5.1](../../docs/ARCHITECTURE.md#51-zu-paketierende-komponenten).
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# =============================================================================
|
|
||||||
# packages/docker-compose/docker-compose.SlackBuild
|
|
||||||
#
|
|
||||||
# Packages the official prebuilt docker/compose v2 release binary — not
|
|
||||||
# built from source, see versions.env's DOCKER_COMPOSE_* block for why.
|
|
||||||
# `podman compose` (backing webui/plugins/podman/ajax/compose.php) has no
|
|
||||||
# compose implementation of its own; it shells out to an "external compose
|
|
||||||
# provider" it discovers by searching a fixed list of CLI-plugin
|
|
||||||
# directories for a binary literally named `docker-compose` (paths
|
|
||||||
# extracted from the pinned podman binary itself:
|
|
||||||
# `strings /usr/bin/podman | grep cli-plugins`). Without one present,
|
|
||||||
# every Compose panel action fails outright (found by live-testing against
|
|
||||||
# a real Unraid install — it only worked there because that host happened
|
|
||||||
# to already have Docker's own compose plugin from an unrelated setup).
|
|
||||||
#
|
|
||||||
# Installed to /usr/local/lib/docker/cli-plugins/docker-compose — one of
|
|
||||||
# podman's search paths, deliberately the /usr/local/ one rather than
|
|
||||||
# /usr/lib/docker/cli-plugins so this package never collides with (or
|
|
||||||
# gets silently shadowed by) a genuine Docker installation's own compose
|
|
||||||
# plugin on hosts that also run Unraid's built-in Docker support.
|
|
||||||
# =============================================================================
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
||||||
# shellcheck source=/dev/null
|
|
||||||
. "$REPO_ROOT/scripts/lib/slackbuild-common.sh"
|
|
||||||
# shellcheck source=/dev/null
|
|
||||||
. "$REPO_ROOT/versions.env"
|
|
||||||
|
|
||||||
VERSION="$DOCKER_COMPOSE_VERSION"
|
|
||||||
ARCH="$PKG_ARCH"
|
|
||||||
BUILD="$PKG_BUILD"
|
|
||||||
TAG="$PKG_TAG"
|
|
||||||
|
|
||||||
sb_init "docker-compose"
|
|
||||||
|
|
||||||
binary=$(sb_fetch_and_verify "$DOCKER_COMPOSE_SRC_URL" "$DOCKER_COMPOSE_SRC_SHA256" "docker-compose-$VERSION")
|
|
||||||
|
|
||||||
install -D -m 0755 "$binary" "$PKG/usr/local/lib/docker/cli-plugins/docker-compose"
|
|
||||||
|
|
||||||
# The release only ships the raw binary (+ checksum/signature files, no
|
|
||||||
# LICENSE/README asset) — write minimal doc metadata by hand instead of
|
|
||||||
# using sb_install_docs, which expects real files to copy from disk.
|
|
||||||
docdir="$PKG/usr/doc/docker-compose-$VERSION"
|
|
||||||
mkdir -p "$docdir"
|
|
||||||
{
|
|
||||||
echo "docker-compose (docker/compose v2 CLI plugin) $VERSION"
|
|
||||||
echo "https://github.com/docker/compose"
|
|
||||||
echo "Prebuilt static binary, packaged as-is by unraid-podman — see"
|
|
||||||
echo "versions.env for the pinned release URL and SHA256."
|
|
||||||
} > "$docdir/README"
|
|
||||||
{
|
|
||||||
echo "Built by unraid-podman from upstream's prebuilt release binary."
|
|
||||||
echo "Package: docker-compose $VERSION"
|
|
||||||
echo "Built: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
||||||
} > "$docdir/unraid-podman.build-info"
|
|
||||||
|
|
||||||
sb_make_package "$VERSION" "$ARCH" "$BUILD" "$TAG"
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
# HOW TO EDIT THIS FILE:
|
|
||||||
# The "handy ruler" below makes it easier to edit a package description.
|
|
||||||
# Line up the first '|' above the ':' following the base package name, and
|
|
||||||
# the '|' on the right side marks the last column you can put a character in.
|
|
||||||
# You must make exactly 11 lines for the formatting to be correct. It's also
|
|
||||||
# customary to leave one space after the ':' except on otherwise blank lines.
|
|
||||||
|
|
||||||
|-----handy-ruler------------------------------------------------|
|
|
||||||
docker-compose: docker-compose (external Compose provider for podman compose)
|
|
||||||
docker-compose:
|
|
||||||
docker-compose: The docker/compose v2 CLI-plugin binary, installed as a
|
|
||||||
docker-compose: CLI-plugin so `podman compose` can find it. Required by the
|
|
||||||
docker-compose: WebUI's Compose panel; packaged from upstream's prebuilt
|
|
||||||
docker-compose: static binary release, not built from source.
|
|
||||||
docker-compose:
|
|
||||||
docker-compose: Homepage: https://github.com/docker/compose
|
|
||||||
docker-compose:
|
|
||||||
docker-compose:
|
|
||||||
docker-compose:
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# packages/podman-compose/
|
||||||
|
|
||||||
|
Pinned versions: see `PODMAN_COMPOSE_VERSION`/`PYYAML_VERSION`/
|
||||||
|
`PYTHON_DOTENV_VERSION` in [versions.env](../../versions.env).
|
||||||
|
|
||||||
|
`podman compose` (backing `webui/plugins/podman/ajax/compose.php`, the
|
||||||
|
WebUI's Compose panel) has no compose implementation of its own — it
|
||||||
|
needs an external "compose provider" command. This project previously
|
||||||
|
vendored `docker/compose` (the Go CLI-plugin binary) for that role;
|
||||||
|
this package replaces it with `podman-compose` instead.
|
||||||
|
|
||||||
|
The two aren't discovered the same way — verified live against a real
|
||||||
|
podman install (placing a fake executable and reading podman's own
|
||||||
|
provider-search error output): `docker-compose` is searched for by exact
|
||||||
|
path across a fixed list of CLI-plugin directories, while `podman-compose`
|
||||||
|
is looked up as a plain command on `$PATH`. That's why this package
|
||||||
|
installs to `/usr/local/bin/podman-compose` rather than under any
|
||||||
|
`cli-plugins/` directory.
|
||||||
|
|
||||||
|
Unlike `docker-compose`, `podman-compose` is a single Python script, not a
|
||||||
|
compiled binary. Unraid ships Python3 itself but neither of its two
|
||||||
|
runtime dependencies, so this package also vendors:
|
||||||
|
|
||||||
|
- `PyYAML` — only the pure-Python `yaml/` package, not the `_yaml` C
|
||||||
|
extension (which would need libyaml plus a compiler). `yaml/__init__.py`
|
||||||
|
falls back gracefully when the C accelerator isn't importable, so the
|
||||||
|
pure-Python source is sufficient for what podman-compose needs from it.
|
||||||
|
- `python-dotenv` — pure Python throughout, no C extensions at all.
|
||||||
|
|
||||||
|
Verified end-to-end on a real Unraid host: the vendored bundle correctly
|
||||||
|
runs `podman compose up`/`ps`/`down` against a real compose project
|
||||||
|
(with the pre-existing `docker-compose` binary temporarily moved aside
|
||||||
|
to confirm `podman-compose` was the one actually being invoked, not a
|
||||||
|
leftover), including a live HTTP check against the started service.
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# =============================================================================
|
||||||
|
# packages/podman-compose/podman-compose.SlackBuild
|
||||||
|
#
|
||||||
|
# Packages podman-compose (github.com/containers/podman-compose) — the
|
||||||
|
# external "compose provider" `podman compose` shells out to (see
|
||||||
|
# versions.env's PODMAN_COMPOSE_* block for the full story, including why
|
||||||
|
# this replaces the project's earlier vendored docker-compose). Verified
|
||||||
|
# live against a real podman install that podman-compose is looked up as a
|
||||||
|
# plain $PATH command, unlike docker-compose's fixed CLI-plugin-directory
|
||||||
|
# search — so this installs a wrapper at /usr/local/bin/podman-compose.
|
||||||
|
#
|
||||||
|
# podman-compose itself is a single Python script (not a compiled binary),
|
||||||
|
# with two runtime dependencies — PyYAML and python-dotenv — vendored here
|
||||||
|
# as plain pure-Python source (no C extension build) since Unraid ships
|
||||||
|
# Python3 but neither of those modules.
|
||||||
|
# =============================================================================
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
. "$REPO_ROOT/scripts/lib/slackbuild-common.sh"
|
||||||
|
# shellcheck source=/dev/null
|
||||||
|
. "$REPO_ROOT/versions.env"
|
||||||
|
|
||||||
|
VERSION="$PODMAN_COMPOSE_VERSION"
|
||||||
|
ARCH="$PKG_ARCH"
|
||||||
|
BUILD="$PKG_BUILD"
|
||||||
|
TAG="$PKG_TAG"
|
||||||
|
|
||||||
|
sb_init "podman-compose"
|
||||||
|
|
||||||
|
script=$(sb_fetch_and_verify "$PODMAN_COMPOSE_SRC_URL" "$PODMAN_COMPOSE_SRC_SHA256" "podman_compose-$VERSION.py")
|
||||||
|
pyyaml_tarball=$(sb_fetch_and_verify "$PYYAML_SRC_URL" "$PYYAML_SRC_SHA256" "pyyaml-$PYYAML_VERSION.tar.gz")
|
||||||
|
dotenv_tarball=$(sb_fetch_and_verify "$PYTHON_DOTENV_SRC_URL" "$PYTHON_DOTENV_SRC_SHA256" "python-dotenv-$PYTHON_DOTENV_VERSION.tar.gz")
|
||||||
|
|
||||||
|
libdir="$PKG/usr/local/lib/podman-compose"
|
||||||
|
mkdir -p "$libdir"
|
||||||
|
install -m 0644 "$script" "$libdir/podman_compose.py"
|
||||||
|
|
||||||
|
# Only the pure-Python "yaml" package, not the "_yaml" C extension (which
|
||||||
|
# would need libyaml plus a compiler toolchain this build doesn't otherwise
|
||||||
|
# require) — see the header comment on why the pure-Python fallback is
|
||||||
|
# sufficient for what podman-compose actually needs from it.
|
||||||
|
tar -xzf "$pyyaml_tarball" -C "$TMP" "pyyaml-$PYYAML_VERSION/lib/yaml"
|
||||||
|
cp -r "$TMP/pyyaml-$PYYAML_VERSION/lib/yaml" "$libdir/yaml"
|
||||||
|
|
||||||
|
tar -xzf "$dotenv_tarball" -C "$TMP" "python_dotenv-$PYTHON_DOTENV_VERSION/src/dotenv"
|
||||||
|
cp -r "$TMP/python_dotenv-$PYTHON_DOTENV_VERSION/src/dotenv" "$libdir/dotenv"
|
||||||
|
|
||||||
|
# A thin wrapper, not a symlink or bare shebang: podman_compose.py's own
|
||||||
|
# shebang (whatever upstream wrote, a plain "#!/usr/bin/env python3") has
|
||||||
|
# no idea the vendored yaml/dotenv sit right next to it, so PYTHONPATH has
|
||||||
|
# to be set by whatever actually invokes the script.
|
||||||
|
install -d "$PKG/usr/local/bin"
|
||||||
|
cat > "$PKG/usr/local/bin/podman-compose" <<'WRAPPER'
|
||||||
|
#!/bin/sh
|
||||||
|
exec env PYTHONPATH="/usr/local/lib/podman-compose${PYTHONPATH:+:$PYTHONPATH}" \
|
||||||
|
/usr/bin/python3 /usr/local/lib/podman-compose/podman_compose.py "$@"
|
||||||
|
WRAPPER
|
||||||
|
chmod 0755 "$PKG/usr/local/bin/podman-compose"
|
||||||
|
|
||||||
|
docdir="$PKG/usr/doc/podman-compose-$VERSION"
|
||||||
|
mkdir -p "$docdir"
|
||||||
|
{
|
||||||
|
echo "podman-compose $VERSION"
|
||||||
|
echo "https://github.com/containers/podman-compose"
|
||||||
|
echo
|
||||||
|
echo "Vendored alongside its two runtime dependencies (bundled as plain"
|
||||||
|
echo "pure-Python source, no C extensions built):"
|
||||||
|
echo " PyYAML $PYYAML_VERSION - https://pypi.org/project/PyYAML/"
|
||||||
|
echo " python-dotenv $PYTHON_DOTENV_VERSION - https://pypi.org/project/python-dotenv/"
|
||||||
|
echo
|
||||||
|
echo "See versions.env for pinned source URLs and SHA256 checksums."
|
||||||
|
} > "$docdir/README"
|
||||||
|
{
|
||||||
|
echo "Built by unraid-podman from upstream source."
|
||||||
|
echo "Package: podman-compose $VERSION"
|
||||||
|
echo "Built: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
||||||
|
} > "$docdir/unraid-podman.build-info"
|
||||||
|
|
||||||
|
sb_make_package "$VERSION" "$ARCH" "$BUILD" "$TAG"
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# HOW TO EDIT THIS FILE:
|
||||||
|
# The "handy ruler" below makes it easier to edit a package description.
|
||||||
|
# Line up the first '|' above the ':' following the base package name, and
|
||||||
|
# the '|' on the right side marks the last column you can put a character in.
|
||||||
|
# You must make exactly 11 lines for the formatting to be correct. It's also
|
||||||
|
# customary to leave one space after the ':' except on otherwise blank lines.
|
||||||
|
|
||||||
|
|-----handy-ruler------------------------------------------------|
|
||||||
|
podman-compose: podman-compose (external Compose provider for podman compose)
|
||||||
|
podman-compose:
|
||||||
|
podman-compose: A Python script that implements Docker Compose file support
|
||||||
|
podman-compose: on top of podman, installed to /usr/local/bin so
|
||||||
|
podman-compose: `podman compose` finds it as its external provider.
|
||||||
|
podman-compose: Required by the WebUI's Compose panel. Bundled with its
|
||||||
|
podman-compose: two runtime dependencies (PyYAML, python-dotenv) as plain
|
||||||
|
podman-compose: pure-Python source.
|
||||||
|
podman-compose:
|
||||||
|
podman-compose: Homepage: https://github.com/containers/podman-compose
|
||||||
|
podman-compose:
|
||||||
+12
-12
@@ -33,7 +33,7 @@
|
|||||||
Structure of this file:
|
Structure of this file:
|
||||||
1. DOCTYPE entity block — plugin metadata + one version/file/md5 triple
|
1. DOCTYPE entity block — plugin metadata + one version/file/md5 triple
|
||||||
per package (the seven upstream components, catatonit/nftables/
|
per package (the seven upstream components, catatonit/nftables/
|
||||||
docker-compose as vendored runtime dependencies, plus this
|
podman-compose as vendored runtime dependencies, plus this
|
||||||
project's own "unraid-podman" scaffolding package, see
|
project's own "unraid-podman" scaffolding package, see
|
||||||
packages/unraid-podman/).
|
packages/unraid-podman/).
|
||||||
Entities are rewritten automatically by scripts/release.sh; never
|
Entities are rewritten automatically by scripts/release.sh; never
|
||||||
@@ -122,12 +122,12 @@
|
|||||||
<!ENTITY nftables_txz_file "nftables-&nftables_txz_version;-&pkgArch;-&pkgBuild;&pkgTag;.txz">
|
<!ENTITY nftables_txz_file "nftables-&nftables_txz_version;-&pkgArch;-&pkgBuild;&pkgTag;.txz">
|
||||||
<!ENTITY nftables_txz_md5 "00000000000000000000000000000000">
|
<!ENTITY nftables_txz_md5 "00000000000000000000000000000000">
|
||||||
|
|
||||||
<!-- docker-compose is the external Compose provider `podman compose`
|
<!-- podman-compose is the external Compose provider `podman compose`
|
||||||
shells out to (see packages/docker-compose/README.md) — without it
|
shells out to (see packages/podman-compose/README.md) — without it
|
||||||
every Compose panel action fails outright on a clean install. -->
|
every Compose panel action fails outright on a clean install. -->
|
||||||
<!ENTITY docker_compose_txz_version "0.0.0">
|
<!ENTITY podman_compose_txz_version "0.0.0">
|
||||||
<!ENTITY docker_compose_txz_file "docker-compose-&docker_compose_txz_version;-&pkgArch;-&pkgBuild;&pkgTag;.txz">
|
<!ENTITY podman_compose_txz_file "podman-compose-&podman_compose_txz_version;-&pkgArch;-&pkgBuild;&pkgTag;.txz">
|
||||||
<!ENTITY docker_compose_txz_md5 "00000000000000000000000000000000">
|
<!ENTITY podman_compose_txz_md5 "00000000000000000000000000000000">
|
||||||
|
|
||||||
<!-- unraid-podman is this project's OWN scaffolding package (rc.podman,
|
<!-- unraid-podman is this project's OWN scaffolding package (rc.podman,
|
||||||
sbin/ scripts, event/ hooks, config templates — see
|
sbin/ scripts, event/ hooks, config templates — see
|
||||||
@@ -181,7 +181,7 @@ fi
|
|||||||
|
|
||||||
<!--
|
<!--
|
||||||
The seven upstream component packages, plus catatonit, nftables, and
|
The seven upstream component packages, plus catatonit, nftables, and
|
||||||
docker-compose (runtime dependencies vendored as-is — see the entity
|
podman-compose (runtime dependencies vendored as-is — see the entity
|
||||||
block above for why). Each is downloaded straight into
|
block above for why). Each is downloaded straight into
|
||||||
its backup slot under /boot/config/plugins/&name;/backup/packages/&version;/
|
its backup slot under /boot/config/plugins/&name;/backup/packages/&version;/
|
||||||
(grouped by PLUGIN version, not each component's own version — a rollback
|
(grouped by PLUGIN version, not each component's own version — a rollback
|
||||||
@@ -275,12 +275,12 @@ fi
|
|||||||
</MD5>
|
</MD5>
|
||||||
</FILE>
|
</FILE>
|
||||||
|
|
||||||
<FILE Name="/boot/config/plugins/&name;/backup/packages/&version;/&docker_compose_txz_file;" Run="upgradepkg --install-new --reinstall">
|
<FILE Name="/boot/config/plugins/&name;/backup/packages/&version;/&podman_compose_txz_file;" Run="upgradepkg --install-new --reinstall">
|
||||||
<URL>
|
<URL>
|
||||||
&baseURL;/&docker_compose_txz_file;
|
&baseURL;/&podman_compose_txz_file;
|
||||||
</URL>
|
</URL>
|
||||||
<MD5>
|
<MD5>
|
||||||
&docker_compose_txz_md5;
|
&podman_compose_txz_md5;
|
||||||
</MD5>
|
</MD5>
|
||||||
</FILE>
|
</FILE>
|
||||||
|
|
||||||
@@ -345,7 +345,7 @@ echo "PASST_INSTALLED_VERSION=\"&passt_txz_version;\"" >> "$MANIFEST"
|
|||||||
echo "FUSE_OVERLAYFS_INSTALLED_VERSION=\"&fuse_overlayfs_txz_version;\"" >> "$MANIFEST"
|
echo "FUSE_OVERLAYFS_INSTALLED_VERSION=\"&fuse_overlayfs_txz_version;\"" >> "$MANIFEST"
|
||||||
echo "CATATONIT_INSTALLED_VERSION=\"&catatonit_txz_version;\"" >> "$MANIFEST"
|
echo "CATATONIT_INSTALLED_VERSION=\"&catatonit_txz_version;\"" >> "$MANIFEST"
|
||||||
echo "NFTABLES_INSTALLED_VERSION=\"&nftables_txz_version;\"" >> "$MANIFEST"
|
echo "NFTABLES_INSTALLED_VERSION=\"&nftables_txz_version;\"" >> "$MANIFEST"
|
||||||
echo "DOCKER_COMPOSE_INSTALLED_VERSION=\"&docker_compose_txz_version;\"" >> "$MANIFEST"
|
echo "PODMAN_COMPOSE_INSTALLED_VERSION=\"&podman_compose_txz_version;\"" >> "$MANIFEST"
|
||||||
echo "UNRAID_PODMAN_INSTALLED_VERSION=\"&unraid_podman_txz_version;\"" >> "$MANIFEST"
|
echo "UNRAID_PODMAN_INSTALLED_VERSION=\"&unraid_podman_txz_version;\"" >> "$MANIFEST"
|
||||||
|
|
||||||
echo "Seeding /boot/config/plugins/podman/ configuration (existing files left untouched)..."
|
echo "Seeding /boot/config/plugins/podman/ configuration (existing files left untouched)..."
|
||||||
@@ -408,7 +408,7 @@ removepkg &passt_txz_file;
|
|||||||
removepkg &fuse_overlayfs_txz_file;
|
removepkg &fuse_overlayfs_txz_file;
|
||||||
removepkg &catatonit_txz_file;
|
removepkg &catatonit_txz_file;
|
||||||
removepkg &nftables_txz_file;
|
removepkg &nftables_txz_file;
|
||||||
removepkg &docker_compose_txz_file;
|
removepkg &podman_compose_txz_file;
|
||||||
removepkg &unraid_podman_txz_file;
|
removepkg &unraid_podman_txz_file;
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||||||
. "$SCRIPT_DIR/podman-common.sh"
|
. "$SCRIPT_DIR/podman-common.sh"
|
||||||
|
|
||||||
INSTALLED_VERSIONS_FILE="/usr/local/share/unraid-podman/installed-versions.env"
|
INSTALLED_VERSIONS_FILE="/usr/local/share/unraid-podman/installed-versions.env"
|
||||||
ALL_PACKAGES="podman conmon crun netavark aardvark-dns passt fuse-overlayfs catatonit nftables docker-compose unraid-podman"
|
ALL_PACKAGES="podman conmon crun netavark aardvark-dns passt fuse-overlayfs catatonit nftables podman-compose unraid-podman"
|
||||||
|
|
||||||
if [ ! -f "$INSTALLED_VERSIONS_FILE" ]; then
|
if [ ! -f "$INSTALLED_VERSIONS_FILE" ]; then
|
||||||
podman_log_error "update-packages: $INSTALLED_VERSIONS_FILE missing — plugin install metadata not found"
|
podman_log_error "update-packages: $INSTALLED_VERSIONS_FILE missing — plugin install metadata not found"
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||||||
. "$SCRIPT_DIR/podman-common.sh"
|
. "$SCRIPT_DIR/podman-common.sh"
|
||||||
|
|
||||||
INSTALLED_VERSIONS_FILE="/usr/local/share/unraid-podman/installed-versions.env"
|
INSTALLED_VERSIONS_FILE="/usr/local/share/unraid-podman/installed-versions.env"
|
||||||
PACKAGES="podman conmon crun netavark aardvark-dns passt fuse-overlayfs catatonit nftables docker-compose unraid-podman"
|
PACKAGES="podman conmon crun netavark aardvark-dns passt fuse-overlayfs catatonit nftables podman-compose unraid-podman"
|
||||||
|
|
||||||
QUIET=0
|
QUIET=0
|
||||||
[ "${1:-}" = "--quiet" ] && QUIET=1
|
[ "${1:-}" = "--quiet" ] && QUIET=1
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# Orchestrates building all Slackware .txz packages this plugin ships
|
# Orchestrates building all Slackware .txz packages this plugin ships
|
||||||
# (podman, conmon, crun, netavark, aardvark-dns, passt, fuse-overlayfs,
|
# (podman, conmon, crun, netavark, aardvark-dns, passt, fuse-overlayfs,
|
||||||
# catatonit, nftables, docker-compose), by running each package's
|
# catatonit, nftables, podman-compose), by running each package's
|
||||||
# <name>.SlackBuild in turn. See docs/ARCHITECTURE.md section 5.2
|
# <name>.SlackBuild in turn. See docs/ARCHITECTURE.md section 5.2
|
||||||
# (Build-Strategie).
|
# (Build-Strategie).
|
||||||
#
|
#
|
||||||
@@ -38,12 +38,14 @@ DIST_DIR="$REPO_ROOT/dist"
|
|||||||
# see packages/unraid-podman/README.md) is built last since it's by far the
|
# 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
|
# fastest and has nothing useful to report on failure that earlier package
|
||||||
# failures wouldn't already explain.
|
# failures wouldn't already explain.
|
||||||
ALL_PACKAGES=(catatonit nftables docker-compose conmon crun netavark aardvark-dns passt fuse-overlayfs podman unraid-podman)
|
ALL_PACKAGES=(catatonit nftables podman-compose conmon crun netavark aardvark-dns passt fuse-overlayfs podman unraid-podman)
|
||||||
|
|
||||||
# catatonit, nftables, and docker-compose are listed first since they're
|
# catatonit, nftables, and podman-compose are listed first since none of
|
||||||
# all a plain fetch-and-repackage of an already-built upstream artifact
|
# them involve a compiler — catatonit/nftables are a plain
|
||||||
# (see their own README.md for why) — no compiler, fastest possible
|
# fetch-and-repackage of an already-built upstream artifact, and
|
||||||
# signal if their pinned URL/checksum in versions.env ever goes stale.
|
# podman-compose is vendored pure-Python source with nothing to compile
|
||||||
|
# (see their own README.md/SlackBuild for why) — fastest possible signal
|
||||||
|
# if a pinned URL/checksum in versions.env ever goes stale.
|
||||||
# Podman is listed second-to-last on purpose: among the compiled
|
# 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
|
# components it is the slowest build and the one most likely to fail on
|
||||||
# a dependency/tag mistake, so faster packages surface problems first
|
# a dependency/tag mistake, so faster packages surface problems first
|
||||||
|
|||||||
+2
-2
@@ -54,12 +54,12 @@ RELEASE_BASE_URL="https://github.com/$REPO_SLUG/releases/download/$RELEASE_TAG"
|
|||||||
|
|
||||||
# Component name -> the entity name prefix used in podman.plg. Must match
|
# Component name -> the entity name prefix used in podman.plg. Must match
|
||||||
# plugin/podman.plg's <!ENTITY NAME_txz_...> declarations exactly.
|
# plugin/podman.plg's <!ENTITY NAME_txz_...> declarations exactly.
|
||||||
# catatonit, nftables, and docker-compose are vendored runtime
|
# catatonit, nftables, and podman-compose are vendored runtime
|
||||||
# dependencies (not built from source, see their own packages/*/README.md)
|
# dependencies (not built from source, see their own packages/*/README.md)
|
||||||
# and unraid-podman is the plugin's own scaffolding package (see
|
# and unraid-podman is the plugin's own scaffolding package (see
|
||||||
# packages/unraid-podman/README.md), not an upstream component, but all
|
# packages/unraid-podman/README.md), not an upstream component, but all
|
||||||
# four are released and entity-updated exactly like the seven upstream ones.
|
# four are released and entity-updated exactly like the seven upstream ones.
|
||||||
COMPONENTS=(podman conmon crun netavark aardvark-dns passt fuse-overlayfs catatonit nftables docker-compose unraid-podman)
|
COMPONENTS=(podman conmon crun netavark aardvark-dns passt fuse-overlayfs catatonit nftables podman-compose unraid-podman)
|
||||||
|
|
||||||
echo "==> Releasing unraid-podman plugin v$NEW_VERSION (packages tag: $RELEASE_TAG)"
|
echo "==> Releasing unraid-podman plugin v$NEW_VERSION (packages tag: $RELEASE_TAG)"
|
||||||
|
|
||||||
|
|||||||
+29
-15
@@ -120,22 +120,36 @@ NFTABLES_VERSION="1.0.1"
|
|||||||
NFTABLES_SRC_URL="http://slackware.osuosl.org/slackware64-15.0/slackware64/n/nftables-${NFTABLES_VERSION}-x86_64-1.txz"
|
NFTABLES_SRC_URL="http://slackware.osuosl.org/slackware64-15.0/slackware64/n/nftables-${NFTABLES_VERSION}-x86_64-1.txz"
|
||||||
NFTABLES_SRC_SHA256="239e70d48edd6667ce875ff0d339b6f63c1fc94c472524d58772310b1006d31c"
|
NFTABLES_SRC_SHA256="239e70d48edd6667ce875ff0d339b6f63c1fc94c472524d58772310b1006d31c"
|
||||||
|
|
||||||
# --- docker-compose ----------------------------------------------------------
|
# --- podman-compose -----------------------------------------------------------
|
||||||
# https://github.com/docker/compose — the Compose v2 CLI-plugin binary
|
# https://github.com/containers/podman-compose — `podman compose` (backing
|
||||||
# (Go, not the older Python podman-compose). `podman compose` (backing
|
|
||||||
# webui/plugins/podman/ajax/compose.php, the WebUI's Compose panel) has no
|
# webui/plugins/podman/ajax/compose.php, the WebUI's Compose panel) has no
|
||||||
# compose implementation of its own — it searches a fixed set of
|
# compose implementation of its own; it needs an external "compose
|
||||||
# CLI-plugin directories for a binary named exactly "docker-compose" and
|
# provider" command. This project previously vendored docker/compose (the
|
||||||
# shells out to it. Without one present, every Compose panel action fails
|
# Go CLI-plugin binary) for that role, found by podman searching a fixed
|
||||||
# outright (found by live-testing: it only worked on the test host because
|
# set of CLI-plugin directories for a binary named exactly
|
||||||
# that host happened to already have Docker's own compose plugin
|
# "docker-compose". podman-compose is looked up differently — verified
|
||||||
# installed from an unrelated, pre-existing Docker setup — a clean Unraid
|
# live (placing a fake executable and watching podman's own error output
|
||||||
# install has none). Upstream publishes a prebuilt static x86_64 binary
|
# list its search order) that it's found as a plain command on $PATH,
|
||||||
# release asset (verified via `ldd`: "not a dynamic executable") plus a
|
# not from those same CLI-plugin directories — so it's installed as
|
||||||
# matching .sha256 sidecar — no from-source build needed.
|
# /usr/local/bin/podman-compose, not under any cli-plugins/ path.
|
||||||
DOCKER_COMPOSE_VERSION="5.3.1"
|
#
|
||||||
DOCKER_COMPOSE_SRC_URL="https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-linux-x86_64"
|
# Unlike docker-compose, podman-compose is a single Python script, not a
|
||||||
DOCKER_COMPOSE_SRC_SHA256="f9ebc6ebdb19d769b793c245a736caaeb198c62587f13b25c660c13b4987f959"
|
# compiled binary — Unraid ships Python3 itself, but not either of its two
|
||||||
|
# runtime dependencies (PyYAML, python-dotenv), so those are vendored
|
||||||
|
# alongside it as plain pure-Python source (no C extension build; PyYAML's
|
||||||
|
# own __init__.py falls back gracefully when its optional C accelerator
|
||||||
|
# isn't importable — verified by reading it, not assumed).
|
||||||
|
PODMAN_COMPOSE_VERSION="1.6.0"
|
||||||
|
PODMAN_COMPOSE_SRC_URL="https://raw.githubusercontent.com/containers/podman-compose/v${PODMAN_COMPOSE_VERSION}/podman_compose.py"
|
||||||
|
PODMAN_COMPOSE_SRC_SHA256="10df1662477a673dc803c03e89c1bc1fba6c8c091e716fb6c7dd09c0081e1255"
|
||||||
|
|
||||||
|
PYYAML_VERSION="6.0.3"
|
||||||
|
PYYAML_SRC_URL="https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-${PYYAML_VERSION}.tar.gz"
|
||||||
|
PYYAML_SRC_SHA256="d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"
|
||||||
|
|
||||||
|
PYTHON_DOTENV_VERSION="1.2.2"
|
||||||
|
PYTHON_DOTENV_SRC_URL="https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-${PYTHON_DOTENV_VERSION}.tar.gz"
|
||||||
|
PYTHON_DOTENV_SRC_SHA256="2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Slackware package BUILD number (not upstream version). Bump this if a
|
# Slackware package BUILD number (not upstream version). Bump this if a
|
||||||
|
|||||||
Reference in New Issue
Block a user