#!/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"