From 30c6b94d8c72764d64798016f01cc220182a173a Mon Sep 17 00:00:00 2001 From: nocci Date: Fri, 12 Dec 2025 11:24:40 +0000 Subject: [PATCH] Support vendor tarballs for exchange/merchant; pass tarball args --- .env.example | 2 ++ Dockerfile | 49 +++++++++++++++++++++++++++++++++++++----- README-DE.md | 2 +- README.md | 2 +- scripts/build-image.sh | 2 ++ 5 files changed, 50 insertions(+), 7 deletions(-) diff --git a/.env.example b/.env.example index 1ea5dc9..1b57444 100644 --- a/.env.example +++ b/.env.example @@ -45,6 +45,8 @@ EXCHANGE_REF=master MERCHANT_REF=master LIBEUFIN_REF=master GNUNET_TARBALL_URL=https://git-www.taler.net/gnunet.git/snapshot/gnunet-512c42a713e52a2033928a302e445376d3bcb3a7.tar.gz +EXCHANGE_TARBALL_URL= +MERCHANT_TARBALL_URL= # Secrets path (host path mounted into /etc/taler/secrets) EXCHANGE_SECRETS_PATH=./exchange/secrets diff --git a/Dockerfile b/Dockerfile index d41b45c..d02c1bf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,6 +9,8 @@ ARG MERCHANT_REF=master ARG LIBEUFIN_REF=master # Optional tarball URLs (when set, git clone is skipped) ARG GNUNET_TARBALL_URL= +ARG EXCHANGE_TARBALL_URL= +ARG MERCHANT_TARBALL_URL= RUN apt-get update && apt-get install -y \ build-essential git automake libtool pkg-config \ @@ -62,11 +64,48 @@ RUN set -e; \ ./configure --prefix=/usr && make -j$(nproc) && make install # Taler Exchange + Merchant -RUN git clone --depth 1 --branch "${EXCHANGE_REF}" https://git.taler.net/exchange.git /src/exchange && \ - cd /src/exchange && ./bootstrap && \ - ./configure --prefix=/usr && make -j$(nproc) && make install && \ - git clone --depth 1 --branch "${MERCHANT_REF}" https://git.taler.net/merchant.git /src/merchant && \ - cd /src/merchant && ./bootstrap && \ +RUN set -e; \ + # Exchange + EXCHANGE_DIR=""; \ + if ls /vendor/exchange*.tar.gz >/dev/null 2>&1; then \ + LOCAL_TARBALL="$(ls /vendor/exchange*.tar.gz | head -1)"; \ + echo "Using local Exchange tarball from ${LOCAL_TARBALL}"; \ + mkdir -p /src && cd /src; \ + cp "${LOCAL_TARBALL}" exchange.tar.gz; \ + tar xzf exchange.tar.gz; \ + EXCHANGE_DIR="$(ls -d exchange-* | head -1)"; \ + elif [ -n "${EXCHANGE_TARBALL_URL}" ]; then \ + echo "Fetching Exchange tarball ${EXCHANGE_TARBALL_URL}"; \ + mkdir -p /src && cd /src; \ + curl -L "${EXCHANGE_TARBALL_URL}" -o exchange.tar.gz; \ + tar xzf exchange.tar.gz; \ + EXCHANGE_DIR="$(ls -d exchange-* | head -1)"; \ + else \ + git clone --depth 1 --branch "${EXCHANGE_REF}" https://git.taler.net/exchange.git /src/exchange; \ + EXCHANGE_DIR="/src/exchange"; \ + fi; \ + cd "${EXCHANGE_DIR}" && ./bootstrap && \ + ./configure --prefix=/usr && make -j$(nproc) && make install; \ + # Merchant + MERCHANT_DIR=""; \ + if ls /vendor/merchant*.tar.gz >/dev/null 2>&1; then \ + LOCAL_TARBALL="$(ls /vendor/merchant*.tar.gz | head -1)"; \ + echo "Using local Merchant tarball from ${LOCAL_TARBALL}"; \ + mkdir -p /src && cd /src; \ + cp "${LOCAL_TARBALL}" merchant.tar.gz; \ + tar xzf merchant.tar.gz; \ + MERCHANT_DIR="$(ls -d merchant-* | head -1)"; \ + elif [ -n "${MERCHANT_TARBALL_URL}" ]; then \ + echo "Fetching Merchant tarball ${MERCHANT_TARBALL_URL}"; \ + mkdir -p /src && cd /src; \ + curl -L "${MERCHANT_TARBALL_URL}" -o merchant.tar.gz; \ + tar xzf merchant.tar.gz; \ + MERCHANT_DIR="$(ls -d merchant-* | head -1)"; \ + else \ + git clone --depth 1 --branch "${MERCHANT_REF}" https://git.taler.net/merchant.git /src/merchant; \ + MERCHANT_DIR="/src/merchant"; \ + fi; \ + cd "${MERCHANT_DIR}" && ./bootstrap && \ ./configure --prefix=/usr && make -j$(nproc) && make install # LibEuFin (Bank) diff --git a/README-DE.md b/README-DE.md index 0bdce29..e3f97ab 100644 --- a/README-DE.md +++ b/README-DE.md @@ -47,7 +47,7 @@ Container-Stack für GNU Taler (Exchange, Merchant, LibEuFin Bank) mit optionale - Bei eigener CA `EXCHANGE_CURL_OPTS="-k"` setzen, wenn der Offline-Job `/keys` über HTTPS abfragt. - Nach Passwortänderungen in `.env` ist kein manuelles SQL-Rendering nötig; das Init-Skript liest sie beim Start. - Release-Refs/Tarballs: Tags/Commits unter `https://git.taler.net/{gnunet,exchange,merchant,libeufin}.git/` ansehen (Tarballs via `.../snapshot/.tar.gz`) und `*_REF`/`GNUNET_TARBALL_URL` entsprechend setzen. -- Offline-Tarball: Lege ein GNUnet-Tarball unter `vendor/` (z.B. `gnunet-*.tar.gz`) ab, um es beim Build zu nutzen; bei unvollständigem Tarball fällt der Build auf Git zurück. +- Offline-Tarballs: Lege Tarballs unter `vendor/` ab (`gnunet-*.tar.gz`, `exchange-*.tar.gz`, `merchant-*.tar.gz`); bei unvollständigem Tarball fällt der Build auf Git zurück. ## Nützliche Kommandos - Logs: `docker compose logs -f exchange` (oder bank/merchant/caddy/wordpress). diff --git a/README.md b/README.md index 8044b8f..123efba 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Container stack for GNU Taler (Exchange, Merchant, LibEuFin Bank) with optional - With custom CAs, set `EXCHANGE_CURL_OPTS="-k"` if the offline job needs to curl `/keys` over HTTPS. - After changing DB passwords in `.env`, no manual SQL rendering is needed—the init script reads them at container start. - Release refs/tarballs: Browse tags/commits at `https://git.taler.net/{gnunet,exchange,merchant,libeufin}.git/` (Tarballs via `.../snapshot/.tar.gz`) and set `*_REF`/`GNUNET_TARBALL_URL` accordingly. -- Offline tarball drop-in: place a GNUnet tarball under `vendor/` (e.g., `gnunet-*.tar.gz`); the build picks the first match and falls back to git if the tarball looks incomplete. +- Offline tarball drop-in: place tarballs under `vendor/` (`gnunet-*.tar.gz`, `exchange-*.tar.gz`, `merchant-*.tar.gz`); the build picks the first match and falls back to git if incomplete. ## Useful commands - Logs: `docker compose logs -f exchange` (or bank/merchant/caddy/wordpress). diff --git a/scripts/build-image.sh b/scripts/build-image.sh index 22940b0..8508209 100755 --- a/scripts/build-image.sh +++ b/scripts/build-image.sh @@ -17,7 +17,9 @@ docker build \ --build-arg GNUNET_REF="${GNUNET_REF:-v0.26.1}" \ --build-arg GNUNET_TARBALL_URL="${GNUNET_TARBALL_URL:-}" \ --build-arg EXCHANGE_REF="${EXCHANGE_REF:-master}" \ + --build-arg EXCHANGE_TARBALL_URL="${EXCHANGE_TARBALL_URL:-}" \ --build-arg MERCHANT_REF="${MERCHANT_REF:-master}" \ + --build-arg MERCHANT_TARBALL_URL="${MERCHANT_TARBALL_URL:-}" \ --build-arg LIBEUFIN_REF="${LIBEUFIN_REF:-master}" \ -t "${IMAGE_TAG}" .