taler-deployment

Deployment scripts and configuration files
Log | Files | Refs | README

commit 0ff1d33a635da117e385e6f5f3d3ae42ae48ca1e
parent 689f03e962ed38b12e9d9107ecaf28d8f2397770
Author: Florian Dold <florian@dold.me>
Date:   Wed, 24 Apr 2024 11:15:39 +0200

rework ng packaging

Diffstat:
Mpackaging/ng/.gitignore | 1+
Mpackaging/ng/README.md | 5++++-
Dpackaging/ng/build-debian-bookworm.sh | 25-------------------------
Dpackaging/ng/build-ubuntu-kinetic.sh | 23-----------------------
Apackaging/ng/build.sh | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apackaging/ng/buildconfig/README | 5+++++
Apackaging/ng/buildconfig/anastasis-gtk.giturl | 1+
Apackaging/ng/buildconfig/anastasis-gtk.tag | 1+
Apackaging/ng/buildconfig/anastasis.giturl | 1+
Apackaging/ng/buildconfig/anastasis.tag | 1+
Apackaging/ng/buildconfig/gnunet-gtk.giturl | 1+
Apackaging/ng/buildconfig/gnunet-gtk.tag | 1+
Apackaging/ng/buildconfig/gnunet.giturl | 1+
Apackaging/ng/buildconfig/gnunet.tag | 1+
Apackaging/ng/buildconfig/libeufin.giturl | 1+
Apackaging/ng/buildconfig/libeufin.tag | 1+
Apackaging/ng/buildconfig/sync.giturl | 1+
Apackaging/ng/buildconfig/sync.tag | 1+
Apackaging/ng/buildconfig/taler-exchange.giturl | 1+
Apackaging/ng/buildconfig/taler-exchange.tag | 1+
Apackaging/ng/buildconfig/taler-harness.giturl | 1+
Apackaging/ng/buildconfig/taler-harness.tag | 1+
Apackaging/ng/buildconfig/taler-merchant-demos.giturl | 1+
Apackaging/ng/buildconfig/taler-merchant-demos.tag | 1+
Apackaging/ng/buildconfig/taler-merchant.giturl | 1+
Apackaging/ng/buildconfig/taler-merchant.tag | 1+
Apackaging/ng/buildconfig/taler-wallet-cli.giturl | 1+
Apackaging/ng/buildconfig/taler-wallet-cli.tag | 1+
Dpackaging/ng/buildscripts/anastasis-build.sh | 27---------------------------
Dpackaging/ng/buildscripts/build-gnunet-gtk.sh | 37-------------------------------------
Dpackaging/ng/buildscripts/build-gnunet.sh | 41-----------------------------------------
Dpackaging/ng/buildscripts/exchange-build.sh | 24------------------------
Apackaging/ng/buildscripts/generic.sh | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dpackaging/ng/buildscripts/libeufin-build.sh | 23-----------------------
Dpackaging/ng/buildscripts/merchant-build.sh | 24------------------------
Dpackaging/ng/buildscripts/sync-build.sh | 27---------------------------
Dpackaging/ng/buildscripts/wallet-build.sh | 31-------------------------------
Rpackaging/ng/Dockerfile.debian-bookworm -> packaging/ng/distros/Dockerfile.debian-bookworm | 0
Rpackaging/ng/Dockerfile.ubuntu-kinetic -> packaging/ng/distros/Dockerfile.ubuntu-kinetic | 0
Apackaging/ng/print-latest-versions | 22++++++++++++++++++++++
40 files changed, 175 insertions(+), 283 deletions(-)

diff --git a/packaging/ng/.gitignore b/packaging/ng/.gitignore @@ -1 +1,2 @@ packages/ +cache/ diff --git a/packaging/ng/README.md b/packaging/ng/README.md @@ -6,10 +6,13 @@ packaging for GNU Taler and associated packages. The major improvement is that a component can be built *without* having to rebuild every single package. -Instead, dependencies are only built on-demand. Each package is built in a +Instead, all dependencies are managed via apt. Each package is built in a fresh environment, with build dependencies pulled in via apt. Previously built packages are available via a file-based apt source. +Build-time dependencies are automatically installed, making sure that +missing build-time dependencies would be detected. + The packaging logic is also the same for Debian and Ubuntu. diff --git a/packaging/ng/build-debian-bookworm.sh b/packaging/ng/build-debian-bookworm.sh @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -# Build debian packages. - -set -eu - -DISTRO=debian -DISTRO_VERNAME=bookworm -LABEL=$DISTRO-$DISTRO_VERNAME - -IMAGE_TAG=taler-packaging-$LABEL:latest -DOCKERFILE=Dockerfile.$LABEL -PKGDIR=packages/$LABEL - -echo "Building $IMAGE_TAG from $DOCKERFILE" - -# Build the base image. Usually fast because it's cached. -docker build -t $IMAGE_TAG -f $DOCKERFILE . - -mkdir -p $PKGDIR - -# echo docker run -it --mount type=bind,source="$(pwd)"/buildscripts,target=/buildscripts,readonly --mount type=bind,source="$(pwd)"/$PKGDIR,target=/pkgdir $IMAGE_TAG /bin/bash -#docker run -it --entrypoint=/bin/bash --mount type=bind,source="$(pwd)"/buildscripts,target=/buildscripts,readonly --mount type=bind,source="$(pwd)"/$PKGDIR,target=/pkgdir $IMAGE_TAG /buildscripts/build-gnunet.sh -docker run -it --entrypoint=/bin/bash --mount type=bind,source="$(pwd)"/buildscripts,target=/buildscripts,readonly --mount type=bind,source="$(pwd)"/$PKGDIR,target=/pkgdir $IMAGE_TAG /buildscripts/libeufin-build.sh master -docker run -it --entrypoint=/bin/bash --mount type=bind,source="$(pwd)"/buildscripts,target=/buildscripts,readonly --mount type=bind,source="$(pwd)"/$PKGDIR,target=/pkgdir $IMAGE_TAG /buildscripts/wallet-build.sh master diff --git a/packaging/ng/build-ubuntu-kinetic.sh b/packaging/ng/build-ubuntu-kinetic.sh @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -# Build debian packages. - -set -eu - -DISTRO=ubuntu -DISTRO_VERNAME=kinetic -LABEL=$DISTRO-$DISTRO_VERNAME - -IMAGE_TAG=taler-packaging-$LABEL:latest -DOCKERFILE=Dockerfile.$LABEL -PKGDIR=packages/$LABEL - -echo "Building $IMAGE_TAG from $DOCKERFILE" - -# Build the base image. Usually fast because it's cached. -docker build -t $IMAGE_TAG -f $DOCKERFILE . - -mkdir -p $PKGDIR - -# echo docker run -it --mount type=bind,source="$(pwd)"/buildscripts,target=/buildscripts,readonly --mount type=bind,source="$(pwd)"/$PKGDIR,target=/pkgdir $IMAGE_TAG /bin/bash -#docker run -it --entrypoint=/bin/bash --mount type=bind,source="$(pwd)"/buildscripts,target=/buildscripts,readonly --mount type=bind,source="$(pwd)"/$PKGDIR,target=/pkgdir $IMAGE_TAG /buildscripts/build-gnunet.sh diff --git a/packaging/ng/build.sh b/packaging/ng/build.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +set -eu + +usage() { + echo Usage: $0 DISTRO >&2 + exit 1 +} + +if [[ $# != 1 ]]; then + usage +fi + +LABEL=$1 +IMAGE_TAG=taler-packaging-$LABEL:latest +DOCKERFILE=distros/Dockerfile.$LABEL +PKGDIR=packages/$LABEL + +if [[ ! -e "$DOCKERFILE" ]]; then + echo Need $DOCKERFILE to build $LABEL >&2 + exit 1 +fi + + +function build_base() { + echo "Building $IMAGE_TAG from $DOCKERFILE" + # Build the base image. Usually fast because it's cached. + podman build -t $IMAGE_TAG -f $DOCKERFILE . +} + +function run() { + SCRIPT=$1 + shift + mkdir -p $PKGDIR + mkdir -p cache + podman run -it --entrypoint=/bin/bash \ + --mount type=bind,source="$(pwd)"/buildscripts,target=/buildscripts,readonly \ + --mount type=bind,source="$(pwd)"/buildconfig,target=/buildconfig,readonly \ + --mount type=bind,source="$(pwd)"/$PKGDIR,target=/pkgdir \ + $IMAGE_TAG "/buildscripts/$SCRIPT" "$@" +} + +function debug() { + mkdir -p $PKGDIR + podman run -it --entrypoint=/bin/bash \ + --mount type=bind,source="$(pwd)"/buildscripts,target=/buildscripts,readonly \ + --mount type=bind,source="$(pwd)"/buildconfig,target=/buildconfig,readonly \ + --mount type=bind,source="$(pwd)"/$PKGDIR,target=/pkgdir \ + $IMAGE_TAG -i +} + +function build_all() { + run generic.sh gnunet + run generic.sh gnunet-gtk + run generic.sh taler-exchange + run generic.sh taler-merchant + run generic.sh sync + run generic.sh anastasis + run generic.sh anastasis-gtk + run generic.sh libeufin + run generic.sh taler-merchant-demos + run generic.sh taler-wallet-cli packages/taler-wallet-cli + run generic.sh taler-harness packages/taler-harness + run generic.sh libeufin +} + +build_all diff --git a/packaging/ng/buildconfig/README b/packaging/ng/buildconfig/README @@ -0,0 +1,5 @@ +These files determine the git tag from which the respective components are +built in the base Docker image. + +They are in separate files to make modification checking with +staged Docker builds work nicely. diff --git a/packaging/ng/buildconfig/anastasis-gtk.giturl b/packaging/ng/buildconfig/anastasis-gtk.giturl @@ -0,0 +1 @@ +git://git.taler.net/anastasis-gtk.git diff --git a/packaging/ng/buildconfig/anastasis-gtk.tag b/packaging/ng/buildconfig/anastasis-gtk.tag @@ -0,0 +1 @@ +v0.4.1 diff --git a/packaging/ng/buildconfig/anastasis.giturl b/packaging/ng/buildconfig/anastasis.giturl @@ -0,0 +1 @@ +git://git.taler.net/anastasis.git diff --git a/packaging/ng/buildconfig/anastasis.tag b/packaging/ng/buildconfig/anastasis.tag @@ -0,0 +1 @@ +v0.4.2-dev.1 diff --git a/packaging/ng/buildconfig/gnunet-gtk.giturl b/packaging/ng/buildconfig/gnunet-gtk.giturl @@ -0,0 +1 @@ +git://git.gnunet.org/gnunet-gtk.git diff --git a/packaging/ng/buildconfig/gnunet-gtk.tag b/packaging/ng/buildconfig/gnunet-gtk.tag @@ -0,0 +1 @@ +v0.21.0 diff --git a/packaging/ng/buildconfig/gnunet.giturl b/packaging/ng/buildconfig/gnunet.giturl @@ -0,0 +1 @@ +git://git.gnunet.org/gnunet.git diff --git a/packaging/ng/buildconfig/gnunet.tag b/packaging/ng/buildconfig/gnunet.tag @@ -0,0 +1 @@ +v0.21.1 diff --git a/packaging/ng/buildconfig/libeufin.giturl b/packaging/ng/buildconfig/libeufin.giturl @@ -0,0 +1 @@ +git://git.taler.net/libeufin.git diff --git a/packaging/ng/buildconfig/libeufin.tag b/packaging/ng/buildconfig/libeufin.tag @@ -0,0 +1 @@ +v0.10.1 diff --git a/packaging/ng/buildconfig/sync.giturl b/packaging/ng/buildconfig/sync.giturl @@ -0,0 +1 @@ +git://git.taler.net/sync.git diff --git a/packaging/ng/buildconfig/sync.tag b/packaging/ng/buildconfig/sync.tag @@ -0,0 +1 @@ +v0.10.1 diff --git a/packaging/ng/buildconfig/taler-exchange.giturl b/packaging/ng/buildconfig/taler-exchange.giturl @@ -0,0 +1 @@ +git://git.taler.net/exchange.git diff --git a/packaging/ng/buildconfig/taler-exchange.tag b/packaging/ng/buildconfig/taler-exchange.tag @@ -0,0 +1 @@ +v0.10.3-dev.1 diff --git a/packaging/ng/buildconfig/taler-harness.giturl b/packaging/ng/buildconfig/taler-harness.giturl @@ -0,0 +1 @@ +git://git.taler.net/wallet-core.git diff --git a/packaging/ng/buildconfig/taler-harness.tag b/packaging/ng/buildconfig/taler-harness.tag @@ -0,0 +1 @@ +v0.10.8-dev.1 diff --git a/packaging/ng/buildconfig/taler-merchant-demos.giturl b/packaging/ng/buildconfig/taler-merchant-demos.giturl @@ -0,0 +1 @@ +git://git.taler.net/taler-merchant-demos diff --git a/packaging/ng/buildconfig/taler-merchant-demos.tag b/packaging/ng/buildconfig/taler-merchant-demos.tag @@ -0,0 +1 @@ +v0.10.1 diff --git a/packaging/ng/buildconfig/taler-merchant.giturl b/packaging/ng/buildconfig/taler-merchant.giturl @@ -0,0 +1 @@ +git://git.taler.net/merchant.git diff --git a/packaging/ng/buildconfig/taler-merchant.tag b/packaging/ng/buildconfig/taler-merchant.tag @@ -0,0 +1 @@ +v0.10.2 diff --git a/packaging/ng/buildconfig/taler-wallet-cli.giturl b/packaging/ng/buildconfig/taler-wallet-cli.giturl @@ -0,0 +1 @@ +git://git.taler.net/wallet-core.git diff --git a/packaging/ng/buildconfig/taler-wallet-cli.tag b/packaging/ng/buildconfig/taler-wallet-cli.tag @@ -0,0 +1 @@ +v0.10.6 diff --git a/packaging/ng/buildscripts/anastasis-build.sh b/packaging/ng/buildscripts/anastasis-build.sh @@ -1,27 +0,0 @@ -#!/bin/sh -# This file is in the public domain. -# Helper script to build the latest DEB packages in the container. - -set -eu -unset LD_LIBRARY_PATH - -mkdir -p /build/anastasis -cd /build/anastasis - -# Fetch source -rm -rf * - -for n in anastasis anastasis-gtk -do - git clone git://git.taler.net/$n - cd $n - git checkout $1 - ./bootstrap - dpkg-buildpackage -rfakeroot -b -uc -us - cd .. - dpkg -i *.deb -done - -tar uvf ../packages.tgz *.deb - -cd .. diff --git a/packaging/ng/buildscripts/build-gnunet-gtk.sh b/packaging/ng/buildscripts/build-gnunet-gtk.sh @@ -1,37 +0,0 @@ -#!/bin/sh -# This file is in the public domain. -# Helper script to build the latest DEB packages in the container. - -set -eu -unset LD_LIBRARY_PATH - -dpkg-scanpackages /pkgdir /dev/null | gzip -9c > /pkgdir/Packages.gz - -echo "deb [trusted=yes] file:/pkgdir ./" >/etc/apt/sources.list.d/taler-packaging-local.list - -rm -rf /build/gnunet -mkdir -p /build/gnunet -cd /build/gnunet - -TAG=${1:-master} - -for n in gnunet gnunet-gtk -do - git clone --depth=1 git://git.gnunet.org/$n - cd $n - git checkout $TAG - - # Install build-time dependencies. - mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control - - # We do a sparse checkout, so we need to hint - # the version to the build system. - dpkg-parsechangelog -S Version > .version - ./bootstrap - dpkg-buildpackage -rfakeroot -b -uc -us - cd .. -done - -ls /build/gnunet - -cp /build/gnunet/*.deb /pkgdir/ diff --git a/packaging/ng/buildscripts/build-gnunet.sh b/packaging/ng/buildscripts/build-gnunet.sh @@ -1,41 +0,0 @@ -#!/bin/sh -# This file is in the public domain. -# Helper script to build the latest DEB packages in the container. - -set -eu -unset LD_LIBRARY_PATH - -cd /pkgdir -dpkg-scanpackages . /dev/null | gzip -9c > /pkgdir/Packages.gz -echo "deb [trusted=yes] file:/pkgdir ./" >/etc/apt/sources.list.d/taler-packaging-local.list -apt-get update - - -mkdir -p /build -cd /build - -TAG=${1:-master} - -git clone --depth=1 git://git.gnunet.org/gnunet -cd gnunet -git checkout $TAG - -# Get current version from debian/control file. -DEB_VERSION=$(dpkg-parsechangelog -S Version) - -apt-cache show gnunet | grep "Version: $DEB_VERSION" >/dev/null && found=true || found=false -if [ $found = true ]; then - echo "gnunet version $DEB_VERSION already built, skipping" - exit 0 -fi - -# Install build-time dependencies. -mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control - -# We do a sparse checkout, so we need to hint -# the version to the build system. -echo $DEB_VERSION > .version -./bootstrap -dpkg-buildpackage -rfakeroot -b -uc -us - -cp /build/*.deb /pkgdir/ diff --git a/packaging/ng/buildscripts/exchange-build.sh b/packaging/ng/buildscripts/exchange-build.sh @@ -1,24 +0,0 @@ -#!/bin/sh -# This file is in the public domain. -# Helper script to build the latest DEB packages in the container. - -set -eu -unset LD_LIBRARY_PATH -mkdir -p /build/taler -cd /build/taler - -# Fetch source -rm -rf * - -pip3 install htmlark - -git clone git://git.taler.net/exchange -cd exchange -git checkout $1 -./bootstrap -dpkg-buildpackage -rfakeroot -b -uc -us -cd .. -dpkg -i *.deb - -tar uvf ../packages.tgz *.deb -cd .. diff --git a/packaging/ng/buildscripts/generic.sh b/packaging/ng/buildscripts/generic.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# This file is in the public domain. +# Helper script to build the latest DEB packages in the container. + +set -eu +unset LD_LIBRARY_PATH + +PACKAGE=$1 +# Path of the debian/ folder in the repository +DEBIANPATH=${2:-.} + +echo Building $1 with generic build logic >&2 + +cd /pkgdir +dpkg-scanpackages . | xz - > /pkgdir/Packages.xz +echo "deb [trusted=yes] file:/pkgdir ./" >/etc/apt/sources.list.d/taler-packaging-local.list +apt-get update + +mkdir -p /build +cd /build + +TAG=$(cat /buildconfig/$PACKAGE.tag) +GITURL=$(cat /buildconfig/$PACKAGE.giturl) + +git config --global advice.detachedHead false +git clone --depth=1 --branch=$TAG "$GITURL" "$PACKAGE" + +cd "/build/$PACKAGE/$DEBIANPATH" + +# Get current version from debian/control file. +DEB_VERSION=$(dpkg-parsechangelog -S Version) + +echo "Current version of $PACKAGE/$DEBIANPATH is $DEB_VERSION" + +apt-cache show "$PACKAGE" | grep "Version: $DEB_VERSION" >/dev/null && found=true || found=false +if [ $found = true ]; then + echo "$PACKAGE version $DEB_VERSION already built, skipping" + exit 0 +fi + +cd "/build/$PACKAGE" +./bootstrap + +cd "/build/$PACKAGE/$DEBIANPATH" + +# Install build-time dependencies. +mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control + +# We do a sparse checkout, so we need to hint +# the version to the build system. +echo $DEB_VERSION > .version +dpkg-buildpackage -rfakeroot -b -uc -us + +cp ../*.deb /pkgdir/ diff --git a/packaging/ng/buildscripts/libeufin-build.sh b/packaging/ng/buildscripts/libeufin-build.sh @@ -1,23 +0,0 @@ -#!/bin/sh -# This file is in the public domain. -# Helper script to build the latest DEB packages in the container. - -set -eu -unset LD_LIBRARY_PATH -mkdir -p /build -cd /build - -# Fetch source -rm -rf * -git clone git://git.taler.net/libeufin -cd libeufin -git checkout $1 -./bootstrap -./configure --prefix=/usr/local -make deb - -cp /build/*.deb /pkgdir/ - -dpkg -i /build/*.deb - - diff --git a/packaging/ng/buildscripts/merchant-build.sh b/packaging/ng/buildscripts/merchant-build.sh @@ -1,24 +0,0 @@ -#!/bin/sh -# This file is in the public domain. -# Helper script to build the latest DEB packages in the container. - -set -eu -unset LD_LIBRARY_PATH -mkdir -p /build/taler -cd /build/taler - -# Fetch source -rm -rf * - -pip3 install htmlark - -git clone git://git.taler.net/merchant -cd merchant -git checkout $1 -./bootstrap -dpkg-buildpackage -rfakeroot -b -uc -us -cd .. -dpkg -i *.deb - -tar uvf ../packages.tgz *.deb -cd .. diff --git a/packaging/ng/buildscripts/sync-build.sh b/packaging/ng/buildscripts/sync-build.sh @@ -1,27 +0,0 @@ -#!/bin/sh -# This file is in the public domain. -# Helper script to build the latest DEB packages in the container. - -set -eu -unset LD_LIBRARY_PATH - -mkdir -p /build/sync -cd /build/sync - -# Fetch source -rm -rf * - -for n in sync -do - git clone git://git.taler.net/$n - cd $n - git checkout $1 - ./bootstrap - dpkg-buildpackage -rfakeroot -b -uc -us - cd .. - dpkg -i *.deb -done - -tar uvf ../packages.tgz *.deb - -cd .. diff --git a/packaging/ng/buildscripts/wallet-build.sh b/packaging/ng/buildscripts/wallet-build.sh @@ -1,31 +0,0 @@ -#!/bin/sh -# This file is in the public domain. -# Helper script to build the latest DEB packages in the container. - -set -eu -unset LD_LIBRARY_PATH - -mkdir -p /build -cd /build - -# Fetch source -rm -rf * -git clone git://git.taler.net/wallet-core - -cd wallet-core -git checkout $1 -./bootstrap -./configure --prefix=/usr -make -cd packages/taler-wallet-cli -./configure --prefix=/usr -make install -dpkg-buildpackage -rfakeroot -b -uc -us -cd ../taler-harness -./configure --prefix=/usr -make install -dpkg-buildpackage -rfakeroot -b -uc -us -cd .. - - -cp /build/wallet-core/packages/*.deb /pkgdir/ diff --git a/packaging/ng/Dockerfile.debian-bookworm b/packaging/ng/distros/Dockerfile.debian-bookworm diff --git a/packaging/ng/Dockerfile.ubuntu-kinetic b/packaging/ng/distros/Dockerfile.ubuntu-kinetic diff --git a/packaging/ng/print-latest-versions b/packaging/ng/print-latest-versions @@ -0,0 +1,22 @@ +#!/usr/bin/bash + +function getver() { + ver=$(git -c 'versionsort.suffix=-' \ + ls-remote --exit-code --refs --sort='version:refname' --tags $2 '*.*.*' \ + | tail --lines=1 \ + | cut --delimiter='/' --fields=3) + curr=$(cat buildconfig/$1.tag) + if [[ "$curr" != "$ver" ]]; then + echo -n "[!] " + fi + echo $1 "curr: $curr" latest: $ver +} + +getver exchange git://git.taler.net/exchange +getver merchant git://git.taler.net/merchant +getver merchant-demos git://git.taler.net/taler-merchant-demos +getver libeufin git://git.taler.net/libeufin +getver wallet git://git.taler.net/wallet-core +getver gnunet git://git.gnunet.org/gnunet +getver sync git://git.taler.net/sync +getver libmhd git://git.gnunet.org/libmicrohttpd