summaryrefslogtreecommitdiff
path: root/packaging/ng
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/ng')
-rw-r--r--packaging/ng/.gitignore2
-rw-r--r--packaging/ng/README.md25
-rwxr-xr-xpackaging/ng/build.sh67
-rw-r--r--packaging/ng/buildconfig/README5
-rw-r--r--packaging/ng/buildconfig/anastasis-gtk.giturl1
-rw-r--r--packaging/ng/buildconfig/anastasis-gtk.tag1
-rw-r--r--packaging/ng/buildconfig/anastasis.giturl1
-rw-r--r--packaging/ng/buildconfig/anastasis.tag1
-rw-r--r--packaging/ng/buildconfig/gnunet-gtk.giturl1
-rw-r--r--packaging/ng/buildconfig/gnunet-gtk.tag1
-rw-r--r--packaging/ng/buildconfig/gnunet.giturl1
-rw-r--r--packaging/ng/buildconfig/gnunet.tag1
-rw-r--r--packaging/ng/buildconfig/libeufin.giturl1
-rw-r--r--packaging/ng/buildconfig/libeufin.tag1
-rw-r--r--packaging/ng/buildconfig/sync.giturl1
-rw-r--r--packaging/ng/buildconfig/sync.tag1
-rw-r--r--packaging/ng/buildconfig/taler-exchange.giturl1
-rw-r--r--packaging/ng/buildconfig/taler-exchange.tag1
-rw-r--r--packaging/ng/buildconfig/taler-harness.giturl1
-rw-r--r--packaging/ng/buildconfig/taler-harness.tag1
-rw-r--r--packaging/ng/buildconfig/taler-merchant-demos.giturl1
-rw-r--r--packaging/ng/buildconfig/taler-merchant-demos.tag1
-rw-r--r--packaging/ng/buildconfig/taler-merchant.giturl1
-rw-r--r--packaging/ng/buildconfig/taler-merchant.tag1
-rw-r--r--packaging/ng/buildconfig/taler-wallet-cli.giturl1
-rw-r--r--packaging/ng/buildconfig/taler-wallet-cli.tag1
-rw-r--r--packaging/ng/buildscripts/generic.sh54
-rw-r--r--packaging/ng/distros/Dockerfile.debian-bookworm37
-rw-r--r--packaging/ng/distros/Dockerfile.ubuntu-kinetic32
-rwxr-xr-xpackaging/ng/print-latest-versions22
30 files changed, 266 insertions, 0 deletions
diff --git a/packaging/ng/.gitignore b/packaging/ng/.gitignore
new file mode 100644
index 0000000..681bab4
--- /dev/null
+++ b/packaging/ng/.gitignore
@@ -0,0 +1,2 @@
+packages/
+cache/
diff --git a/packaging/ng/README.md b/packaging/ng/README.md
new file mode 100644
index 0000000..50ec7cb
--- /dev/null
+++ b/packaging/ng/README.md
@@ -0,0 +1,25 @@
+# taler-packaging ng
+
+This directory contains the improved implementation of container-based
+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, 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.
+
+
+## Structure
+
+* `packages/$DISTRO-$DISTRO_VERNAME`: Output folder for debian packages.
+Also contains a `Packages.gz` metadata file generated by `dpkg-scanpackages`
+so that this folder can be directly consumed as a trusted package source.
+
+* `buildscripts/*`: Build scripts used during the package build steps.
diff --git a/packaging/ng/build.sh b/packaging/ng/build.sh
new file mode 100755
index 0000000..2523319
--- /dev/null
+++ 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
new file mode 100644
index 0000000..005630f
--- /dev/null
+++ 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
new file mode 100644
index 0000000..83634d2
--- /dev/null
+++ 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
new file mode 100644
index 0000000..5aff472
--- /dev/null
+++ 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
new file mode 100644
index 0000000..b29317f
--- /dev/null
+++ 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
new file mode 100644
index 0000000..e1be908
--- /dev/null
+++ 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
new file mode 100644
index 0000000..7610ee3
--- /dev/null
+++ 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
new file mode 100644
index 0000000..759e855
--- /dev/null
+++ 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
new file mode 100644
index 0000000..8764364
--- /dev/null
+++ 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
new file mode 100644
index 0000000..40c8500
--- /dev/null
+++ 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
new file mode 100644
index 0000000..b794afb
--- /dev/null
+++ 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
new file mode 100644
index 0000000..c91125d
--- /dev/null
+++ 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
new file mode 100644
index 0000000..21cb5d7
--- /dev/null
+++ 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
new file mode 100644
index 0000000..c91125d
--- /dev/null
+++ 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
new file mode 100644
index 0000000..19309f9
--- /dev/null
+++ 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
new file mode 100644
index 0000000..0a39b20
--- /dev/null
+++ 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
new file mode 100644
index 0000000..0d713ec
--- /dev/null
+++ 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
new file mode 100644
index 0000000..129170b
--- /dev/null
+++ 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
new file mode 100644
index 0000000..8fd4286
--- /dev/null
+++ 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
new file mode 100644
index 0000000..c91125d
--- /dev/null
+++ 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
new file mode 100644
index 0000000..cffa220
--- /dev/null
+++ 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
new file mode 100644
index 0000000..3123ff9
--- /dev/null
+++ 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
new file mode 100644
index 0000000..0d713ec
--- /dev/null
+++ 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
new file mode 100644
index 0000000..b434d4c
--- /dev/null
+++ b/packaging/ng/buildconfig/taler-wallet-cli.tag
@@ -0,0 +1 @@
+v0.10.6
diff --git a/packaging/ng/buildscripts/generic.sh b/packaging/ng/buildscripts/generic.sh
new file mode 100644
index 0000000..85235c6
--- /dev/null
+++ 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/distros/Dockerfile.debian-bookworm b/packaging/ng/distros/Dockerfile.debian-bookworm
new file mode 100644
index 0000000..b6aade0
--- /dev/null
+++ b/packaging/ng/distros/Dockerfile.debian-bookworm
@@ -0,0 +1,37 @@
+FROM debian:bookworm
+# This file is in the public domain.
+#
+# Docker image to build Ubuntu packages of
+# GNUnet, GNU Taler and GNU Anastasis.
+#
+ARG DEBIAN_FRONTEND=noninteractive
+
+# Install dependencies
+RUN apt-get update
+RUN apt-get -y upgrade
+RUN apt-get -y install build-essential zip jq python3 python3-pip nodejs npm
+RUN apt-get -y install autoconf automake gcc make libtool libltdl-dev libmicrohttpd-dev libpq-dev libsqlite3-dev libunistring-dev libqrencode-dev libgcrypt-dev libsodium-dev libargon2-dev libjansson-dev recutils libgmp-dev texinfo pkgconf zlib1g-dev libopus-dev libextractor-dev libnss3-dev libcurl4-gnutls-dev autopoint
+RUN apt-get -y install libzbar-dev libmariadb-dev-compat libmariadb-dev mandoc libpulse-dev libgstreamer1.0-dev libbluetooth-dev iptables miniupnpc libpng-dev
+RUN apt-get -y install python3-jinja2 doxygen libjose-dev iproute2 sudo
+RUN apt-get -y install wget zile
+RUN apt-get -y install libogg-dev gettext net-tools po-debconf debhelper-compat dbconfig-pgsql nginx
+RUN apt-get -y install libgtk-3-dev libgladeui-dev libmagic-dev policykit-1
+RUN apt-get -y install dbconfig-no-thanks
+RUN apt-get -y install devscripts equivs
+# For libeufin:
+RUN apt-get -y install python3-click python3-requests python3
+
+RUN apt-get -y install \
+ openjdk-17-jre-headless \
+ openjdk-17-jdk-headless \
+ default-jre-headless \
+ ;
+
+
+RUN pip install sphinx_rtd_theme --break-system-packages
+#RUN npm install -g npm
+RUN npm install -g pnpm
+
+RUN apt-get update
+RUN apt-get -y upgrade
+RUN apt-get -y dist-upgrade
diff --git a/packaging/ng/distros/Dockerfile.ubuntu-kinetic b/packaging/ng/distros/Dockerfile.ubuntu-kinetic
new file mode 100644
index 0000000..0a90fd7
--- /dev/null
+++ b/packaging/ng/distros/Dockerfile.ubuntu-kinetic
@@ -0,0 +1,32 @@
+FROM ubuntu:kinetic
+# This file is in the public domain.
+#
+# Docker image to build Ubuntu packages of
+# GNUnet, GNU Taler and GNU Anastasis.
+#
+# We need 'kinetic' for a reasonably recent NodeJS version.
+
+ARG DEBIAN_FRONTEND=noninteractive
+
+# Install dependencies
+RUN apt-get update
+RUN apt-get -y upgrade
+RUN apt-get -y install build-essential zip jq python3 python3-pip nodejs npm
+RUN apt-get -y install autoconf automake gcc make libtool libltdl-dev libmicrohttpd-dev libpq-dev libsqlite3-dev libunistring-dev libqrencode-dev libgcrypt-dev libsodium-dev libargon2-dev libjansson-dev recutils libgmp-dev texinfo pkgconf zlib1g-dev libopus-dev libextractor-dev libnss3-dev libcurl4-gnutls-dev autopoint
+RUN apt-get -y install libzbar-dev libmysqlclient-dev mandoc libpulse-dev libgstreamer1.0-dev libgstreamer-plugins-good1.0-dev libbluetooth-dev iptables miniupnpc libpng-dev
+RUN apt-get -y install python3-jinja2 doxygen libjose-dev iproute2 sudo
+RUN apt-get -y install wget zile
+RUN apt-get -y install libogg-dev gettext net-tools po-debconf debhelper-compat dbconfig-pgsql nginx
+RUN apt-get -y install libgtk-3-dev libgladeui-dev libmagic-dev policykit-1
+RUN apt-get -y install dbconfig-no-thanks
+RUN apt-get -y install devscripts equivs
+# For libeufin:
+RUN apt-get -y install openjdk-17-jdk python3-click python3-requests python3
+
+RUN pip install sphinx_rtd_theme
+RUN npm install -g npm
+RUN /usr/local/bin/npm install -g npm pnpm node
+
+RUN apt-get update
+RUN apt-get -y upgrade
+RUN apt-get -y dist-upgrade
diff --git a/packaging/ng/print-latest-versions b/packaging/ng/print-latest-versions
new file mode 100755
index 0000000..ff6668e
--- /dev/null
+++ 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