commit ea52a9126da344a3e1bcaecc149e24f6b54a5ccb parent 4bc8f1aa72d9baeb054aee26758abae80c0ec310 Author: Florian Dold <florian@dold.me> Date: Wed, 24 Sep 2025 18:45:05 +0200 debian: cleanup Diffstat:
83 files changed, 346 insertions(+), 1681 deletions(-)
diff --git a/debian/.gitignore b/debian/.gitignore @@ -1,23 +1,7 @@ .debhelper/ -autoreconf.after -autoreconf.before -debhelper-build-stamp -files *.log libtalerdonau.substvars -libtalerdonau/ -taler-donau-dev.substvars -taler-donau-dev/ -taler-donau.substvars -taler-donau/ -taler-donau-database/ tmp/ libtalerdonau-dev.substvars -libtalerdonau-dev/ -taler-auditor.postrm.debhelper -taler-auditor.substvars -taler-auditor/ -taler-donau.postrm.debhelper *.debhelper *.substvars -taler-donau-offline diff --git a/debian/README-packaging.md b/debian/README-packaging.md @@ -2,6 +2,6 @@ This file contains some notes about packaging. ## Systemd Units -The main unit file is taler-donau.service. It is a unit that does not run +The main unit file is donau.target. It is a unit that does not run anything, but instead can be used to stop/start all donau-related services at once. diff --git a/debian/changelog b/debian/changelog @@ -1,4 +1,4 @@ -taler-donau (1.0.0) unstable; urgency=low +donau (1.0.0) unstable; urgency=low * First 1.0.0 release. diff --git a/debian/control b/debian/control @@ -1,4 +1,4 @@ -Source: taler-donau +Source: donau Section: net Priority: optional Maintainer: Christian Grothoff <grothoff@gnu.org> @@ -30,7 +30,7 @@ Vcs-Git: https://salsa.debian.org/debian/taler-donau.git Vcs-browser: https://salsa.debian.org/debian/taler-donau Homepage: https://taler.net/ -Package: libtalerdonau +Package: libdonau Architecture: any Pre-Depends: ${misc:Pre-Depends} @@ -49,27 +49,12 @@ Description: Libraries to talk to a GNU Taler donau. various base configuration files and associated documentation. -Package: taler-donau-database +Package: donau Architecture: any Pre-Depends: ${misc:Pre-Depends} Depends: - lsb-base, - netbase, - ${misc:Depends}, - ${shlibs:Depends} -Description: Programs and libraries to manage a GNU Taler donau database. - This package contains only the code to setup the - (Postgresql) database interaction (taler-donau-dbinit - and associated resource files). - -Package: taler-donau -Architecture: any -Pre-Depends: - ${misc:Pre-Depends} -Depends: - libtalerdonau (= ${binary:Version}), - taler-donau-database (= ${binary:Version}), + libdonau (= ${binary:Version}), adduser, lsb-base, netbase, @@ -77,7 +62,6 @@ Depends: ${misc:Depends}, ${shlibs:Depends} Recommends: - taler-donau-offline (= ${binary:Version}), apache2 | nginx | httpd, postgresql (>=13.0) Description: GNU's payment system operator. @@ -97,54 +81,11 @@ Description: GNU's payment system operator. Finally, an donau operator should also be prepared to run a taler-auditor. -Package: taler-donau-offline -Architecture: any -Pre-Depends: - ${misc:Pre-Depends} -Depends: - libtalerdonau (= ${binary:Version}), - adduser, - lsb-base, - netbase, - ${misc:Depends}, - ${shlibs:Depends} -Description: Tools for managing the GNU Taler donau offline keys. - A GNU Taler donau uses an offline key to sign its online - keys, fee structure, bank routing information and other meta - data. The offline signing key is the root of the Taler PKI - that is then embedded in consumer wallets and charity backends. - This package includes the tool to download material to sign - from the donau, create signatures, and upload the resulting - signatures to the donau. - -Package: taler-auditor -Architecture: any -Pre-Depends: - ${misc:Pre-Depends} -Depends: - libtalerdonau (= ${binary:Version}), - taler-donau-database (= ${binary:Version}), - adduser, - lsb-base, - netbase, - python3-jinja2, - ${misc:Depends}, - ${shlibs:Depends} -Description: GNU's payment system auditor. - GNU Taler is the privacy-preserving digital payment - system from the GNU project. This package contains the - auditor logic. It verifies that the taler-donau run - by a payment service provider is correctly performing - its bank transactions and thus has the correct balance - in its escrow account. Each donau operator is - expected to make use of one or more auditors as part - of its regulatory compliance. - -Package: libtalerdonau-dev +Package: libdonau-dev Section: libdevel Architecture: any Depends: - libtalerdonau (= ${binary:Version}), + libdonau (= ${binary:Version}), libgnunet-dev (>=0.24.0), libgcrypt20-dev (>=1.8), libmicrohttpd-dev (>=0.9.71), diff --git a/debian/donau.README.Debian b/debian/donau.README.Debian @@ -0,0 +1,29 @@ +donau +-------------- + +Note that the configuration is incomplete, and that Debian cannot launch an +donau with this minimal template. You must: + +* Configure the Postgres database for the donau, ideally including + remote replication of the database to the auditor. +* Run `donau-dbinit` (also after package upgrades). +* Edit ``/etc/donau/conf.d/units.conf`` to must setup the currency and denominations + details. + +None of these are done by the Debian package because we cannot provide the +required complete configuration details. + + +Once you have done this, you can use the following commands to start, stop or +restart the Taler donau: + + # systemctl start donau.target + # systemctl stop donau.target + # systemctl restart donau.target + +To permanently enable the donau whenever the system boots, use: + + # systemctl enable donau.target + + + -- Christian Grothoff <grothoff@gnu.org> Mon 28 Dec 2020 11:37:14 AM CET diff --git a/debian/taler-donau.docs b/debian/donau.docs diff --git a/debian/donau.donau-httpd.service b/debian/donau.donau-httpd.service @@ -0,0 +1,33 @@ +[Unit] +Description=GNU Taler payment system donau REST API +AssertPathExists=/run/taler/donau-httpd +Requires=donau-httpd.socket donau-secmod-cs.service donau-secmod-rsa.service donau-secmod-eddsa.service +After=postgres.service network.target donau-secmod-cs.service donau-secmod-rsa.service donau-secmod-eddsa.service +PartOf=donau.target + +[Service] +User=donau-httpd +Type=simple + +# Depending on the configuration, the service process kills itself and then +# needs to be restarted. Thus no significant delay on restarts. +Restart=always +RestartSec=1ms + +# Disable the service if more than 5 restarts are encountered within 5s. +# These are usually the systemd defaults, but can be overwritten, thus we set +# them here explicitly, as the donau code assumes StartLimitInterval +# to be >=5s. +StartLimitBurst=5 +StartLimitInterval=5s + +ExecStart=/usr/bin/donau-httpd -c /etc/donau/donau.conf +StandardOutput=journal +StandardError=journal +PrivateTmp=no +PrivateDevices=yes +ProtectSystem=full +Slice=donau.slice + +[Install] +WantedBy=multi-user.target diff --git a/debian/donau.donau-httpd.socket b/debian/donau.donau-httpd.socket @@ -0,0 +1,14 @@ +[Unit] +Description=Taler Donau Socket +PartOf=donau-httpd.service + +[Socket] +ListenStream=/run/donau/httpd/http.sock +Accept=no +Service=donau-httpd.service +SocketUser=donau-httpd +SocketGroup=www-data +SocketMode=0660 + +[Install] +WantedBy=sockets.target diff --git a/debian/donau.donau-secmod-cs.service b/debian/donau.donau-secmod-cs.service @@ -0,0 +1,18 @@ +[Unit] +Description=GNU Taler payment system donau CS security module +AssertPathExists=/run/donau/secmod-cs +PartOf=donau.target + +[Service] +User=donau-secmod-cs +Type=simple +Restart=always +RestartSec=100ms +ExecStart=/usr/bin/donau-secmod-cs -c /etc/donau/donau.conf +StandardOutput=journal +StandardError=journal +PrivateTmp=no +PrivateDevices=yes +ProtectSystem=full +IPAddressDeny=any +Slice=donau.slice diff --git a/debian/donau.donau-secmod-eddsa.service b/debian/donau.donau-secmod-eddsa.service @@ -0,0 +1,18 @@ +[Unit] +Description=GNU Taler payment system donau EdDSA security module +AssertPathExists=/run/donau/secmod-eddsa +PartOf=donau.target + +[Service] +User=donau-secmod-eddsa +Type=simple +Restart=always +RestartSec=100ms +ExecStart=/usr/bin/donau-secmod-eddsa -c /etc/donau/donau.conf +StandardOutput=journal +StandardError=journal +PrivateTmp=no +PrivateDevices=yes +ProtectSystem=full +IPAddressDeny=any +Slice=donau.slice diff --git a/debian/donau.donau-secmod-rsa.service b/debian/donau.donau-secmod-rsa.service @@ -0,0 +1,18 @@ +[Unit] +Description=GNU Taler payment system donau RSA security module +AssertPathExists=/run/donau/secmod-rsa +PartOf=donau.target + +[Service] +User=donau-secmod-rsa +Type=simple +Restart=always +RestartSec=100ms +ExecStart=/usr/bin/donau-secmod-rsa -c /etc/taler/taler.conf +StandardOutput=journal +StandardError=journal +PrivateTmp=no +PrivateDevices=yes +ProtectSystem=full +IPAddressDeny=any +Slice=donau.slice diff --git a/debian/taler-donau.taler-donau.slice b/debian/donau.donau.slice diff --git a/debian/donau.donau.target b/debian/donau.donau.target @@ -0,0 +1,8 @@ +[Unit] +Description=GNU Taler donau +After=postgres.service network.target + +Wants=donau-httpd.service + +[Install] +WantedBy=multi-user.target diff --git a/debian/taler-donau.install b/debian/donau.install diff --git a/debian/donau.lintan-overrides b/debian/donau.lintan-overrides @@ -0,0 +1,3 @@ +# internal libraries are not split out into a dedicated package to avoid +# micropackaging. +donau: package-name-doesnt-match-sonames diff --git a/debian/donau.postinst b/debian/donau.postinst @@ -0,0 +1,60 @@ +#!/bin/bash + +set -e + +. /usr/share/debconf/confmodule + +DONAU_HOME="/var/lib/donau" +_GROUPNAME=donau-secmod +_DBGROUPNAME=donau-db +_EUSERNAME=donau-httpd +_CSECUSERNAME=donau-secmod-cs +_RSECUSERNAME=donau-secmod-rsa +_ESECUSERNAME=donau-secmod-eddsa + +case "${1}" in +configure) + + # Create taler groups as needed + if ! getent group ${_GROUPNAME} >/dev/null; then + addgroup --quiet --system ${_GROUPNAME} + fi + if ! getent group ${_DBGROUPNAME} >/dev/null; then + addgroup --quiet --system ${_DBGROUPNAME} + fi + + # Create taler users if needed + if ! getent passwd ${_EUSERNAME} >/dev/null; then + adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${DONAU_HOME} ${_EUSERNAME} + adduser --quiet ${_EUSERNAME} ${_DBGROUPNAME} + adduser --quiet ${_EUSERNAME} ${_GROUPNAME} + fi + if ! getent passwd ${_RSECUSERNAME} >/dev/null; then + adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${DONAU_HOME} ${_RSECUSERNAME} + fi + if ! getent passwd ${_CSECUSERNAME} >/dev/null; then + adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${DONAU_HOME} ${_CSECUSERNAME} + fi + if ! getent passwd ${_ESECUSERNAME} >/dev/null; then + adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${DONAU_HOME} ${_ESECUSERNAME} + fi + + if ! dpkg-statoverride --list /etc/donau/secrets/donau-db.secret.conf >/dev/null 2>&1; then + dpkg-statoverride --add --update \ + root ${_DBGROUPNAME} 640 \ + /etc/donau/secrets/donau-db.secret.conf + fi + + ;; + +abort-upgrade | abort-remove | abort-deconfigure) ;; + +*) + echo "postinst called with unknown argument \`${1}'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/donau.postrm b/debian/donau.postrm @@ -0,0 +1,39 @@ +#!/bin/sh + +set -e + +_GROUPNAME=donau-secmod +_DBGROUPNAME=donau-db +_EUSERNAME=donau-httpd +_CSECUSERNAME=donau-secmod-cs +_RSECUSERNAME=donau-secmod-rsa +_ESECUSERNAME=donau-secmod-eddsa + + +if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule +fi + +case "${1}" in +purge) + dpkg-statoverride --remove \ + /etc/donau/secrets/donau-db.secret.conf || true + deluser --quiet --system ${_CSECUSERNAME} || true + deluser --quiet --system ${_RSECUSERNAME} || true + deluser --quiet --system ${_ESECUSERNAME} || true + deluser --quiet --system ${_EUSERNAME} || true + delgroup --only-if-empty --quiet ${_DBGROUPNAME} || true + delgroup --only-if-empty --quiet ${_GROUPNAME} || true + ;; + +remove | upgrade | failed-upgrade | abort-install | abort-upgrade | disappear) + ;; +*) + echo "postrm called with unknown argument \`${1}'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# + +exit 0 diff --git a/debian/taler-donau.prerm b/debian/donau.prerm diff --git a/debian/donau.tmpfiles b/debian/donau.tmpfiles @@ -0,0 +1,8 @@ +#Type Path Mode UID GID Age Argument +d /run/donau/secmod-rsa 0755 donau-secmod-rsa donau-secmod - - +d /run/donau/secmod-cs 0755 donau-secmod-cs donau-secmod - - +d /run/donau/secmod-eddsa 0755 donau-secmod-eddsa donau-secmod - - +d /run/donau/httpd 0750 donau-httpd www-data - - +d /var/lib/donau/secmod-cs 0700 donau-secmod-cs donau-secmod - - +d /var/lib/donau/secmod-rsa 0700 donau-secmod-rsa donau-secmod - - +d /var/lib/donau/secmod-eddsa 0700 donau-secmod-eddsa donau-secmod - - diff --git a/debian/etc-libtalerdonau/taler/overrides.conf b/debian/etc-libtalerdonau/taler/overrides.conf @@ -1 +0,0 @@ -# This configuration will be changed by tooling. Do not touch it manually. diff --git a/debian/etc-libtalerdonau/taler/taler.conf b/debian/etc-libtalerdonau/taler/taler.conf @@ -1,49 +0,0 @@ -# Main entry point for the GNU Taler configuration. -# -# Structure: -# - taler.conf is the main configuration entry point -# used by all Taler components (the file you are currently -# looking at. -# - overrides.conf contains configuration overrides that are -# set by some tools that help with the configuration, -# and should not be edited by humans. Comments in this file -# are not preserved. -# - conf.d/ contains configuration files for -# Taler components, which can be read by all -# users of the system and are included by the main -# configuration. -# - secrets/ contains configuration snippets -# with secrets for particular services. -# These files should have restrictive permissions -# so that only users of the relevant services -# can read it. All files in it should end with -# ".secret.conf". - -[taler] - -# Currency of the Taler deployment. This setting applies to all Taler -# components that only support a single currency. -#currency = KUDOS - -# Smallest currency unit handled by the underlying bank system. Taler payments -# can make payments smaller than this units, but interactions with external -# systems is always rounded to this unit. -#currency_round_unit = KUDOS:0.01 - -# Monthly amount that mandatorily triggers an AML check -#AML_THRESHOLD = KUDOS:10000000 - -[paths] - -TALER_HOME = /var/lib/taler -TALER_RUNTIME_DIR = /run/taler -TALER_CACHE_HOME = /var/cache/taler -TALER_CONFIG_HOME = /etc/taler -TALER_DATA_HOME = /var/lib/taler - - -# Inline configurations from all Taler components. -@inline-matching@ conf.d/*.conf - -# Overrides from tools that help with configuration. -@inline@ overrides.conf diff --git a/debian/etc-taler-auditor/apache2/sites-available/taler-auditor.conf b/debian/etc-taler-auditor/apache2/sites-available/taler-auditor.conf @@ -1,4 +0,0 @@ -<Location "/taler-auditor/"> -ProxyPass "unix:/var/lib/taler-auditor/auditor.sock|http://example.com/" -RequestHeader add "X-Forwarded-Proto" "https" -</Location> diff --git a/debian/etc-taler-auditor/nginx/sites-available/taler-auditor b/debian/etc-taler-auditor/nginx/sites-available/taler-auditor @@ -1,18 +0,0 @@ -server { - - listen 80; - listen [::]:80; - - server_name localhost; - - access_log /var/log/nginx/auditor.log; - error_log /var/log/nginx/auditor.err; - - location /taler-auditor/ { - proxy_pass http://unix:/var/lib/taler-auditor/auditor.sock; - proxy_redirect off; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-Host "localhost"; - #proxy_set_header X-Forwarded-Proto "https"; - } -} -\ No newline at end of file diff --git a/debian/etc-taler-auditor/taler/conf.d/auditor-system.conf b/debian/etc-taler-auditor/taler/conf.d/auditor-system.conf @@ -1,12 +0,0 @@ -# Read secret sections into configuration, but only -# if we have permission to do so. -@inline-secret@ auditordb-postgres ../secrets/auditor-db.secret.conf - -[auditor] -# Debian package is configured to use a reverse proxy with a UNIX -# domain socket. See nginx/apache configuration files. -SERVE = UNIX -UNIXPATH = /var/lib/taler-auditor/auditor.sock - -# Only supported database is Postgres right now. -DATABASE = postgres diff --git a/debian/etc-taler-auditor/taler/secrets/auditor-db.secret.conf b/debian/etc-taler-auditor/taler/secrets/auditor-db.secret.conf @@ -1,10 +0,0 @@ -# Database configuration for the Taler auditor. - -[auditordb-postgres] - -# Typically, there should only be a single line here, of the form: - -CONFIG=postgres:///DATABASE - -# The details of the URI depend on where the database lives and how -# access control was configured. diff --git a/debian/etc-taler-donau/apache2/sites-available/taler-exchange.conf b/debian/etc-taler-donau/apache2/sites-available/taler-exchange.conf @@ -1,4 +0,0 @@ -<Location "/taler-donau/"> -ProxyPass "unix:/run/taler/donau-httpd/donau-http.sock|http://example.com/" -RequestHeader add "X-Forwarded-Proto" "https" -</Location> diff --git a/debian/etc-taler-donau/nginx/sites-available/taler-exchange b/debian/etc-taler-donau/nginx/sites-available/taler-exchange @@ -1,17 +0,0 @@ -server { - listen 80; - listen [::]:80; - - server_name localhost; - - access_log /var/log/nginx/donau.log; - error_log /var/log/nginx/donau.err; - - location /taler-donau/ { - proxy_pass http://unix:/run/taler/donau-httpd/donau-http.sock:/; - proxy_redirect off; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-Host "localhost"; - #proxy_set_header X-Forwarded-Proto "https"; - } -} diff --git a/debian/etc-taler-donau/taler/conf.d/exchange-business.conf b/debian/etc-taler-donau/taler/conf.d/exchange-business.conf @@ -1,50 +0,0 @@ -# Configuration for business-level aspects of the donau. - -[donau] - -# Here you MUST add the master public key of the offline system -# which you can get using `taler-donau-offline setup`. -# This is just an example, your key will be different! -# MASTER_PUBLIC_KEY = YE6Q6TR1EDB7FD0S68TGDZGF1P0GHJD2S0XVV8R2S62MYJ6HJ4ZG -# MASTER_PUBLIC_KEY = - -# Publicly visible base URL of the donau. -# BASE_URL = https://example.com/ -# BASE_URL = - -# Here you MUST configure the amount above which transactions are -# always subject to manual AML review. -# AML_THRESHOLD = - -# Attribute encryption key for storing attributes encrypted -# in the database. Should be a high-entropy nonce. -ATTRIBUTE_ENCRYPTION_KEY = SET_ME_PLEASE - -# For your terms of service and privacy policy, you should specify -# an Etag that must be updated whenever there are significant -# changes to either document. The format is up to you, what matters -# is that the value is updated and never re-used. See the HTTP -# specification on Etags. -# TERMS_ETAG = -# PRIVACY_ETAG = - -SERVE = unix -UNIXPATH_MODE = 666 - -# Bank accounts used by the donau should be specified here: -[donau-account-1] - -ENABLE_CREDIT = NO -ENABLE_DEBIT = NO - -# Account identifier in the form of an RFC-8905 payto:// URI. -# For SEPA, looks like payto://sepa/$IBAN?receiver-name=$NAME -# Make sure to URL-encode spaces in $NAME! -PAYTO_URI = - -# Credentials to access the account are in a separate -# config file with restricted permissions. -@inline-secret@ donau-accountcredentials-1 ../secrets/donau-accountcredentials-1.secret.conf - - - diff --git a/debian/etc-taler-donau/taler/conf.d/exchange-coins.conf b/debian/etc-taler-donau/taler/conf.d/exchange-coins.conf @@ -1,33 +0,0 @@ -# -# This configuration file specifies the various denominations offered by your -# donau. -# -# Each denomination must be specified in a sections starting with -# "coin_". -# -# What follows is an example. -# - -# [coin_FOO] -## Actual value of the coin -#VALUE = KUDOS:1 - -## How long will one key be used for withdrawals? -#DURATION_WITHDRAW = 7 days - -## How long do users have to spend their coins? -#DURATION_SPEND = 2 years - -## How long does the donau keep the proofs around for legal disputes? -#DURATION_LEGAL = 6 years - -## Fees charged. Note that for the lowest denomination, the -## fee must precisely be the lowest denomination, or zero. -#FEE_WITHDRAW = KUDOS:0 -#FEE_DEPOSIT = KUDOS:0 -#FEE_REFRESH = KUDOS:0 -#FEE_REFUND = KUDOS:0 - -## How long should the RSA keys be. Do not change unless you really know -## what you are doing (consult your local cryptographer first!). -#RSA_KEYSIZE = 2048 diff --git a/debian/etc-taler-donau/taler/conf.d/exchange-system.conf b/debian/etc-taler-donau/taler/conf.d/exchange-system.conf @@ -1,13 +0,0 @@ -# Configuration settings for system parameters of the donau. - -# Read secret sections into configuration, but only -# if we have permission to do so. -@inline-secret@ donaudb-postgres ../secrets/donau-db.secret.conf - -[donau] - -# Only supported database is Postgres right now. -DATABASE = postgres - - - diff --git a/debian/etc-taler-donau/taler/secrets/exchange-accountcredentials-1.secret.conf b/debian/etc-taler-donau/taler/secrets/exchange-accountcredentials-1.secret.conf @@ -1,17 +0,0 @@ -# This file contains the secret credentials -# to access the Taler Wire Gateway API (usually -# provided by LibEuFin) for the donau accounts. -# -# Each donau-account-* section should have a matching -# donau-accountcredentials-* section here. -# -# Each of those sections must be imported via @inline-secret@, -# usually in conf.d/donau-business.conf. - -[donau-accountcredentials-1] - -wire_gateway_auth_method = basic -password = -username = -wire_gateway_url = - diff --git a/debian/etc-taler-donau/taler/secrets/exchange-db.secret.conf b/debian/etc-taler-donau/taler/secrets/exchange-db.secret.conf @@ -1,10 +0,0 @@ -# Database configuration for the Taler donau. - -[donaudb-postgres] - -# Typically, there should only be a single line here, of the form: - -# CONFIG=postgres:///DATABASE - -# The details of the URI depend on where the database lives and how -# access control was configured. diff --git a/debian/etc/donau/conf.d/system.conf b/debian/etc/donau/conf.d/system.conf @@ -0,0 +1,13 @@ +# Configuration settings for system parameters of the exchange. + +# Read secret sections into configuration, but only +# if we have permission to do so. +@inline-secret@ donaudb-postgres ../secrets/donau-db.secret.conf + +[donau] + +# Only supported database is Postgres right now. +DB = postgres + +SERVE = unix +UNIXPATH_MODE = 666 diff --git a/debian/etc/donau/conf.d/units.conf b/debian/etc/donau/conf.d/units.conf @@ -0,0 +1 @@ +# This file should define the units used by donau +\ No newline at end of file diff --git a/debian/etc/donau/donau.conf b/debian/etc/donau/donau.conf @@ -0,0 +1,39 @@ +# Main entry point for the GNU Taler configuration. +# +# Structure: +# - donau.conf is the main configuration entry point +# - overrides.conf contains configuration overrides that are +# set by some tools that help with the configuration, +# and should not be edited by humans. Comments in this file +# are not preserved. +# - conf.d/ contains configuration files for +# donau, which can be read by all +# users of the system and are included by the main +# configuration. +# - secrets/ contains configuration snippets +# with secrets for particular services. +# These files should have restrictive permissions +# so that only users of the relevant services +# can read it. All files in it should end with +# ".secret.conf". + +[donau] + +#currency = KUDOS + +# Inline configurations from all Taler components. +@inline-matching@ conf.d/*.conf + +# Overrides from tools that help with configuration. +@inline@ overrides.conf + +[paths] + +# Paths for the system-wide installation of the Taler donau. Do not remove +# or change these unless you are very sure of what you are doing. + +DONAU_HOME = /var/lib/donau/ +DONAU_RUNTIME_DIR = /run/donau/ +DONAU_CACHE_HOME = /var/cache/donau/ +DONAU_CONFIG_HOME = /etc/donau/ +DONAU_DATA_HOME = /var/lib/donau/ diff --git a/debian/etc/donau/overrides.conf b/debian/etc/donau/overrides.conf @@ -0,0 +1,2 @@ +# This file will be overridden by tooling. It is not recommended +# to manually modify it. +\ No newline at end of file diff --git a/debian/etc/donau/secrets/donau-db.secret.conf b/debian/etc/donau/secrets/donau-db.secret.conf @@ -0,0 +1,10 @@ +# Database configuration for the Taler donau. + +[donaudb-postgres] + +# Typically, there should only be a single line here, of the form: + +CONFIG=postgres:///donau + +# The details of the URI depend on where the database lives and how +# access control was configured. diff --git a/debian/libdonau-dev.install b/debian/libdonau-dev.install @@ -0,0 +1,9 @@ +# Headers +usr/include/taler/* + +# Plain .so symlinks +usr/lib/*/libdonau*.so + +# Testing libraries +usr/lib/*/libdonautesting.so.* +usr/lib/*/libdonautesting.so diff --git a/debian/libdonau.dirs b/debian/libdonau.dirs @@ -0,0 +1 @@ +/var/lib/donau diff --git a/debian/libdonau.install b/debian/libdonau.install @@ -0,0 +1,6 @@ +usr/lib/*/libdonau*.so.* + +usr/share/donau/config.d/paths.conf +usr/share/donau/config.d/donau.conf +debian/etc/* etc/ +usr/bin/donau-config +\ No newline at end of file diff --git a/debian/libdonau.tmpfiles b/debian/libdonau.tmpfiles @@ -0,0 +1,2 @@ +#Type Path Mode UID GID Age Argument +d /run/donau 0755 root root - - diff --git a/debian/libtalerdonau-dev.install b/debian/libtalerdonau-dev.install @@ -1,35 +0,0 @@ -# Benchmarks, only install them for the dev package. -usr/bin/taler-aggregator-benchmark -usr/bin/taler-bank-benchmark -usr/bin/taler-donau-benchmark -usr/bin/taler-donau-kyc-tester -usr/bin/taler-fakebank-run -usr/bin/taler-unified-setup.sh - -# Only used in test cases. Maybe these -# shouldn't even be installed? -usr/bin/taler-bank-manage-testing -usr/bin/taler-nexus-prepare - -# Man pages -usr/share/man/man1/taler-donau-kyc-tester* -usr/share/man/man1/taler-aggregator-benchmark* -usr/share/man/man1/taler-bank-benchmark* -usr/share/man/man1/taler-donau-benchmark* -usr/share/man/man1/taler-unified-setup* - - -# Headers -usr/include/taler/* - -# Plain .so symlinks -usr/lib/*/libtaler*.so - -# Testing libraries -usr/lib/*/libtalertesting.so.* -usr/lib/*/libtalerfakebank.so.* -usr/lib/*/libtalertesting.so -usr/lib/*/libtalerfakebank.so - -# Documentation -usr/share/info/taler-developer-manual* diff --git a/debian/libtalerdonau.dirs b/debian/libtalerdonau.dirs @@ -1 +0,0 @@ -/var/lib/taler diff --git a/debian/libtalerdonau.install b/debian/libtalerdonau.install @@ -1,10 +0,0 @@ -usr/lib/*/libtaler*.so.* - -# FIXME: All this should eventually go into taler-base. -usr/share/taler/config.d/paths.conf -usr/share/taler/config.d/taler.conf -debian/etc-libtalerdonau/* etc/ -usr/bin/taler-config -usr/bin/taler-terms-generator -usr/share/man/man5/taler.conf.5 -usr/share/man/man1/taler-config* diff --git a/debian/libtalerdonau.tmpfiles b/debian/libtalerdonau.tmpfiles @@ -1,2 +0,0 @@ -#Type Path Mode UID GID Age Argument -d /run/taler 0755 root root - - diff --git a/debian/patches/0001-Dont_copy_license_file.patch b/debian/patches/0001-Dont_copy_license_file.patch @@ -1,22 +0,0 @@ -From: Bertrand Marc <bmarc@debian.org> -Date: Sun, 5 Jul 2020 14:58:43 +0200 -Subject: Dont_copy_license_file - ---- - contrib/Makefile.inc | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/contrib/Makefile.inc b/contrib/Makefile.inc -index a563ef4..c737a07 100644 ---- a/contrib/Makefile.inc -+++ b/contrib/Makefile.inc -@@ -8,8 +8,7 @@ BUILDCOMMON_SHLIB_FILES = \ - build-common/sh/lib.sh/existence_python.sh \ - build-common/sh/lib.sh/msg.sh \ - build-common/sh/lib.sh/progname.sh \ -- build-common/sh/lib.sh/version_gnunet.sh \ -- build-common/LICENSE -+ build-common/sh/lib.sh/version_gnunet.sh - - BUILDCOMMON_CONF_FILES = \ - build-common/conf/.dir-locals.el \ diff --git a/debian/patches/series b/debian/patches/series @@ -1 +0,0 @@ -0001-Dont_copy_license_file.patch diff --git a/debian/po/POTFILES.in b/debian/po/POTFILES.in @@ -1 +0,0 @@ -[type: gettext/rfc822deb] taler-donau.templates diff --git a/debian/rules b/debian/rules @@ -20,32 +20,16 @@ override_dh_auto_build-indep: override_dh_auto_test: # Disabling test suite, incomplete -override_dh_auto_install-arch: - dh_auto_install - - # Removing useless files - rm -f debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/*.la \ - debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/taler/*.la \ - debian/tmp/usr/share/doc/taler/COPYING - -override_dh_auto_install-indep: - override_dh_auto_clean: dh_auto_clean override_dh_installsystemd: # Need to specify units manually, since we have multiple # and dh_installsystemd by default only looks for "<package>.service". - dh_installsystemd -ptaler-donau --name=taler-donau-httpd --no-start --no-enable - dh_installsystemd -ptaler-donau --name=taler-donau-aggregator --no-start --no-enable - dh_installsystemd -ptaler-donau --name=taler-donau-transfer --no-start --no-enable - dh_installsystemd -ptaler-donau --name=taler-donau-wirewatch --no-start --no-enable - dh_installsystemd -ptaler-donau --name=taler-donau-secmod-cs --no-start --no-enable - dh_installsystemd -ptaler-donau --name=taler-donau-secmod-eddsa --no-start --no-enable - dh_installsystemd -ptaler-donau --name=taler-donau-secmod-rsa --no-start --no-enable - dh_installsystemd -ptaler-donau --name=taler-donau-closer --no-start --no-enable - dh_installsystemd -ptaler-auditor --name=taler-auditor-httpd --no-start --no-enable - dh_installsystemd -ptaler-donau --name=taler-donau --no-start --no-enable + dh_installsystemd -pdonau --name=donau-httpd --no-start --no-enable + dh_installsystemd -pdonau --name=donau-secmod-cs --no-start --no-enable + dh_installsystemd -pdonau --name=donau-secmod-eddsa --no-start --no-enable + dh_installsystemd -pdonau --name=donau-secmod-rsa --no-start --no-enable # final invocation to generate daemon reload dh_installsystemd @@ -53,14 +37,3 @@ override_dh_install: dh_install # With debhelper-compat=12, we still need to call this manually dh_installtmpfiles -# Remove files already present in libtalerdonau from main taler-donau package - cd debian/libtalerdonau-dev; find . -type f,l -exec rm -f ../libtalerauditor/{} \; - cd debian/libtalerdonau-dev; find . -type f,l -exec rm -f ../taler-donau/{} \; - cd debian/libtalerdonau-dev; find . -type f,l -exec rm -f ../taler-auditor/{} \; - cd debian/libtalerdonau-dev; find . -type f,l -exec rm -f ../libtalerdonau/{} \; - cd debian/libtalerdonau-dev; find . -type f,l -exec rm -f ../libtalerauditor/{} \; - cd debian/taler-auditor; find . -type f,l -exec rm -f ../libtalerauditor/{} \; - cd debian/taler-auditor; find . -type f,l -exec rm -f ../libtalerdonau/{} \; - cd debian/taler-auditor; find . -type f,l -exec rm -f ../taler-donau/{} \; - cd debian/taler-donau-database; find . -type f,l -exec rm -f ../taler-donau/{} \; - cd debian/libtalerdonau; find . -type f,l -exec rm -f ../taler-donau/{} \; diff --git a/debian/source/format b/debian/source/format @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/debian/source/options b/debian/source/options @@ -1,3 +0,0 @@ -extend-diff-ignore = "^(config\.sub|config\.guess|Makefile)$" - - diff --git a/debian/taler-auditor.install b/debian/taler-auditor.install @@ -1,21 +0,0 @@ -usr/bin/taler-auditor -usr/bin/taler-auditor-dbconfig -usr/bin/taler-auditor-dbinit -usr/bin/taler-auditor-donau -usr/bin/taler-auditor-httpd -usr/bin/taler-auditor-offline -usr/bin/taler-auditor-sync -usr/bin/taler-helper-auditor-* -usr/lib/*/taler/libtaler_plugin_auditor*.so -usr/lib/*/libauditor* -usr/lib/*/libtalerauditordb* -usr/share/man/man1/taler-auditor* -usr/share/man/man1/taler-helper-auditor* -usr/share/info/taler-auditor* -usr/share/taler/config.d/auditor* -usr/share/taler/sql/auditor/* - -# Configuration -debian/etc-taler-auditor/* etc/ - -usr/share/taler/donau/auditor-report.tex.j2 diff --git a/debian/taler-auditor.postinst b/debian/taler-auditor.postinst @@ -1,41 +0,0 @@ -#!/bin/bash - -set -e - -. /usr/share/debconf/confmodule - -CONFIG_FILE="/etc/default/taler-auditor" -TALER_HOME="/var/lib/taler-auditor" -_USERNAME=taler-auditor-httpd -_GROUPNAME=taler-auditor-httpd - -case "${1}" in -configure) - # Creating taler groups as needed - if ! getent group ${_GROUPNAME} >/dev/null; then - addgroup --quiet --system ${_GROUPNAME} - fi - # Creating taler users if needed - if ! getent passwd ${_USERNAME} >/dev/null; then - adduser --quiet --system --ingroup ${_GROUPNAME} --no-create-home --home ${TALER_HOME} ${_USERNAME} - fi - - if ! dpkg-statoverride --list /etc/taler/secrets/auditor-db.secret.conf >/dev/null 2>&1 - then - dpkg-statoverride --add --update \ - ${_USERNAME} ${_GROUPNAME} 640 \ - /etc/taler/secrets/auditor-db.secret.conf - fi - - ;; - -abort-upgrade | abort-remove | abort-deconfigure) ;; -*) - echo "postinst called with unknown argument \`${1}'" >&2 - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/debian/taler-auditor.postrm b/debian/taler-auditor.postrm @@ -1,29 +0,0 @@ -#!/bin/sh - -set -e - -if [ -f /usr/share/debconf/confmodule ]; then - . /usr/share/debconf/confmodule -fi - -_USERNAME=taler-auditor-httpd -_GROUPNAME=taler-auditor-httpd - -case "${1}" in -purge) - dpkg-statoverride --remove \ - /etc/taler/secrets/auditor-db.secret.conf || true - deluser --system --quiet ${_USERNAME} || true - delgroup --only-if-empty --quiet ${_GROUPNAME} || true - ;; - -remove | upgrade | failed-upgrade | abort-install | abort-upgrade | disappear) ;; -*) - echo "postrm called with unknown argument \`${1}'" >&2 - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/debian/taler-auditor.taler-auditor-httpd.service b/debian/taler-auditor.taler-auditor-httpd.service @@ -1,12 +0,0 @@ -[Unit] -Description=GNU Taler payment system auditor REST API -After=postgres.service network.target - -[Service] -User=taler-auditor-httpd -Type=simple -Restart=on-failure -ExecStart=/usr/bin/taler-auditor-httpd -c /etc/taler/taler.conf - -[Install] -WantedBy=multi-user.target diff --git a/debian/taler-auditor.tmpfiles b/debian/taler-auditor.tmpfiles @@ -1,2 +0,0 @@ -#Type Path Mode UID GID Age Argument -d /run/taler/auditor-httpd 0755 taler-auditor-httpd taler-auditor-httpd - - diff --git a/debian/taler-donau-database.install b/debian/taler-donau-database.install @@ -1,8 +0,0 @@ -usr/bin/taler-donau-dbconfig -usr/bin/taler-donau-dbinit -usr/lib/*/taler/libtaler_plugin_donau*.so -usr/share/man/man1/taler-donau-dbconfig.1 -usr/share/man/man1/taler-donau-dbinit.1 -usr/share/taler/sql/donau/* -usr/share/taler/config.d/donaudb.conf -usr/share/taler/config.d/donaudb-postgres.conf diff --git a/debian/taler-donau-offline.install b/debian/taler-donau-offline.install @@ -1,2 +0,0 @@ -usr/bin/taler-donau-offline -usr/share/man/man1/taler-donau-offline* diff --git a/debian/taler-donau-offline.postinst b/debian/taler-donau-offline.postinst @@ -1,38 +0,0 @@ -#!/bin/bash - -set -e - -. /usr/share/debconf/confmodule - -case "${1}" in -configure) - - if ! getent group taler-donau-offline >/dev/null; then - addgroup --quiet taler-donau-offline - fi - - if ! getent passwd taler-donau-offline >/dev/null; then - adduser --quiet \ - --disabled-password \ - --system \ - --shell /bin/bash \ - --home /home/taler-donau-offline \ - --ingroup taler-donau-offline \ - taler-donau-offline - fi - - ;; - -abort-upgrade | abort-remove | abort-deconfigure) - - ;; - -*) - echo "postinst called with unknown argument \`${1}'" >&2 - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/debian/taler-donau-offline.tmpfiles b/debian/taler-donau-offline.tmpfiles @@ -1,2 +0,0 @@ -#Type Path Mode UID GID Age Argument -d /var/lib/taler/donau-offline 0700 taler-donau-offline taler-donau-offline - - diff --git a/debian/taler-donau.README.Debian b/debian/taler-donau.README.Debian @@ -1,34 +0,0 @@ -taler-donau --------------- - -Note that the configuration is incomplete, and that Debian cannot launch an -donau with this minimal template. You must: - -* Configure the Postgres database for the donau, ideally including - remote replication of the database to the auditor. -* Run `taler-donau-dbinit` (also after package upgrades). -* Edit ``/etc/taler-secmod.conf`` to must setup the currency and denominations - details. -* Edit `/etc/taler-wire.conf` to provide details about the bank account access. -* Run `taler-donau-offline setup` on your offline system and add - the resulting master public key into the ``[donau]`` section of - ``/etc/taler-donau.conf`` under ``MASTER_PUBLIC_KEY``. - - -None of these are done by the Debian package because we cannot provide the -required complete configuration details. - - -Once you have done this, you can use the following commands to start, stop or -restart the Taler donau: - - # systemctl start taler-donau-httpd.service - # systemctl stop taler-donau-httpd.service - # systemctl restart taler-donau-httpd.service - -To permanently the donau whenever the system boots, use: - - # systemctl enable taler-donau-httpd - - - -- Christian Grothoff <grothoff@gnu.org> Mon 28 Dec 2020 11:37:14 AM CET diff --git a/debian/taler-donau.links b/debian/taler-donau.links @@ -1 +0,0 @@ - diff --git a/debian/taler-donau.lintan-overrides b/debian/taler-donau.lintan-overrides @@ -1,3 +0,0 @@ -# internal libraries are not split out into a dedicated package to avoid -# micropackaging. -taler-donau: package-name-doesnt-match-sonames diff --git a/debian/taler-donau.postinst b/debian/taler-donau.postinst @@ -1,81 +0,0 @@ -#!/bin/bash - -set -e - -. /usr/share/debconf/confmodule - -TALER_HOME="/var/lib/taler" -_GROUPNAME=taler-donau-secmod -_DBGROUPNAME=taler-donau-db -_EUSERNAME=taler-donau-httpd -_CLOSERUSERNAME=taler-donau-closer -_CSECUSERNAME=taler-donau-secmod-cs -_RSECUSERNAME=taler-donau-secmod-rsa -_ESECUSERNAME=taler-donau-secmod-eddsa -_AGGRUSERNAME=taler-donau-aggregator -_WIREUSERNAME=taler-donau-wire - -case "${1}" in -configure) - - # Create taler groups as needed - if ! getent group ${_GROUPNAME} >/dev/null; then - addgroup --quiet --system ${_GROUPNAME} - fi - if ! getent group ${_DBGROUPNAME} >/dev/null; then - addgroup --quiet --system ${_DBGROUPNAME} - fi - - # Create taler users if needed - if ! getent passwd ${_EUSERNAME} >/dev/null; then - adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${TALER_HOME} ${_EUSERNAME} - adduser --quiet ${_EUSERNAME} ${_DBGROUPNAME} - adduser --quiet ${_EUSERNAME} ${_GROUPNAME} - fi - if ! getent passwd ${_RSECUSERNAME} >/dev/null; then - adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${TALER_HOME} ${_RSECUSERNAME} - fi - if ! getent passwd ${_CSECUSERNAME} >/dev/null; then - adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${TALER_HOME} ${_CSECUSERNAME} - fi - if ! getent passwd ${_ESECUSERNAME} >/dev/null; then - adduser --quiet --system --no-create-home --ingroup ${_GROUPNAME} --home ${TALER_HOME} ${_ESECUSERNAME} - fi - if ! getent passwd ${_WIREUSERNAME} >/dev/null; then - adduser --quiet --system --no-create-home --home ${TALER_HOME} ${_WIREUSERNAME} - adduser --quiet ${_WIREUSERNAME} ${_DBGROUPNAME} - fi - if ! getent passwd ${_CLOSERUSERNAME} >/dev/null; then - adduser --quiet --system --no-create-home --home ${TALER_HOME} ${_CLOSERUSERNAME} - adduser --quiet ${_CLOSERUSERNAME} ${_DBGROUPNAME} - fi - if ! getent passwd ${_AGGRUSERNAME} >/dev/null; then - adduser --quiet --system --no-create-home --home ${TALER_HOME} ${_AGGRUSERNAME} - adduser --quiet ${_AGGRUSERNAME} ${_DBGROUPNAME} - fi - - if ! dpkg-statoverride --list /etc/taler/secrets/donau-accountcredentials-1.secret.conf >/dev/null 2>&1; then - dpkg-statoverride --add --update \ - ${_WIREUSERNAME} root 640 \ - /etc/taler/secrets/donau-accountcredentials-1.secret.conf - fi - - if ! dpkg-statoverride --list /etc/taler/secrets/donau-db.secret.conf >/dev/null 2>&1; then - dpkg-statoverride --add --update \ - root ${_DBGROUPNAME} 640 \ - /etc/taler/secrets/donau-db.secret.conf - fi - - ;; - -abort-upgrade | abort-remove | abort-deconfigure) ;; - -*) - echo "postinst called with unknown argument \`${1}'" >&2 - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/debian/taler-donau.postrm b/debian/taler-donau.postrm @@ -1,48 +0,0 @@ -#!/bin/sh - -set -e - -_GROUPNAME=taler-donau-secmod -_DBGROUPNAME=taler-donau-db -_EUSERNAME=taler-donau-httpd -_CLOSERUSERNAME=taler-donau-closer -_CSECUSERNAME=taler-donau-secmod-cs -_RSECUSERNAME=taler-donau-secmod-rsa -_ESECUSERNAME=taler-donau-secmod-eddsa -_AGGRUSERNAME=taler-donau-aggregator -_WIREUSERNAME=taler-donau-wire - - -if [ -f /usr/share/debconf/confmodule ]; then - . /usr/share/debconf/confmodule -fi - -case "${1}" in -purge) - rm -rf /var/lib/taler/donau-offline /var/lib/taler/donau-secmod-* - dpkg-statoverride --remove \ - /etc/taler/secrets/donau-accountcredentials-1.secret.conf || true - dpkg-statoverride --remove \ - /etc/taler/secrets/donau-db.secret.conf || true - deluser --quiet --system ${_CSECUSERNAME} || true - deluser --quiet --system ${_RSECUSERNAME} || true - deluser --quiet --system ${_ESECUSERNAME} || true - deluser --quiet --system ${_AGGRUSERNAME} || true - deluser --quiet --system ${_WIREUSERNAME} || true - deluser --quiet --system ${_CLOSERUSERNAME} || true - deluser --quiet --system ${_EUSERNAME} || true - delgroup --only-if-empty --quiet ${_DBGROUPNAME} || true - delgroup --only-if-empty --quiet ${_GROUPNAME} || true - ;; - -remove | upgrade | failed-upgrade | abort-install | abort-upgrade | disappear) - ;; -*) - echo "postrm called with unknown argument \`${1}'" >&2 - exit 1 - ;; -esac - -#DEBHELPER# - -exit 0 diff --git a/debian/taler-donau.taler-donau-aggregator.service b/debian/taler-donau.taler-donau-aggregator.service @@ -1,18 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau aggregator service -PartOf=taler-donau.target -After=postgres.service - -[Service] -User=taler-donau-aggregator -Type=simple -Restart=always -RestartSec=1s -ExecStart=/usr/bin/taler-donau-aggregator -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=yes -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice -RuntimeMaxSec=3600s diff --git a/debian/taler-donau.taler-donau-aggregator@.service b/debian/taler-donau.taler-donau-aggregator@.service @@ -1,17 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau aggregator service -PartOf=taler-donau.target - -[Service] -User=taler-donau-aggregator -Type=simple -Restart=always -RestartSec=1s -ExecStart=/usr/bin/taler-donau-aggregator -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=yes -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice -RuntimeMaxSec=3600s diff --git a/debian/taler-donau.taler-donau-closer.service b/debian/taler-donau.taler-donau-closer.service @@ -1,18 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau closer service -PartOf=taler-donau.target -After=network.target postgres.service - -[Service] -User=taler-donau-closer -Type=simple -Restart=always -RestartSec=1s -ExecStart=/usr/bin/taler-donau-closer -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=yes -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice -RuntimeMaxSec=3600s diff --git a/debian/taler-donau.taler-donau-expire.service b/debian/taler-donau.taler-donau-expire.service @@ -1,18 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau expire service -PartOf=taler-donau.target -After=postgres.service - -[Service] -User=taler-donau-expire -Type=simple -Restart=always -RestartSec=1s -ExecStart=/usr/bin/taler-donau-expire -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=yes -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice -RuntimeMaxSec=3600s diff --git a/debian/taler-donau.taler-donau-httpd.service b/debian/taler-donau.taler-donau-httpd.service @@ -1,33 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau REST API -AssertPathExists=/run/taler/donau-httpd -Requires=taler-donau-httpd.socket taler-donau-secmod-cs.service taler-donau-secmod-rsa.service taler-donau-secmod-eddsa.service -After=postgres.service network.target taler-donau-secmod-cs.service taler-donau-secmod-rsa.service taler-donau-secmod-eddsa.service -PartOf=taler-donau.target - -[Service] -User=taler-donau-httpd -Type=simple - -# Depending on the configuration, the service process kills itself and then -# needs to be restarted. Thus no significant delay on restarts. -Restart=always -RestartSec=1ms - -# Disable the service if more than 5 restarts are encountered within 5s. -# These are usually the systemd defaults, but can be overwritten, thus we set -# them here explicitly, as the donau code assumes StartLimitInterval -# to be >=5s. -StartLimitBurst=5 -StartLimitInterval=5s - -ExecStart=/usr/bin/taler-donau-httpd -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=no -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice - -[Install] -WantedBy=multi-user.target diff --git a/debian/taler-donau.taler-donau-httpd.socket b/debian/taler-donau.taler-donau-httpd.socket @@ -1,14 +0,0 @@ -[Unit] -Description=Taler Donau Socket -PartOf=taler-donau-httpd.service - -[Socket] -ListenStream=/run/taler/donau-httpd/donau-http.sock -Accept=no -Service=taler-donau-httpd.service -SocketUser=taler-donau-httpd -SocketGroup=www-data -SocketMode=0660 - -[Install] -WantedBy=sockets.target diff --git a/debian/taler-donau.taler-donau-httpd@.service b/debian/taler-donau.taler-donau-httpd@.service @@ -1,27 +0,0 @@ -% This is a systemd service template. -[Unit] -Description=GNU Taler payment system donau REST API at %I -AssertPathExists=/run/taler/donau-httpd -Requires=taler-donau-httpd@%i.socket taler-donau-secmod-rsa.service taler-donau-secmod-eddsa.service -After=postgres.service network.target taler-donau-secmod-rsa.service taler-donau-secmod-eddsa.service -PartOf=taler-donau.target - -[Service] -User=taler-donau-httpd -Type=simple -# Depending on the configuration, the service suicides and then -# needs to be restarted. -Restart=always -# Do not dally on restarts. -RestartSec=1ms -EnvironmentFile=/etc/environment -ExecStart=/usr/bin/taler-donau-httpd -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=no -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice - -[Install] -WantedBy=multi-user.target diff --git a/debian/taler-donau.taler-donau-httpd@.socket b/debian/taler-donau.taler-donau-httpd@.socket @@ -1,14 +0,0 @@ -[Unit] -Description=Taler Donau Socket at %I -PartOf=taler-donau-httpd@%i.service - -[Socket] -ListenStream=80 -Accept=no -Service=taler-donau-httpd@%i.service -SocketUser=taler-donau-httpd -SocketGroup=www-data -SocketMode=0660 - -[Install] -WantedBy=sockets.target diff --git a/debian/taler-donau.taler-donau-secmod-cs.service b/debian/taler-donau.taler-donau-secmod-cs.service @@ -1,18 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau CS security module -AssertPathExists=/run/taler/donau-secmod-cs -PartOf=taler-donau.target - -[Service] -User=taler-donau-secmod-cs -Type=simple -Restart=always -RestartSec=100ms -ExecStart=/usr/bin/taler-donau-secmod-cs -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=no -PrivateDevices=yes -ProtectSystem=full -IPAddressDeny=any -Slice=taler-donau.slice diff --git a/debian/taler-donau.taler-donau-secmod-eddsa.service b/debian/taler-donau.taler-donau-secmod-eddsa.service @@ -1,19 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau EdDSA security module -AssertPathExists=/run/taler/donau-secmod-eddsa -PartOf=taler-donau.target - -[Service] -User=taler-donau-secmod-eddsa -Type=simple -Restart=always -RestartSec=100ms -ExecStart=/usr/bin/taler-donau-secmod-eddsa -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=no -PrivateDevices=yes -ProtectSystem=full -IPAddressDeny=any -Slice=taler-donau.slice - diff --git a/debian/taler-donau.taler-donau-secmod-rsa.service b/debian/taler-donau.taler-donau-secmod-rsa.service @@ -1,18 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau RSA security module -AssertPathExists=/run/taler/donau-secmod-rsa -PartOf=taler-donau.target - -[Service] -User=taler-donau-secmod-rsa -Type=simple -Restart=always -RestartSec=100ms -ExecStart=/usr/bin/taler-donau-secmod-rsa -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=no -PrivateDevices=yes -ProtectSystem=full -IPAddressDeny=any -Slice=taler-donau.slice diff --git a/debian/taler-donau.taler-donau-transfer.service b/debian/taler-donau.taler-donau-transfer.service @@ -1,18 +0,0 @@ -[Unit] -Description=Taler Donau Transfer Service -After=network.target postgres.service -PartOf=taler-donau.target - -[Service] -User=taler-donau-wire -Type=simple -Restart=always -RestartSec=1s -ExecStart=/usr/bin/taler-donau-transfer -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=yes -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice -RuntimeMaxSec=3600s diff --git a/debian/taler-donau.taler-donau-wirewatch.service b/debian/taler-donau.taler-donau-wirewatch.service @@ -1,18 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau wirewatch service -After=network.target postgres.service -PartOf=taler-donau.target - -[Service] -User=taler-donau-wire -Type=simple -Restart=always -RestartSec=1s -RuntimeMaxSec=3600s -ExecStart=/usr/bin/taler-donau-wirewatch -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=yes -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice diff --git a/debian/taler-donau.taler-donau-wirewatch@.service b/debian/taler-donau.taler-donau-wirewatch@.service @@ -1,18 +0,0 @@ -[Unit] -Description=GNU Taler payment system donau wirewatch service -After=network.target -PartOf=taler-donau.target - -[Service] -User=taler-donau-wire -Type=simple -Restart=always -RestartSec=1s -ExecStart=/usr/bin/taler-donau-wirewatch -c /etc/taler/taler.conf -StandardOutput=journal -StandardError=journal -PrivateTmp=yes -PrivateDevices=yes -ProtectSystem=full -Slice=taler-donau.slice -RuntimeMaxSec=3600s diff --git a/debian/taler-donau.taler-donau.target b/debian/taler-donau.taler-donau.target @@ -1,13 +0,0 @@ -[Unit] -Description=GNU Taler donau -After=postgres.service network.target - -Wants=taler-donau-httpd.service -Wants=taler-donau-wirewatch.service -Wants=taler-donau-aggregator.service -Wants=taler-donau-closer.service -Wants=taler-donau-expire.service -Wants=taler-donau-transfer.service - -[Install] -WantedBy=multi-user.target diff --git a/debian/taler-donau.tmpfiles b/debian/taler-donau.tmpfiles @@ -1,8 +0,0 @@ -#Type Path Mode UID GID Age Argument -d /run/taler/donau-secmod-rsa 0755 taler-donau-secmod-rsa taler-donau-secmod - - -d /run/taler/donau-secmod-cs 0755 taler-donau-secmod-cs taler-donau-secmod - - -d /run/taler/donau-secmod-eddsa 0755 taler-donau-secmod-eddsa taler-donau-secmod - - -d /run/taler/donau-httpd 0750 taler-donau-httpd www-data - - -d /var/lib/taler/donau-secmod-cs 0700 taler-donau-secmod-cs taler-donau-secmod - - -d /var/lib/taler/donau-secmod-rsa 0700 taler-donau-secmod-rsa taler-donau-secmod - - -d /var/lib/taler/donau-secmod-eddsa 0700 taler-donau-secmod-eddsa taler-donau-secmod - - diff --git a/debian/upstream/metadata b/debian/upstream/metadata @@ -1,4 +0,0 @@ -Bug-Submit: https://bugs.taler.net/ -Documentation: https://docs.taler.net/ -Repository: git.taler.net/donau.git -Repository-Browse: https://git.taler.net/donau.git diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc @@ -1,637 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -UJUbAoLQgUTaX99KUKeyCuiGUA== -=17vI ------END PGP PUBLIC KEY BLOCK----- ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -HJ4WgA4J3NpdbFpWe+Al47qoLxT6pPJbWiNZpj4p0189itQNEA7g2nfz47LBjZYv -lyyIXMIlZe4t6rkpO7QjTmlscyBHaWxsbWFubiA8Z2lsbG1hbm5AZ251bmV0Lm9y -Zz6JAjYEMAEKACAWIQSojIrdEpgo1+rALlLiL5u/7jSFiAUCXSx0xQIdIAAKCRDi -L5u/7jSFiJBcD/4ilWSQRaxbgWms9PXZ4HTvfrFEb2TTn86BYiYxEN3aT7xk1Tor -6bzEmLVkhraN2NKgaYgCFt1/Wzzo9N4o9Ojtq6ES3SFx0ZSpnlIU6YaLB++710gj -mP9KW8sBcGrNBYa0eisZuwqM68GApGDxbdzqo9K7O3alYdf6UsmTal7iWHCRCz4d -RShxFYWJbOk842rL8e1AWkF6nvWIq+7/eKLYyD5XAIXKw/ZB/hlcdgd8m0eO4pZ7 -s+fhuaVPFryVzAlAnLQRdMStUo8VeGbOqFCfS0ZB2cPt/D5d8xRvnaCeSae3xMLp -sytCjDFz53fSTx62ZiwqOZoncPmjZDzw26vOaX4Y3fVB6cQKYRGke7V7pagIeH5N -W60mruk2IVoA/lgOSZmNT7/iVojHpYQnbaIZZRx0a+VjfgtNjcVouo9Hkll14397 -vPRMLszDHmpvG6/WAcFkG8uJjRihqwVzY+gsAKP5r94IQpQ6rKVCJYxmko5xpYOD -g+FRnt21GQ3XzUnOjdD+9ayPULA8sm3/IYraP6k2hB3SCKhMpEjno8otabv9h0M3 -FlN8qxJbXKWmMS3Ttq1DxpK5JwJ5jaBE9WfeDtXM1cnCju+qzlYSXogje9dc508s -wSIO1PLzTYFCanCDUKqNaNX5OqvjtUWslKc/hUPdqtptolGvrXiGhnrc1bQpTmls -cyBHaWxsbWFubiA8Z2lsbG1hbm5AaW5mb3Ryb3BpcXVlLm9yZz6JAjYEMAEKACAW -IQSojIrdEpgo1+rALlLiL5u/7jSFiAUCXSx0xQIdIAAKCRDiL5u/7jSFiInyD/9m -/qoOIXFmAKlGjNVs2nYaP6vQCCAzcOm1WrwP6DYoeG1JWjNlFr0kKhJa/mzR0hFY -b2+49+Er06l7N0txPRcUhoD/8kKTIx8ljX27icd7BpD52XBqLfnX3Th3OHJA5CtZ -epQ4/bgUqXkHqUPsmVQHyjlq7liYIlZWwMBfA+L6eLF4MQhcnIoHkfVLyHvJ3B07 -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 -nlBNsWyazlZNA3vuAvc= -=bioM ------END PGP PUBLIC KEY BLOCK----- ------BEGIN PGP PUBLIC KEY BLOCK----- - -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 -=tbKl ------END PGP PUBLIC KEY BLOCK-----