gnutaler-docker/Dockerfile

81 lines
3.5 KiB
Text
Raw Normal View History

FROM debian:sid
ENV DEBIAN_FRONTEND=noninteractive
# Pin refs (branch/tag/commit) for shallow clones; adjust as needed.
ARG GNUNET_REF=v0.26.1
ARG EXCHANGE_REF=master
ARG MERCHANT_REF=master
ARG LIBEUFIN_REF=master
# Optional tarball URLs (when set, git clone is skipped)
ARG GNUNET_TARBALL_URL=
RUN apt-get update && apt-get install -y \
build-essential git automake libtool pkg-config \
libgnutls28-dev libjansson-dev libsqlite3-dev libunistring-dev \
libcurl4-openssl-dev libmicrohttpd-dev libgcrypt20-dev libsodium-dev \
postgresql-client curl gnupg gettext gettext-base \
openjdk-17-jdk maven \
meson ninja-build \
&& rm -rf /var/lib/apt/lists/*
# Provide optional vendor tarballs (e.g., GNUnet) to the build
COPY vendor/ /vendor/
# GNUnet (falls nicht schon systemweit neu genug)
RUN set -e; \
mkdir -p /src && cd /src; \
GNUNET_DIR=""; \
if ls /vendor/gnunet*.tar.gz >/dev/null 2>&1; then \
LOCAL_TARBALL="$(ls /vendor/gnunet*.tar.gz | head -1)"; \
echo "Using local GNUnet tarball from ${LOCAL_TARBALL}"; \
cp "${LOCAL_TARBALL}" gnunet.tar.gz; \
tar xzf gnunet.tar.gz; \
GNUNET_DIR="$(ls -d gnunet-* | head -1)"; \
if [ ! -f "${GNUNET_DIR}/meson.build" ]; then \
echo "Local tarball seems incomplete; falling back to git clone ${GNUNET_REF}"; \
rm -rf "${GNUNET_DIR}"; \
git clone --depth 1 --branch "${GNUNET_REF}" https://git.taler.net/gnunet.git gnunet; \
GNUNET_DIR="gnunet"; \
fi; \
elif [ -n "${GNUNET_TARBALL_URL}" ]; then \
echo "Fetching GNUnet tarball ${GNUNET_TARBALL_URL}"; \
curl -L "${GNUNET_TARBALL_URL}" -o gnunet.tar.gz; \
tar xzf gnunet.tar.gz; \
GNUNET_DIR="$(ls -d gnunet-* | head -1)"; \
if [ ! -f "${GNUNET_DIR}/meson.build" ]; then \
echo "Tarball seems incomplete; falling back to git clone ${GNUNET_REF}"; \
rm -rf "${GNUNET_DIR}"; \
git clone --depth 1 --branch "${GNUNET_REF}" https://git.taler.net/gnunet.git gnunet; \
GNUNET_DIR="gnunet"; \
fi; \
else \
git clone --depth 1 --branch "${GNUNET_REF}" https://git.taler.net/gnunet.git gnunet; \
GNUNET_DIR="gnunet"; \
fi; \
if [ ! -f "${GNUNET_DIR}/doc/handbook/meson.build" ]; then \
echo "Creating stub doc/handbook/meson.build to satisfy Meson"; \
mkdir -p "${GNUNET_DIR}/doc/handbook"; \
printf "# auto-generated stub to skip handbook build\nsubdir_done()\n" > "${GNUNET_DIR}/doc/handbook/meson.build"; \
fi; \
cd "${GNUNET_DIR}" && ./bootstrap && \
./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 && \
./configure --prefix=/usr && make -j$(nproc) && make install
# LibEuFin (Bank)
RUN git clone --depth 1 --branch "${LIBEUFIN_REF}" https://git.taler.net/libeufin.git /src/libeufin && \
cd /src/libeufin && ./bootstrap && \
./configure --prefix=/usr && make -j$(nproc) && make install
# Shared entrypoint for dbinit + service start
COPY entrypoints/with-dbinit.sh /usr/local/bin/with-dbinit.sh
COPY scripts/enable-exchange-account.sh /usr/local/bin/enable-exchange-account.sh
RUN chmod +x /usr/local/bin/with-dbinit.sh /usr/local/bin/enable-exchange-account.sh