summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-05-04 14:07:27 +0200
committerFlorian Dold <florian@dold.me>2023-05-04 14:07:27 +0200
commitade28000c7a3db4db35ed664f068f33db2d05d58 (patch)
tree555967cd971b00de5409e00e9bd2dc1d7bea9119
parent83a8c0695d4e1a507adad8367f318065ae4ade7e (diff)
downloaddeployment-ade28000c7a3db4db35ed664f068f33db2d05d58.tar.gz
deployment-ade28000c7a3db4db35ed664f068f33db2d05d58.tar.bz2
deployment-ade28000c7a3db4db35ed664f068f33db2d05d58.zip
add incomplete packaging-ng
-rw-r--r--packaging/ng/.gitignore1
-rw-r--r--packaging/ng/Dockerfile.ubuntu-kinetic32
-rw-r--r--packaging/ng/README.md22
-rwxr-xr-xpackaging/ng/build.sh23
-rw-r--r--packaging/ng/buildscripts/anastasis-build.sh27
-rw-r--r--packaging/ng/buildscripts/build-gnunet-gtk.sh37
-rw-r--r--packaging/ng/buildscripts/build-gnunet.sh41
-rw-r--r--packaging/ng/buildscripts/exchange-build.sh24
-rw-r--r--packaging/ng/buildscripts/libeufin-build.sh22
-rw-r--r--packaging/ng/buildscripts/merchant-build.sh24
-rw-r--r--packaging/ng/buildscripts/sync-build.sh27
-rw-r--r--packaging/ng/buildscripts/wallet-build.sh32
12 files changed, 312 insertions, 0 deletions
diff --git a/packaging/ng/.gitignore b/packaging/ng/.gitignore
new file mode 100644
index 0000000..23053de
--- /dev/null
+++ b/packaging/ng/.gitignore
@@ -0,0 +1 @@
+packages/
diff --git a/packaging/ng/Dockerfile.ubuntu-kinetic b/packaging/ng/Dockerfile.ubuntu-kinetic
new file mode 100644
index 0000000..0a90fd7
--- /dev/null
+++ b/packaging/ng/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/README.md b/packaging/ng/README.md
new file mode 100644
index 0000000..f51745f
--- /dev/null
+++ b/packaging/ng/README.md
@@ -0,0 +1,22 @@
+# 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, dependencies are only built on-demand. 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.
+
+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..aca17e0
--- /dev/null
+++ b/packaging/ng/build.sh
@@ -0,0 +1,23 @@
+#!/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/buildscripts/anastasis-build.sh b/packaging/ng/buildscripts/anastasis-build.sh
new file mode 100644
index 0000000..24643e1
--- /dev/null
+++ b/packaging/ng/buildscripts/anastasis-build.sh
@@ -0,0 +1,27 @@
+#!/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
new file mode 100644
index 0000000..924c638
--- /dev/null
+++ b/packaging/ng/buildscripts/build-gnunet-gtk.sh
@@ -0,0 +1,37 @@
+#!/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
new file mode 100644
index 0000000..70fb1a8
--- /dev/null
+++ b/packaging/ng/buildscripts/build-gnunet.sh
@@ -0,0 +1,41 @@
+#!/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
new file mode 100644
index 0000000..36b9ede
--- /dev/null
+++ b/packaging/ng/buildscripts/exchange-build.sh
@@ -0,0 +1,24 @@
+#!/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/libeufin-build.sh b/packaging/ng/buildscripts/libeufin-build.sh
new file mode 100644
index 0000000..7229221
--- /dev/null
+++ b/packaging/ng/buildscripts/libeufin-build.sh
@@ -0,0 +1,22 @@
+#!/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/libeufin
+cd /build/libeufin
+
+# Fetch source
+rm -rf *
+git clone git://git.taler.net/libeufin
+cd libeufin
+git checkout $1
+./bootstrap
+./configure --prefix=/usr/local
+make deb
+cd ..
+dpkg -i *.deb
+
+tar uvf ../packages.tgz *.deb
+cd ..
diff --git a/packaging/ng/buildscripts/merchant-build.sh b/packaging/ng/buildscripts/merchant-build.sh
new file mode 100644
index 0000000..5625198
--- /dev/null
+++ b/packaging/ng/buildscripts/merchant-build.sh
@@ -0,0 +1,24 @@
+#!/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
new file mode 100644
index 0000000..e38a0ee
--- /dev/null
+++ b/packaging/ng/buildscripts/sync-build.sh
@@ -0,0 +1,27 @@
+#!/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
new file mode 100644
index 0000000..bf3fa80
--- /dev/null
+++ b/packaging/ng/buildscripts/wallet-build.sh
@@ -0,0 +1,32 @@
+#!/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/wallet
+cd /build/wallet
+
+# 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 ..
+
+tar uvf ../../../packages.tgz *.deb
+
+cd ../../..