diff options
author | Florian Dold <florian@dold.me> | 2023-05-04 14:07:27 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-05-04 14:07:27 +0200 |
commit | ade28000c7a3db4db35ed664f068f33db2d05d58 (patch) | |
tree | 555967cd971b00de5409e00e9bd2dc1d7bea9119 | |
parent | 83a8c0695d4e1a507adad8367f318065ae4ade7e (diff) | |
download | deployment-ade28000c7a3db4db35ed664f068f33db2d05d58.tar.gz deployment-ade28000c7a3db4db35ed664f068f33db2d05d58.tar.bz2 deployment-ade28000c7a3db4db35ed664f068f33db2d05d58.zip |
add incomplete packaging-ng
-rw-r--r-- | packaging/ng/.gitignore | 1 | ||||
-rw-r--r-- | packaging/ng/Dockerfile.ubuntu-kinetic | 32 | ||||
-rw-r--r-- | packaging/ng/README.md | 22 | ||||
-rwxr-xr-x | packaging/ng/build.sh | 23 | ||||
-rw-r--r-- | packaging/ng/buildscripts/anastasis-build.sh | 27 | ||||
-rw-r--r-- | packaging/ng/buildscripts/build-gnunet-gtk.sh | 37 | ||||
-rw-r--r-- | packaging/ng/buildscripts/build-gnunet.sh | 41 | ||||
-rw-r--r-- | packaging/ng/buildscripts/exchange-build.sh | 24 | ||||
-rw-r--r-- | packaging/ng/buildscripts/libeufin-build.sh | 22 | ||||
-rw-r--r-- | packaging/ng/buildscripts/merchant-build.sh | 24 | ||||
-rw-r--r-- | packaging/ng/buildscripts/sync-build.sh | 27 | ||||
-rw-r--r-- | packaging/ng/buildscripts/wallet-build.sh | 32 |
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 ../../.. |