aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xgnunet/gnunet.SlackBuild21
-rw-r--r--gnunet/gnunet.info8
-rw-r--r--google-go-lang/README58
-rw-r--r--google-go-lang/google-go-lang.SlackBuild225
-rw-r--r--google-go-lang/google-go-lang.info12
-rw-r--r--google-go-lang/slack-desc19
-rw-r--r--libeufin/README34
-rw-r--r--libeufin/doinst.sh33
-rwxr-xr-xlibeufin/libeufin.SlackBuild83
-rw-r--r--libeufin/libeufin.info8
-rw-r--r--libeufin/patch/fix-version-sourcing.patch21
-rw-r--r--libeufin/root/etc/httpd/sites-available/libeufin-bank.conf.new6
-rw-r--r--libeufin/root/etc/libeufin/libeufin-bank.conf.new34
-rw-r--r--libeufin/root/etc/libeufin/settings.json.new34
-rw-r--r--libeufin/root/etc/rc.d/rc.libeufin-bank.new54
-rw-r--r--libeufin/slack-desc6
-rw-r--r--postgresql/README14
-rw-r--r--postgresql/README.SBo51
-rw-r--r--postgresql/doinst.sh40
-rw-r--r--postgresql/postgresql.SlackBuild219
-rw-r--r--postgresql/postgresql.info10
-rw-r--r--postgresql/postgresql.logrotate9
-rw-r--r--postgresql/rc.postgresql.new171
-rw-r--r--postgresql/setup.postgresql35
-rw-r--r--postgresql/slack-desc19
-rw-r--r--pydata-sphinx-theme/README1
-rw-r--r--pydata-sphinx-theme/pydata-sphinx-theme.SlackBuild94
-rw-r--r--pydata-sphinx-theme/pydata-sphinx-theme.info10
-rw-r--r--pydata-sphinx-theme/slack-desc19
-rw-r--r--python3-HTMLArk/README1
-rw-r--r--python3-HTMLArk/python3-HTMLArk.SlackBuild93
-rw-r--r--python3-HTMLArk/python3-HTMLArk.info10
-rw-r--r--python3-HTMLArk/slack-desc15
-rw-r--r--python3-pep621/README1
-rw-r--r--python3-pep621/python3-pep621.SlackBuild94
-rw-r--r--python3-pep621/python3-pep621.info10
-rw-r--r--python3-pep621/slack-desc17
-rw-r--r--sphinx-book-theme/README1
-rw-r--r--sphinx-book-theme/slack-desc19
-rw-r--r--sphinx-book-theme/sphinx-book-theme.SlackBuild94
-rw-r--r--sphinx-book-theme/sphinx-book-theme.info10
-rw-r--r--sphinx-theme-builder/README7
-rw-r--r--sphinx-theme-builder/slack-desc19
-rw-r--r--sphinx-theme-builder/sphinx-theme-builder.SlackBuild93
-rw-r--r--sphinx-theme-builder/sphinx-theme-builder.info10
-rw-r--r--taler-exchange/README59
-rw-r--r--taler-exchange/doinst.sh146
-rwxr-xr-xtaler-exchange/download.sh29
-rw-r--r--taler-exchange/root/etc/httpd/sites-available/taler-exchange.conf.new4
-rwxr-xr-xtaler-exchange/root/etc/rc.d/rc.taler-exchange.new305
-rw-r--r--taler-exchange/root/etc/taler/conf.d/exchange-business.conf.new48
-rw-r--r--taler-exchange/root/etc/taler/conf.d/exchange-coins.conf.new34
-rw-r--r--taler-exchange/root/etc/taler/conf.d/exchange-system.conf.new10
-rw-r--r--taler-exchange/root/etc/taler/secrets/exchange-accountcredentials-1.secret.conf.new16
-rw-r--r--taler-exchange/root/etc/taler/secrets/exchange-db.secret.conf.new10
-rw-r--r--taler-exchange/slack-desc6
-rwxr-xr-xtaler-exchange/taler-exchange.SlackBuild49
-rw-r--r--taler-exchange/taler-exchange.info8
-rw-r--r--taler-merchant/README35
-rw-r--r--taler-merchant/doinst.sh41
-rwxr-xr-xtaler-merchant/download.sh29
-rw-r--r--taler-merchant/root/etc/httpd/sites-available/taler-merchant.conf.new22
-rwxr-xr-xtaler-merchant/root/etc/rc.d/rc.taler-merchant.new51
-rw-r--r--taler-merchant/root/etc/taler/conf.d/merchant.conf.new10
-rw-r--r--taler-merchant/root/etc/taler/secrets/merchant-db.secret.conf.new8
-rwxr-xr-xtaler-merchant/taler-merchant.SlackBuild45
-rw-r--r--taler-merchant/taler-merchant.info8
67 files changed, 2383 insertions, 432 deletions
diff --git a/gnunet/gnunet.SlackBuild b/gnunet/gnunet.SlackBuild
index 0a00c26..89b906d 100755
--- a/gnunet/gnunet.SlackBuild
+++ b/gnunet/gnunet.SlackBuild
@@ -23,7 +23,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=gnunet
-VERSION=${VERSION:-0.15.3}
+VERSION=${VERSION:-0.21.0}
BUILD=${BUILD:-1}
TAG=${TAG:-_slackcoder}
@@ -60,14 +60,15 @@ rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
+tar xvf $CWD/$PRGNAM-$VERSION*.tar.gz
cd $PRGNAM-$VERSION
-#chown -R root:root .
-#find -L . \
-# \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
-# -o -perm 511 \) -exec chmod 755 {} \; -o \
-# \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-# -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
./configure \
--prefix=/usr \
@@ -79,9 +80,7 @@ cd $PRGNAM-$VERSION
--disable-static \
--build=$ARCH-slackware-linux
make
-make DESTDIR="$PKG" install
-
-# make install does not exist for this project
+DESTDIR="$PKG" make install
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
diff --git a/gnunet/gnunet.info b/gnunet/gnunet.info
index 679a788..a22e14e 100644
--- a/gnunet/gnunet.info
+++ b/gnunet/gnunet.info
@@ -1,8 +1,8 @@
PRGNAM="gnunet"
-VERSION="0.15.3"
+VERSION="0.21.0"
HOMEPAGE="https://gnunet.org"
-DOWNLOAD="http://ftpmirror.gnu.org/gnunet/gnunet-0.15.3.tar.gz"
-MD5SUM="af4851ee8752bdc2bff3745355921aba"
-REQUIRES="jansson libmicrohttpd libsodium"
+DOWNLOAD="https://ftpmirror.gnu.org/gnu/gnunet/gnunet-0.21.0.tar.gz"
+MD5SUM="bea71cd62208138c69977db8fd96e8e1"
+REQUIRES="libmicrohttpd postgresql"
MAINTAINER="Slack Coder"
EMAIL="slackcoder@server.ky"
diff --git a/google-go-lang/README b/google-go-lang/README
deleted file mode 100644
index 0663187..0000000
--- a/google-go-lang/README
+++ /dev/null
@@ -1,58 +0,0 @@
-The Go programming language is an open source project to make
-programmers more productive. Go is expressive, concise, clean,
-and efficient. Its concurrency mechanisms make it easy to write
-programs that get the most out of multicore and networked machines,
-while its novel type system enables flexible and modular program
-construction. Go compiles quickly to machine code yet has the
-convenience of garbage collection and the power of run-time
-reflection. It's a fast, statically typed, compiled language that
-feels like a dynamically typed, interpreted language.
-
-The tools are added to the path by putting go.sh and go.csh files in
-/etc/profile.d and letting the system's /etc/profile or /etc/csh.login
-pick it up. If you want to add any of Go's environment variables you
-can add them there.
-
-Also, to easily setup a user-independent path for Go libraries to
-be installed to and used, is the GOPATH environment variable. This
-variable can be colon delimited. For example, once installing the
-built google-go-lang package, then set in your user's ~/.bashrc
-something like:
-
- export GOPATH="$HOME"
-
-Then, you'll be able to use the `go` command to install an additional
-library that will not need root permission and will be in the
-compiler's path. Like so:
-
- go get golang.org/x/tools/cmd/godoc
-
-Now in ~/src you'll have this source code checked-out, and a binary
-built at ~/bin/godoc
-
-Since the golang idiom is very `go get'able as a limited user,
-installed libraries from slackbuilds.org are located outside of GOROOT
-(which is only for golang standard library), in /usr/share/gocode By
-not setting a system-wide GOPATH defaulting to this location, then
-it is up to the user of whether to include this system path as well,
-like:
-
- export GOPATH="$HOME:/usr/share/gocode"
-
-This system source directory is primarly only for buildtime of
-slackbuilds.
-
-This is because `go get' iterates through the paths provided, looking
-for matching imports. If a match is not found, then is cloned to the
-first path provided. You would not want this to be a system path, as
-to need root privilege to clone source.
-
-As of go1.2, the 'go doc ...' command has been relocated to the
-go.tools library (golang-googlecode-gotools), which provide `godoc`.
-
-As of go1.5, shared libraries are now supported. The flags to use
-linking are available for `go get`, `go install` and `go build`.
-To learn more see `go help buildmode`.
-
-To elect to run the buildtime tests of this package, provide the
-environment variable RUN_TEST=true at build time.
diff --git a/google-go-lang/google-go-lang.SlackBuild b/google-go-lang/google-go-lang.SlackBuild
deleted file mode 100644
index cf84e52..0000000
--- a/google-go-lang/google-go-lang.SlackBuild
+++ /dev/null
@@ -1,225 +0,0 @@
-#!/bin/bash
-
-# Slackware build script for google-go-lang
-
-# Written by Eric Schultz eric at schultzter.ca
-# Taken over by Vincent Batts vbatts@hashbangbash.com
-
-# Copyright (c) 2012, 2013, 2014, 2015, 2016, 2017, 2018 Vincent Batts
-# Copyright (c) 2012 Eric Schultz
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy of
-# this software and associated documentation files (the "Software"), to deal in
-# the Software without restriction, including without limitation the rights to
-# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-# the Software, and to permit persons to whom the Software is furnished to do so,
-# subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in all
-# copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PRGNAM=google-go-lang
-VERSION=${VERSION:-1.21.3}
-BOOTSTRAP_VERSION=${BOOTSTRAP_VERSION:-1.19.11}
-BUILD=${BUILD:-1}
-TAG=${TAG:-_SBo}
-PKGTYPE=${PKGTYPE:-tgz}
-
-RELEASE=${RELEASE:-linux}
-
-RUN_TEST=${RUN_TEST:-false}
-
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) ARCH=i586 ;;
- arm*) ARCH=arm ;;
- *) ARCH=$( uname -m ) ;;
- esac
-fi
-
-if [ "$ARCH" = "i586" ]; then
- LIBDIRSUFFIX=""
- GOARCH="386"
-elif [ "$ARCH" = "x86_64" ]; then
- LIBDIRSUFFIX="64"
- GOARCH="amd64"
-elif [ "$ARCH" = "arm" ]; then
- LIBDIRSUFFIX=""
- GOARCH="arm"
- export GOARM="7" # can be '5' as well, to use soft float instead of hardware
-elif [ "$ARCH" = "aarch64" ]; then
- LIBDIRSUFFIX="64"
- GOARCH="arm64"
-else
- LIBDIRSUFFIX=""
- GOARCH=386
-fi
-
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
- exit 0
-fi
-
-TMP=${TMP:-/tmp/SBo}
-PKG=$TMP/package-$PRGNAM
-OUTPUT=${OUTPUT:-/tmp}
-
-set -e
-
-rm -rf $PKG
-mkdir -p $TMP $PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION} $OUTPUT
-cd $PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION}
-tar xvf $CWD/go${BOOTSTRAP_VERSION}.src.tar.gz
-cd go
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-
-# as of >= go1.5, the cross-compiler does not need to be bootstrap, so the
-# compiler need only be compiled for the host OS, which it detects
-unset GOBIN GOPATH GOOS GOARCH
-
-# Not sure why, but this causes run.bash to fail --rworkman
-unset BASH_ENV
-
-# gcc 5+ is go1.4 API, so we'll bootstrap with it
-export GOROOT_BOOTSTRAP="/usr"
-
-# Default GOROOT is the parent directory of all.bash,
-# which is the current directory we're in.
-# Defining it here means we can use it below when building
-# shared libraries
-GOROOT="$(pwd)"
-export GOROOT
-
-# The value of GOROOT once the package is installed
-export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION}/go"
-
-case "$ARCH" in
- arm|i?86) export GOMAXPROCS=1 ;;
-esac
-
-cd src
-
-if [[ "${RUN_TEST}" = "true" ]] ; then
- LC_ALL=C \
- ./all.bash
-else
- LC_ALL=C \
- ./make.bash
-fi
-
-# As of go1.5, golang supports shared libraries, so generate them for use.
-$GOROOT/bin/go install -buildmode=shared std
-
-cd ..
-
-# remove Go build cache
-rm -rf pkg/obj/go-build/*
-
-# remove the doc Makefile
-rm -f doc/Makefile
-
-mkdir -p $PKG$GOROOT_FINAL
-
-mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION} $OUTPUT
-cd $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION}
-tar xvf $CWD/go${VERSION}.src.tar.gz
-cd go
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-
-# as of >= go1.5, the cross-compiler does not need to be bootstrap, so the
-# compiler need only be compiled for the host OS, which it detects
-unset GOBIN GOPATH GOOS GOARCH
-
-# Not sure why, but this causes run.bash to fail --rworkman
-unset BASH_ENV
-
-# gcc 5+ is go1.4 API, so we'll bootstrap with it
-export GOROOT_BOOTSTRAP="$PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION}/go"
-
-# Default GOROOT is the parent directory of all.bash,
-# which is the current directory we're in.
-# Defining it here means we can use it below when building
-# shared libraries
-GOROOT="$(pwd)"
-export GOROOT
-
-# The value of GOROOT once the package is installed
-export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go"
-
-case "$ARCH" in
- arm|i?86) export GOMAXPROCS=1 ;;
-esac
-
-cd src
-
-if [[ "${RUN_TEST}" = "true" ]] ; then
- LC_ALL=C \
- ./all.bash
-else
- LC_ALL=C \
- ./make.bash
-fi
-
-# As of go1.5, golang supports shared libraries, so generate them for use.
-$GOROOT/bin/go install -buildmode=shared std
-
-cd ..
-
-# remove Go build cache
-rm -rf pkg/obj/go-build/*
-
-# remove the doc Makefile
-rm -f doc/Makefile
-
-mkdir -p $PKG$GOROOT_FINAL
-
-# remove bootstrap
-rm -rf $PKG/usr/lib$LIBDIRSUFFIX/go$BOOTSTRAP_VERSION
-
-# Put the profile scripts for setting PATH and env variables
-mkdir -p $PKG/etc/profile.d
-cat > $PKG/etc/profile.d/go.csh << EOF
-#!/bin/csh
-setenv GOROOT ${GOROOT_FINAL}
-setenv PATH \${GOROOT}/bin:\${PATH}
-EOF
-cat > $PKG/etc/profile.d/go.sh << EOF
-#!/bin/sh
-export GOROOT="${GOROOT_FINAL}"
-export PATH="\${GOROOT}/bin:\${PATH}"
-EOF
-
-chmod 0755 $PKG/etc/profile.d/go.csh
-chmod 0755 $PKG/etc/profile.d/go.sh
-
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a \
- CONTRIBUTING.md LICENSE PATENTS README.md SECURITY.md VERSION \
- $PKG/usr/doc/$PRGNAM-$VERSION
-cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/google-go-lang/google-go-lang.info b/google-go-lang/google-go-lang.info
deleted file mode 100644
index 442aa55..0000000
--- a/google-go-lang/google-go-lang.info
+++ /dev/null
@@ -1,12 +0,0 @@
-PRGNAM="google-go-lang"
-VERSION="1.21.3"
-HOMEPAGE="http://golang.org"
-DOWNLOAD="https://storage.googleapis.com/golang/go1.21.3.src.tar.gz \
- https://storage.googleapis.com/golang/go1.19.11.src.tar.gz"
-MD5SUM=""
-DOWNLOAD_x86_64=""
-MD5SUM_x86_64=""
-REQUIRES=""
-MAINTAINER="Slack Coder"
-EMAIL="slackcoder@server.ky"
-TAG="_slackcoder"
diff --git a/google-go-lang/slack-desc b/google-go-lang/slack-desc
deleted file mode 100644
index 84d7e1d..0000000
--- a/google-go-lang/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-google-go-lang: google-go-lang (Google's Go Language kit with gc tool chain)
-google-go-lang:
-google-go-lang: The Go programming language is an open source project to make
-google-go-lang: programmers more productive. Go is expressive, concise, clean, and
-google-go-lang: efficient. Its concurrency mechanisms make it easy to write programs
-google-go-lang: that get the most out of multicore and networked machines, while its
-google-go-lang: novel type system enables flexible and modular program construction.
-google-go-lang:
-google-go-lang:
-google-go-lang:
-google-go-lang:
diff --git a/libeufin/README b/libeufin/README
new file mode 100644
index 0000000..ecddebd
--- /dev/null
+++ b/libeufin/README
@@ -0,0 +1,34 @@
+The merchant for the Taler's pseudo bank.
+
+Installing this package automatically creates the libeufin user and group.
+
+The libeufin bank requires a postgres database to be configured. The setup
+described here assumes postgres was installed with using 'Peer authentication'
+by default (omitting '-A md5' when running 'initdb' after postgres
+installation).
+
+```
+# Create the database and its user.
+sudo -u postgres -- createuser libeufin-bank
+sudo -u postgres -- createdb libeufin-bank --owner libeufin-bank
+
+# Initialize the database, must be done after each upgrade
+sudo -u libeufin-bank -- libeufin-bank-dbinit -c /etc/libeufin/libeufin-bank.conf
+
+# The admin password should be set after installation.
+libeufin-bank passwd -c /etc/libeufin/libeufin-bank.conf admin $PASSWORD
+```
+
+
+To have the system start and stop with your host, add to /etc/rc.d/rc.local:
+
+ if [ -x /etc/rc.d/rc.libeufin-bank ]; then
+ /etc/rc.d/rc.libeufin-bank start
+ fi
+
+And to /etc/rc.d/rc.local_shutdown (creating if needed):
+
+ if [ -x /etc/rc.d/rc.libeufin-bank ]; then
+ /etc/rc.d/rc.libeufin-bank stop
+ fi
+
diff --git a/libeufin/doinst.sh b/libeufin/doinst.sh
new file mode 100644
index 0000000..f8325b3
--- /dev/null
+++ b/libeufin/doinst.sh
@@ -0,0 +1,33 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+# Group for all taler exchange users.
+if ! getent group libeufin-bank >/dev/null; then
+ groupadd libeufin-bank \
+ --system \
+ || true
+fi
+
+if ! getent passwd libeufin-bank >/dev/null; then
+ useradd libeufin-bank \
+ --comment 'Talers pseudo bank' \
+ --gid libeufin-bank \
+ --system \
+ --home-dir /var/lib/libeufin-bank \
+ || true
+fi
+
+config etc/httpd/sites-available/libeufin-bank.conf.new
+config etc/libeufin/libeufin-bank.conf.new
+config etc/libeufin/settings.json.new
+config etc/rc.d/rc.libeufin-bank.new
diff --git a/libeufin/libeufin.SlackBuild b/libeufin/libeufin.SlackBuild
new file mode 100755
index 0000000..88bdb82
--- /dev/null
+++ b/libeufin/libeufin.SlackBuild
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+PRGNAM=libeufin
+VERSION=${VERSION:-0.9.4a}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_slackcoder}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $PRGNAM-$VERSION*
+tar xvf $CWD/$PRGNAM-$VERSION*.tar.gz
+cd $PRGNAM-$VERSION*
+
+if [ -z "$JAVA_HOME" -a -f /etc/profile.d/zulu-openjdk17.sh ]; then
+ source /etc/profile.d/zulu-openjdk17.sh
+fi
+
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+patch <"$CWD/patch/fix-version-sourcing.patch"
+
+./configure \
+ --prefix=/usr
+make
+make DESTDIR="$PKG" install
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+cat $CWD/README > $PKG/usr/doc/$PRGNAM-$VERSION/README_slackware.txt
+cp -a \
+ COPYING \
+ README \
+ $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a \
+ bank/README \
+ $PKG/usr/doc/$PRGNAM-$VERSION/README_bank
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+(cd $CWD/root && find . -type f -not -path . -exec install -D -m 755 {} "$PKG/{}" \; )
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz}
diff --git a/libeufin/libeufin.info b/libeufin/libeufin.info
new file mode 100644
index 0000000..f3eb95d
--- /dev/null
+++ b/libeufin/libeufin.info
@@ -0,0 +1,8 @@
+PRGNAM="libeufin"
+VERSION="0.9.4a"
+HOMEPAGE="https://taler.net"
+DOWNLOAD="https://ftpmirror.gnu.org/gnu/taler/libeufin-0.9.4a-sources.tar.gz"
+MD5SUM="326b152030353c1cbd5a90c927118666"
+REQUIRES="zulu-openjdk17"
+MAINTAINER="Slack Coder"
+EMAIL="slackcoder@server.ky"
diff --git a/libeufin/patch/fix-version-sourcing.patch b/libeufin/patch/fix-version-sourcing.patch
new file mode 100644
index 0000000..83101eb
--- /dev/null
+++ b/libeufin/patch/fix-version-sourcing.patch
@@ -0,0 +1,21 @@
+diff --git a/build.gradle b/build.gradle
+index d47f38cd..dea2c30e 100644
+--- a/build.gradle
++++ b/build.gradle
+@@ -43,14 +43,8 @@ idea {
+ }
+
+ task versionFile() {
+- def stdout = new ByteArrayOutputStream()
+- exec {
+- commandLine 'git', 'rev-parse', '--short', 'HEAD'
+- standardOutput = stdout
+- }
+- def gitHash = stdout.toString().trim()
+- def version = getRootProject().version
+- new File("${projectDir}/common/src/main/resources", "version.txt").text = "v$version-git-$gitHash"
++ def version = "0.9.4a"
++ new File("${projectDir}/common/src/main/resources", "version.txt").text = "v$version"
+ }
+
+ // See: https://stackoverflow.com/questions/24936781/gradle-plugin-project-version-number
diff --git a/libeufin/root/etc/httpd/sites-available/libeufin-bank.conf.new b/libeufin/root/etc/httpd/sites-available/libeufin-bank.conf.new
new file mode 100644
index 0000000..02bab73
--- /dev/null
+++ b/libeufin/root/etc/httpd/sites-available/libeufin-bank.conf.new
@@ -0,0 +1,6 @@
+<Location "/libeufin-bank/">
+ ProxyPass "http://localhost:9099/"
+ # RequestHeader add "X-Forwarded-Proto" "https"
+ # RequestHeader add "X-Forwarded-Host" "localhost"
+ # RequestHeader add "X-Forwarded-Prefix" "/"
+</Location>
diff --git a/libeufin/root/etc/libeufin/libeufin-bank.conf.new b/libeufin/root/etc/libeufin/libeufin-bank.conf.new
new file mode 100644
index 0000000..9c2fb32
--- /dev/null
+++ b/libeufin/root/etc/libeufin/libeufin-bank.conf.new
@@ -0,0 +1,34 @@
+# This is the main configuration entrypoint for the libeufin-bank.
+
+[libeufin-bank]
+
+# Internal currency of the libeufin-bank
+CURRENCY = KUDOS
+
+# Default debt limit for newly created accounts
+# DEFAULT_DEBT_LIMIT = KUDOS:0
+
+# Value of the registration bonus for new users
+# REGISTRATION_BONUS = KUDOS:0
+
+# Allow account registration by anyone
+# ALLOW_REGISTRATION = no
+
+# Allow an account to delete itself
+# ALLOW_ACCOUNT_DELETION = no
+
+# Enable regional currency conversion
+# ALLOW_CONVERSION = no
+
+# Path to TAN challenge transmission script via sms. If not specified, this TAN channel wil be unuspported.
+TAN_SMS =
+
+# Path to TAN challenge transmission script via email. If not specified, this TAN channel wil be unuspported.
+TAN_EMAIL =
+
+# Where "libeufin-bank serve" serves its API
+SERVE = tcp
+PORT = 9099
+
+[libeufin-bankdb-postgres]
+CONFIG = postgres:///libeufin-bank
diff --git a/libeufin/root/etc/libeufin/settings.json.new b/libeufin/root/etc/libeufin/settings.json.new
new file mode 100644
index 0000000..73ca45d
--- /dev/null
+++ b/libeufin/root/etc/libeufin/settings.json.new
@@ -0,0 +1,34 @@
+// This file is an example of configuration of Bank SPA
+// Remove all the comments to make the file a valid
+// JSON file, otherwise no value here will make any
+// effect.
+// All the settings are optionals.
+{
+ // Where libeufin backend is localted
+ // default: window.origin without "webui/"
+ "backendBaseURL": "http://bank.taler.test:1180/",
+ // Shows a button "create random account" in the registration form
+ // Useful for testing
+ // default: false
+ "allowRandomAccountCreation": false,
+ // Create all random accounts with password "123"
+ // Useful for testing
+ // default: false
+ "simplePasswordForRandomAccounts": false,
+ // Bank name shown in the header
+ // default: "Taler Bank"
+ "bankName": "Taler TESTING Bank",
+ // URL where the user is going to be redirected after
+ // clicking in Taler Logo
+ // default: home page
+ "iconLinkURL": "#",
+ // Mapping for every link shown in the top navitation bar
+ // - key: link label, what the user will read
+ // - value: link target, where the user is going to be redirected
+ // default: empty list
+ "topNavSites": {
+ "Exchange": "http://Exchnage.taler.test:1180/",
+ "Bank": "http://bank-ui.taler.test:1180/",
+ "Merchant": "http://merchant.taler.test:1180/"
+ }
+}
diff --git a/libeufin/root/etc/rc.d/rc.libeufin-bank.new b/libeufin/root/etc/rc.d/rc.libeufin-bank.new
new file mode 100644
index 0000000..d3ba3e1
--- /dev/null
+++ b/libeufin/root/etc/rc.d/rc.libeufin-bank.new
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+# Startup/shutdown script for GNU Taler's libeufin bank.
+#
+
+export USERPROFILE=/var/lib/libeufin
+
+create_run_dir() {
+ if [ ! -d /run/libeufin-bank/ ]; then
+ mkdir -p /run/libeufin-bank
+ chown libeufin-bank:libeufin-bank /run/libeufin-bank
+ chmod g+wX /run/libeufin-bank
+ fi
+}
+
+start() {
+ echo "Starting Libeufin Bank"
+ create_run_dir
+
+ daemon \
+ --name=libeufin-bank \
+ --user=libeufin-bank \
+ --pidfiles=/run/libeufin-bank \
+ --output=/var/log/taler/libeufin-bank.log \
+ -- libeufin-bank serve --config /etc/libeufin/libeufin-bank.conf
+}
+
+stop() {
+ echo "Stopping Libeufin Bank"
+ /usr/bin/daemon --name=libeufin-bank --pidfiles=/run/libeufin-bank --stop
+}
+
+status() {
+ /usr/bin/daemon --name=libeufin-bank --pidfiles=/run/libeufin-bank --running --verbose
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop
+ ;;
+status)
+ status
+ ;;
+*)
+ echo "Usage: $0 {start|stop|status}"
+ exit 1
+esac
+
+
+
+
diff --git a/libeufin/slack-desc b/libeufin/slack-desc
new file mode 100644
index 0000000..70f03c5
--- /dev/null
+++ b/libeufin/slack-desc
@@ -0,0 +1,6 @@
+ |-----handy-ruler------------------------------------------------------|
+libeufin: libeufin
+libeufin:
+libeufin: LibEuFin is a project providing free software tooling for European
+libeufin: FinTech.
+libeufin:
diff --git a/postgresql/README b/postgresql/README
new file mode 100644
index 0000000..5e488da
--- /dev/null
+++ b/postgresql/README
@@ -0,0 +1,14 @@
+PostgreSQL is an advanced object-relational database management
+system (ORDBMS) based on POSTGRES. With more than 15 years of
+development history, it is quickly becoming the de facto
+database for enterprise level open source solutions.
+
+Before you can run postgresql you'll need to create the database;
+please see README.SBo.
+
+You need a "postgres" user and group prior to building postgresql.
+Something like this will suffice for most systems:
+ groupadd -g 209 postgres
+ useradd -u 209 -g 209 -d /var/lib/pgsql postgres
+Feel free to use a different uid and gid if desired, but 209 is
+recommended to avoid conflicts with other stuff from SlackBuilds.org.
diff --git a/postgresql/README.SBo b/postgresql/README.SBo
new file mode 100644
index 0000000..89e1424
--- /dev/null
+++ b/postgresql/README.SBo
@@ -0,0 +1,51 @@
+Before you can run postgresql you'll need to create the
+database files in /var/lib/pgsql. The following should do
+the trick.
+ # su postgres -c "initdb -D /var/lib/pgsql/14/data --locale=en_US.UTF-8 -A md5 -W"
+
+Additionally, a logrotation script and init script are included.
+For production level log file handling please read
+https://www.postgresql.org/docs/14/logfile-maintenance.html
+
+In order to start postgresql at boot and stop it properly at shutdown,
+make sure rc.postgresql is executable and add the following lines to
+the following files:
+
+ /etc/rc.d/rc.local
+ ==================
+ # Startup postgresql
+ if [ -x /etc/rc.d/rc.postgresql ]; then
+ /etc/rc.d/rc.postgresql start
+ fi
+
+ /etc/rc.d/rc.local_shutdown
+ ===========================
+ # Stop postgres
+ if [ -x /etc/rc.d/rc.postgresql ]; then
+ /etc/rc.d/rc.postgresql stop
+ fi
+
+Additionally, rc.postgresql script has additional modes for stop/restart:
+ force-stop|force-restart (i.e. pg_ctl 'fast' mode)
+ unclean-stop|unclean-restart (i.e. pg_ctl 'immediate' mode)
+See https://www.postgresql.org/docs/14/app-pg-ctl.html
+
+From PostgreSQL 9.3 we support in place database upgrades using pg_upgrade:
+ https://www.postgresql.org/docs/14/pgupgrade.html
+
+A few hints for PostgreSQL 10.x -> 14.x upgrade:
+ - Don't remove old PostgreSQL 10.x package
+ - Install PostgreSQL 14.x, note that binaries are in
+ '/usr/lib64/postgresql/14/bin'
+ - Follow regular pg_upgrade docs
+ - Remove old package when transition is over, or read comments in
+ rc.postgresql if you want to run multiple PostgreSQL versions in parallel
+
+This script builds postgresql with some useful extension modules from
+the contrib directory, see PG_EXTENSIONS in SlackBuild file.
+To build PostgreSQL with all extensions, use the following command:
+
+ # PG_EXTENSIONS=ALL ./postgresql.SlackBuild
+
+Please note that in order to actually use extension, you must execute
+'CREATE EXTENSION [ IF NOT EXISTS ] extension_name' for each extension.
diff --git a/postgresql/doinst.sh b/postgresql/doinst.sh
new file mode 100644
index 0000000..7b63ec5
--- /dev/null
+++ b/postgresql/doinst.sh
@@ -0,0 +1,40 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+preserve_perms() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ if [ -e $OLD ]; then
+ cp -a $OLD ${NEW}.incoming
+ cat $NEW > ${NEW}.incoming
+ mv ${NEW}.incoming $NEW
+ fi
+ config $NEW
+}
+
+preserve_perms etc/rc.d/rc.postgresql.new
+config etc/logrotate.d/postgresql.new
+
+# Create default program symlinks in /usr/bin
+(
+ cd usr/bin
+ for pg_binary in ../lib@LIBDIRSUFFIX@/@PRGNAM@/@PG_VERSION@/bin/*; do
+ pg_prog=$(basename $pg_binary)
+ if [ -L $pg_prog ]; then
+ ln -sf $pg_binary
+ elif [ ! -e $pg_prog ]; then
+ # make sure we don't overwrite actual binaries
+ ln -s $pg_binary
+ fi
+ done
+)
+
diff --git a/postgresql/postgresql.SlackBuild b/postgresql/postgresql.SlackBuild
new file mode 100644
index 0000000..64b8345
--- /dev/null
+++ b/postgresql/postgresql.SlackBuild
@@ -0,0 +1,219 @@
+#!/bin/bash
+
+# Slackware build script for PostgreSQL
+#
+# Copyright 2007-2018 Adis Nezirovic <adis_at_linux.org.ba>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Modified by the SlackBuilds.org Project
+
+# 20220301 bkw: Modified by SlackBuilds.org, BUILD=2:
+# - strip pg_config binary (install-strip misses that one).
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=postgresql
+VERSION=${VERSION:-15.5}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_SBo}
+PKGTYPE=${PKGTYPE:-tgz}
+
+PG_VERSION=${PG_VERSION:-15}
+PG_PORT=${PG_PORT:-5432}
+PG_UID=${PG_UID:-209}
+PG_GID=${PG_GID:-209}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+# Bail out if user or group isn't valid on your system
+# For slackbuilds.org, assigned postgres uid/gid are 209/209
+# See http://slackbuilds.org/uid_gid.txt
+# Other popular choice is 26/26
+if ! grep ^postgres: /etc/group > /dev/null 2>&1 ; then
+ echo " You must have a postgres group to run this script."
+ echo " # groupadd -g $PG_GID postgres"
+ exit 1
+elif ! grep ^postgres: /etc/passwd > /dev/null 2>&1 ; then
+ echo " You must have a postgres user to run this script."
+ echo " # useradd -u $PG_UID -g $PG_GID -d /var/lib/pgsql postgres"
+ exit 1
+fi
+
+# Enable NLS builds using 'ENABLE_NLS=1 ./postgresql.SlackBuild'
+if [ ! -z $ENABLE_NLS ];then
+ NLS=enable
+else
+ NLS=disable
+fi
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $TMP/$PRGNAM-$VERSION $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
+cd $PRGNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+CFLAGS="$SLKCFLAGS" \
+PYTHON="/usr/bin/python3" \
+./configure \
+ --prefix=/usr/lib${LIBDIRSUFFIX}/$PRGNAM/$PG_VERSION \
+ --sysconfdir=/etc/$PRGNAM/$PG_VERSION \
+ --includedir=/usr/include \
+ --datarootdir=/usr/share \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/$PRGNAM-$VERSION \
+ --datadir=/usr/share/$PRGNAM-$PG_VERSION \
+ --with-openssl \
+ --with-tcl \
+ --with-perl \
+ --with-python \
+ --with-libxml \
+ --with-libxslt \
+ --enable-thread-safety \
+ --with-system-tzdata=/usr/share/zoneinfo \
+ --$NLS-nls \
+ --build=$ARCH-slackware-linux
+
+make
+make install-strip DESTDIR=$PKG
+make install-docs DESTDIR=$PKG
+
+# 20220414 bkw: this one binary wasn't getting stripped...
+strip $PKG/usr/lib${LIBDIRSUFFIX}/$PRGNAM/$PG_VERSION/bin/pg_config
+
+# create symlinks to shared library for other programs to link against
+( cd $PKG/usr/lib${LIBDIRSUFFIX}
+ for i in $(ls $PRGNAM/$PG_VERSION/lib/lib*.so*) ; do ln -sf $i ; done
+)
+
+# create symlinks to pkg-config scripts
+( mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig
+ cd $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig
+ for i in $(ls ../$PRGNAM/$PG_VERSION/lib/pkgconfig/*) ; do ln -sf $i ; done
+)
+
+# Some interesting additional modules:
+# https://www.postgresql.org/docs/14/contrib.html
+#
+# adminpack - helper extension for pgAdmin
+# pgcrypto - extension for some business applications
+# ltree, xml2 - useful extensions for developers
+# postgres_fdw - foreign-data wrapper for access to external PostgreSQL servers
+# file_fdw - foreign-data wrapper for access to data files on filesystem
+
+PG_EXTENSIONS=${PG_EXTENSIONS:-"adminpack pgcrypto ltree xml2 postgres_fdw file_fdw hstore citext"}
+
+if [ "$PG_EXTENSIONS" = "ALL" ];then
+ cd $TMP/$PRGNAM-$VERSION/contrib
+ make all
+ make install-strip DESTDIR=$PKG
+else
+ for ext in $PG_EXTENSIONS; do
+ cd $TMP/$PRGNAM-$VERSION/contrib/$ext
+ make
+ make install-strip DESTDIR=$PKG
+ done
+fi
+
+cd $TMP/$PRGNAM-$VERSION
+
+find $PKG/usr/man -type f -exec gzip -9 {} \;
+for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
+
+cp -a COPYRIGHT HISTORY README doc/KNOWN_BUGS doc/MISSING_FEATURES doc/TODO $PKG/usr/doc/$PRGNAM-$VERSION/
+rm -rf $PKG/usr/doc/$PRGNAM-$VERSION/{man.tar.gz,man1,manl,man7,postgres.tar.gz}
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+cat $CWD/README.SBo > $PKG/usr/doc/$PRGNAM-$VERSION/README.SBo
+
+# base database directory
+# assumes you are using /var/lib/pgsql as a homedir for postgres user
+mkdir -p $PKG/var/lib/pgsql/$PG_VERSION/data
+chown -R postgres:postgres $PKG/var/lib/pgsql
+chmod 700 $PKG/var/lib/pgsql
+# permissions for DATADIR should be u=rwx (0700)
+chmod 700 $PKG/var/lib/pgsql/$PG_VERSION/data
+
+# Install init script
+mkdir -p $PKG/etc/rc.d
+sed -e "s%@PG_VERSION@%$PG_VERSION%" \
+ -e "s%@PRGNAM@%$PRGNAM%" \
+ -e "s%@PG_PORT@%$PG_PORT%" \
+ -e "s%@LIBDIRSUFFIX@%$LIBDIRSUFFIX%" \
+ $CWD/rc.$PRGNAM.new > $PKG/etc/rc.d/rc.$PRGNAM.new
+chmod 0755 $PKG/etc/rc.d/rc.$PRGNAM.new
+
+# Install logrotate script
+mkdir -p $PKG/etc/logrotate.d
+sed -e "s%@PG_VERSION@%$PG_VERSION%" \
+ -e "s%@PRGNAM@%$PRGNAM%" \
+ $CWD/$PRGNAM.logrotate > $PKG/etc/logrotate.d/$PRGNAM.new
+
+mkdir -p $PKG/var/log/setup
+sed -e "s%@UID@%$PG_UID%" \
+ -e "s%@GID@%$PG_GID%" \
+ -e "s%@PG_VERSION@%$PG_VERSION%" \
+ $CWD/setup.$PRGNAM > $PKG/var/log/setup/setup.$PRGNAM
+chmod 755 $PKG/var/log/setup/setup.$PRGNAM
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+sed -e "s%@PG_VERSION@%$PG_VERSION%" \
+ -e "s%@PRGNAM@%$PRGNAM%" \
+ -e "s%@LIBDIRSUFFIX@%$LIBDIRSUFFIX%" \
+ $CWD/doinst.sh > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/postgresql/postgresql.info b/postgresql/postgresql.info
new file mode 100644
index 0000000..c024397
--- /dev/null
+++ b/postgresql/postgresql.info
@@ -0,0 +1,10 @@
+PRGNAM="postgresql"
+VERSION="15.5"
+HOMEPAGE="https://www.postgresql.org"
+DOWNLOAD="https://ftp.postgresql.org/pub/source/v15.5/postgresql-15.5.tar.gz"
+MD5SUM="96175683748e68c7bb36ba0306adc8d7"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES=""
+MAINTAINER="Dionysis Ntreou"
+EMAIL="yakizarns1@gmail.com"
diff --git a/postgresql/postgresql.logrotate b/postgresql/postgresql.logrotate
new file mode 100644
index 0000000..489effe
--- /dev/null
+++ b/postgresql/postgresql.logrotate
@@ -0,0 +1,9 @@
+/var/log/@PRGNAM@-@PG_VERSION@ {
+ daily
+ rotate 7
+ copytruncate
+ delaycompress
+ compress
+ notifempty
+ missingok
+}
diff --git a/postgresql/rc.postgresql.new b/postgresql/rc.postgresql.new
new file mode 100644
index 0000000..77988c1
--- /dev/null
+++ b/postgresql/rc.postgresql.new
@@ -0,0 +1,171 @@
+#!/bin/bash
+
+# PostgreSQL startup script for Slackware Linux
+#
+# $Revision$
+# $Date$
+#
+# Copyright 2007-2018 Adis Nezirovic <adis_at_linux.org.ba>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Do not source this script (since it contains exit() calls)
+#
+# Since version 9.3 this startup script can run multiple PostgreSQL
+# versions on different ports and with different data dirs.
+#
+# e.g. PG_VERSION=14 PG_PORT=6432 /etc/rc.d/rc.@PRGNAM@ start
+
+PG_VERSION=${PG_VERSION:-@PG_VERSION@}
+PG_PORT=${PG_PORT:-@PG_PORT@}
+LIBDIRSUFFIX="@LIBDIRSUFFIX@"
+LOGFILE=/var/log/@PRGNAM@-$PG_VERSION
+DATADIR=/var/lib/pgsql/$PG_VERSION/data
+POSTGRES=/usr/lib${LIBDIRSUFFIX}/@PRGNAM@/$PG_VERSION/bin/postgres
+PG_CTL=/usr/lib${LIBDIRSUFFIX}/@PRGNAM@/$PG_VERSION/bin/pg_ctl
+PIDFILE=$DATADIR/postmaster.pid
+
+# oom-killer score
+#
+# https://www.postgresql.org/docs/14/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT
+PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
+PG_MASTER_OOM_SCORE_ADJ=-1000
+PG_CHILD_OOM_SCORE_ADJ=0
+PG_ENV="PG_OOM_ADJUST_FILE=$PG_OOM_ADJUST_FILE PG_OOM_ADJUST_VALUE=$PG_CHILD_OOM_SCORE_ADJ"
+
+# Return values (according to LSB):
+# 0 - success
+# 1 - generic or unspecified error
+# 2 - invalid or excess argument(s)
+# 3 - unimplemented feature (e.g. "reload")
+# 4 - insufficient privilege
+# 5 - program is not installed
+# 6 - program is not configured
+# 7 - program is not running
+
+pg_ctl()
+{
+ CMD="$PG_CTL -o '-p $PG_PORT' $@"
+ su - postgres -c "$PG_ENV $CMD"
+}
+
+if [ ! -f $POSTGRES ]; then
+ echo "Could not find 'postgres' binary. Maybe PostgreSQL is not installed properly?"
+ exit 5
+fi
+
+case "$1" in
+
+ "start")
+ echo "Starting PostgreSQL"
+ touch $LOGFILE
+ chown postgres:wheel $LOGFILE
+ chmod 0640 $LOGFILE
+
+ if [ ! -e $DATADIR/PG_VERSION ]; then
+ echo "You should initialize the PostgreSQL database at location $DATADIR"
+ echo "e.g. su postgres -c \"initdb -D $DATADIR --locale=en_US.UTF-8 -A md5 -W\""
+ exit 6
+ fi
+
+ if [ $(pgrep -f $POSTGRES) ]; then
+
+ echo "PostgreSQL daemon already running"
+ if [ ! -f $PIDFILE ]; then
+ echo "Warning: Missing pid file $PIDFILE"
+ fi
+ exit 1
+
+ else
+ test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE"
+ pg_ctl start -w -l $LOGFILE -D $DATADIR
+ exit 0
+ fi
+ ;;
+
+ "stop")
+ echo "Shutting down PostgreSQL..."
+ pg_ctl stop -l $LOGFILE -D $DATADIR -m smart
+ ;;
+
+ "force-stop")
+ # Take care! This will kill _all_ client connections
+ # and rollback current transactions.
+ echo "Shutting down PostgreSQL (fast)..."
+ pg_ctl stop -l $LOGFILE -D $DATADIR -m fast
+ ;;
+
+ "unclean-stop")
+ # Take care! This will abort server process itself
+ # resulting with database recovery on next start.
+ echo "Shutting down PostgreSQL (immediate)..."
+ pg_ctl stop -l $LOGFILE -D $DATADIR -m immediate
+ ;;
+
+ "restart")
+ echo "Restarting PostgreSQL..."
+ test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE"
+ pg_ctl restart -l $LOGFILE -D $DATADIR -m smart
+ ;;
+
+ "force-restart")
+ # Take care! This will kill _all_ client connections
+ # and rollback current transactions.
+ echo "Restarting PostgreSQL (fast)..."
+ pg_ctl restart -l $LOGFILE -D $DATADIR -m fast
+ ;;
+
+ "unclean-restart")
+ # Take care: This will abort server process itself
+ # resulting with database recovery on start.
+ echo "Restarting PostgreSQL (immediate)..."
+ pg_ctl restart -l $LOGFILE -D $DATADIR -m immediate
+ ;;
+
+ "reload")
+ echo "Reloading configuration for PostgreSQL..."
+ pg_ctl reload -l $LOGFILE -D $DATADIR -m smart
+ ;;
+
+ "status")
+ if [ $(pgrep -f $POSTGRES) ]; then
+ echo "PostgreSQL is running"
+
+ if [ ! -e $PIDFILE ]; then
+ echo "Warning: Missing pid file $PIDFILE"
+ fi
+
+ exit 0
+ else
+ echo "PostgreSQL is stopped"
+
+ if [ -e $PIDFILE ]; then
+ echo "Detected stale pid file $PIDFILE"
+ fi
+
+ exit 0
+ fi
+ ;;
+
+ *)
+ # unclean-stop and unclean-restart are not documented on purpose.
+ echo "Usage: $0 {start|stop|force-stop|status|restart|force-restart|reload}"
+ exit 1
+ ;;
+esac
diff --git a/postgresql/setup.postgresql b/postgresql/setup.postgresql
new file mode 100644
index 0000000..2f0ec5f
--- /dev/null
+++ b/postgresql/setup.postgresql
@@ -0,0 +1,35 @@
+#!/bin/bash
+#BLURB="PostgreSQL @PG_VERSION@"
+
+PG_HOME=/var/lib/pgsql
+PG_USER=postgres
+PG_USER_ID=@UID@
+PG_GROUP=postgres
+PG_GROUP_ID=@GID@
+PG_VERSION=@PG_VERSION@
+
+echo "Adding PostgreSQL user and group..."
+groupadd -g $PG_GROUP_ID $PG_GROUP
+useradd -g $PG_GROUP -u $PG_USER_ID -d $PG_HOME -c PostgreSQL $PG_USER
+mkdir -p $PG_HOME/$PG_VERSION/data
+
+## default permissions
+echo "Setting up permissions..."
+chown -R $PG_USER:$PG_GROUP $PG_HOME
+chmod 700 $PG_HOME
+chmod 700 $PG_HOME/$PG_VERSION
+chmod 700 $PG_HOME/$PG_VERSION/data
+
+## database cluster
+if [ ! -f $PG_HOME/$PG_VERSION/data/PG_VERSION ]; then
+ echo "Creating database cluster in $PG_HOME/$PG_VERSION/data..."
+ su $PG_USER -c "initdb -D $PG_HOME/$PG_VERSION/data --locale=en_US.UTF-8 -A md5 -W"
+else
+ echo "*** WARNING ***" >&2
+ echo " There is already a database cluster in $PG_HOME/$PG_VERSION/data." >&2
+ echo " If you are upgrading from an older version of PostgreSQL" >&2
+ echo " you will have to 'dump' and 'restore' your database." >&2
+ echo " See PostgreSQL manual for more details." >&2
+fi
+
+echo "PostgreSQL post-installation setup completed"
diff --git a/postgresql/slack-desc b/postgresql/slack-desc
new file mode 100644
index 0000000..7e7ced4
--- /dev/null
+++ b/postgresql/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+postgresql: postgresql (object-relational database management system)
+postgresql:
+postgresql: PostgreSQL is an advanced object-relational database management
+postgresql: system (ORDBMS) based on POSTGRES. With more than 15 years of
+postgresql: development history, it is quickly becoming the de facto
+postgresql: database for enterprise level open source solutions.
+postgresql:
+postgresql: Homepage: https://www.postgresql.org
+postgresql:
+postgresql:
+postgresql:
diff --git a/pydata-sphinx-theme/README b/pydata-sphinx-theme/README
new file mode 100644
index 0000000..10e9d05
--- /dev/null
+++ b/pydata-sphinx-theme/README
@@ -0,0 +1 @@
+The pydata sphinx theme.
diff --git a/pydata-sphinx-theme/pydata-sphinx-theme.SlackBuild b/pydata-sphinx-theme/pydata-sphinx-theme.SlackBuild
new file mode 100644
index 0000000..e73f292
--- /dev/null
+++ b/pydata-sphinx-theme/pydata-sphinx-theme.SlackBuild
@@ -0,0 +1,94 @@
+#!/bin/bash
+
+# SlackBuild build script for pydata_sphinx_theme.
+
+# Copyright (c) 2024 Slack Coder <slackcoder@server.ky>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=pydata-sphinx-theme
+SRCNAM=pydata_sphinx_theme
+VERSION=${VERSION:-0.14.4}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_slackcoder}
+PKGTYPE=${PKGTYPE:-txz}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $SRCNAM-$VERSION
+tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
+cd $SRCNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+python3 -m build --wheel
+python3 -m installer --destdir "$PKG" dist/*.whl
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a LICENSE README.md $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/pydata-sphinx-theme/pydata-sphinx-theme.info b/pydata-sphinx-theme/pydata-sphinx-theme.info
new file mode 100644
index 0000000..837ac52
--- /dev/null
+++ b/pydata-sphinx-theme/pydata-sphinx-theme.info
@@ -0,0 +1,10 @@
+PRGNAM="pydata-sphinx-theme"
+VERSION="0.14.4"
+HOMEPAGE="https://pypi.org/project/sphinx-sphinx-theme"
+DOWNLOAD="https://files.pythonhosted.org/packages/de/47/1bc31c4bc8b395cd37d8ceaf720abe10cf64c857fb9ce55856a6dd958484/pydata_sphinx_theme-0.14.4.tar.gz"
+MD5SUM="8d2070f7a82bc55f16bea7ebfc2457d0"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="Sphinx sphinx-theme-builder python3-rich nodeenv BeautifulSoup4"
+MAINTAINER="Slack Coder"
+EMAIL="slackcoder@server.ky"
diff --git a/pydata-sphinx-theme/slack-desc b/pydata-sphinx-theme/slack-desc
new file mode 100644
index 0000000..cb6f869
--- /dev/null
+++ b/pydata-sphinx-theme/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+pydata-sphinx-theme: pydata-sphinx-theme
+pydata-sphinx-theme:
+pydata-sphinx-theme: The pydata-sphinx-theme is a sphinx theme.
+pydata-sphinx-theme:
+pydata-sphinx-theme:
+pydata-sphinx-theme:
+pydata-sphinx-theme: Homepage: https://pypi.org/project/pydata-sphinx-theme
+pydata-sphinx-theme:
+pydata-sphinx-theme:
+pydata-sphinx-theme:
+pydata-sphinx-theme:
diff --git a/python3-HTMLArk/README b/python3-HTMLArk/README
new file mode 100644
index 0000000..554c4e0
--- /dev/null
+++ b/python3-HTMLArk/README
@@ -0,0 +1 @@
+Pack a webpage including support files into a single HTML file.
diff --git a/python3-HTMLArk/python3-HTMLArk.SlackBuild b/python3-HTMLArk/python3-HTMLArk.SlackBuild
new file mode 100644
index 0000000..16a2ff1
--- /dev/null
+++ b/python3-HTMLArk/python3-HTMLArk.SlackBuild
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+# SlackBuild build script for python3-pep621.
+
+# Copyright (c) 2024 Slack Coder <slackcoder@server.ky>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=python3-HTMLArk
+SRCNAM=HTMLArk
+VERSION=${VERSION:-1.0.0}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_slackcoder}
+PKGTYPE=${PKGTYPE:-txz}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $SRCNAM-$VERSION
+tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
+cd $SRCNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+python3 -m build --wheel --no-isolation
+python3 -m installer --destdir "$PKG" dist/*.whl
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/python3-HTMLArk/python3-HTMLArk.info b/python3-HTMLArk/python3-HTMLArk.info
new file mode 100644
index 0000000..24a6749
--- /dev/null
+++ b/python3-HTMLArk/python3-HTMLArk.info
@@ -0,0 +1,10 @@
+PRGNAM="python3-HTMLArk"
+VERSION="1.0.0"
+HOMEPAGE="https://pypi.org/project/HTMLArk"
+DOWNLOAD="https://files.pythonhosted.org/packages/d7/0a/c5150fb593abf13dd58ae3e3b46da56266d3f8aff8c0fc512f2001fa35a3/HTMLArk-1.0.0.tar.gz"
+MD5SUM="bcbdd16ae936cf03de478de6bf49bd7f"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="nodeenv"
+MAINTAINER="Slack Coder"
+EMAIL="slackcoder@server.ky"
diff --git a/python3-HTMLArk/slack-desc b/python3-HTMLArk/slack-desc
new file mode 100644
index 0000000..c353c50
--- /dev/null
+++ b/python3-HTMLArk/slack-desc
@@ -0,0 +1,15 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+python3-HTMLArk: python3-HTMLArk
+python3-HTMLArk:
+python3-HTMLArk: Pack a webpage including support files into a single HTML file.
+python3-HTMLArk:
+python3-HTMLArk: Homepage: https://pypi.org/project/HTMLArk
+python3-HTMLArk:
+python3-HTMLArk:
diff --git a/python3-pep621/README b/python3-pep621/README
new file mode 100644
index 0000000..47606e5
--- /dev/null
+++ b/python3-pep621/README
@@ -0,0 +1 @@
+Python3 dataclass for PEP 621 metadata with support for core metadata generation
diff --git a/python3-pep621/python3-pep621.SlackBuild b/python3-pep621/python3-pep621.SlackBuild
new file mode 100644
index 0000000..073e1f6
--- /dev/null
+++ b/python3-pep621/python3-pep621.SlackBuild
@@ -0,0 +1,94 @@
+#!/bin/bash
+
+# SlackBuild build script for python3-pep621.
+
+# Copyright (c) 2024 Slack Coder <slackcoder@server.ky>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=python3-pep621
+SRCNAM=pep621
+VERSION=${VERSION:-0.4.0.post2}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_slackcoder}
+PKGTYPE=${PKGTYPE:-txz}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $SRCNAM-$VERSION
+tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
+cd $SRCNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+python3 -m build --wheel --no-isolation
+python3 -m installer --destdir "$PKG" dist/*.whl
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a LICENSE README.md $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/python3-pep621/python3-pep621.info b/python3-pep621/python3-pep621.info
new file mode 100644
index 0000000..0651f3d
--- /dev/null
+++ b/python3-pep621/python3-pep621.info
@@ -0,0 +1,10 @@
+PRGNAM="python3-pep621"
+VERSION="0.4.0.post2"
+HOMEPAGE="https://pypi.org/project/python3-pep621"
+DOWNLOAD="https://files.pythonhosted.org/packages/92/2d/4718504232643fb69291485f509e0e72b8135de19fceaf4d03c8c16f268c/pep621-0.4.0.post2.tar.gz"
+MD5SUM="11a9f2ceebbf49f185c2693d194e61bd"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="nodeenv"
+MAINTAINER="Slack Coder"
+EMAIL="slackcoder@server.ky"
diff --git a/python3-pep621/slack-desc b/python3-pep621/slack-desc
new file mode 100644
index 0000000..d933972
--- /dev/null
+++ b/python3-pep621/slack-desc
@@ -0,0 +1,17 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+python3-pep621: python3-pep621
+python3-pep621:
+python3-pep621: Python3 dataclass for PEP 621 metadata with support for core metadata
+python3-pep621: generation.
+python3-pep621:
+python3-pep621: Homepage: https://pypi.org/project/pep621
+python3-pep621:
+python3-pep621:
+python3-pep621:
diff --git a/sphinx-book-theme/README b/sphinx-book-theme/README
new file mode 100644
index 0000000..8110968
--- /dev/null
+++ b/sphinx-book-theme/README
@@ -0,0 +1 @@
+The sphinx book theme.
diff --git a/sphinx-book-theme/slack-desc b/sphinx-book-theme/slack-desc
new file mode 100644
index 0000000..f879d97
--- /dev/null
+++ b/sphinx-book-theme/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+sphinx-book-theme: sphinx-book-theme (decorator for caching properties in classes)
+sphinx-book-theme:
+sphinx-book-theme: The sphinx-book-theme is a sphinx theme.
+sphinx-book-theme:
+sphinx-book-theme:
+sphinx-book-theme:
+sphinx-book-theme: Homepage: https://pypi.org/project/sphinx-book-theme
+sphinx-book-theme:
+sphinx-book-theme:
+sphinx-book-theme:
+sphinx-book-theme:
diff --git a/sphinx-book-theme/sphinx-book-theme.SlackBuild b/sphinx-book-theme/sphinx-book-theme.SlackBuild
new file mode 100644
index 0000000..537711e
--- /dev/null
+++ b/sphinx-book-theme/sphinx-book-theme.SlackBuild
@@ -0,0 +1,94 @@
+#!/bin/bash
+
+# SlackBuild build script for sphinx_book_theme
+
+# Copyright (c) 2024 Slack Coder <slackcoder@server.ky>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=sphinx-book-theme
+SRCNAM=sphinx_book_theme
+VERSION=${VERSION:-1.1.0}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_slackcoder}
+PKGTYPE=${PKGTYPE:-txz}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $SRCNAM-$VERSION
+tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
+cd $SRCNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+python3 -m build --wheel
+python3 -m installer --destdir "$PKG" dist/*.whl
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a LICENSE README.md $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/sphinx-book-theme/sphinx-book-theme.info b/sphinx-book-theme/sphinx-book-theme.info
new file mode 100644
index 0000000..4bd5ef3
--- /dev/null
+++ b/sphinx-book-theme/sphinx-book-theme.info
@@ -0,0 +1,10 @@
+PRGNAM="sphinx-book-theme"
+VERSION="1.1.0"
+HOMEPAGE="https://pypi.org/project/sphinx-book-theme"
+DOWNLOAD="https://files.pythonhosted.org/packages/7a/4a/01316bd8a29ad546fd78f460fd958b5a08b3336a6625d96de9b5d149a0e7/sphinx_book_theme-1.1.0.tar.gz"
+MD5SUM="b9e67d52ba5227811996c83e2ec84065"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="Sphinx python3-pep621 pydata-sphinx-theme sphinx-theme-builder python3-rich nodeenv"
+MAINTAINER="Slack Coder"
+EMAIL="slackcoder@server.ky"
diff --git a/sphinx-theme-builder/README b/sphinx-theme-builder/README
new file mode 100644
index 0000000..4975c2b
--- /dev/null
+++ b/sphinx-theme-builder/README
@@ -0,0 +1,7 @@
+The sphinx_rtd_theme is a sphinx theme designed to look modern and be
+mobile-friendly.
+
+This theme is primarily focused to be used on readthedocs.org but can
+work with your own sphinx projects.
+
+To read more and see a working demo head over to readthedocs.org.
diff --git a/sphinx-theme-builder/slack-desc b/sphinx-theme-builder/slack-desc
new file mode 100644
index 0000000..be0b12f
--- /dev/null
+++ b/sphinx-theme-builder/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+sphinx-theme-builder: sphinx-theme-builder
+sphinx-theme-builder:
+sphinx-theme-builder: Streamline the Sphinx theme development workflow, by building upon
+sphinx-theme-builder: existing standardised tools.
+sphinx-theme-builder:
+sphinx-theme-builder:
+sphinx-theme-builder: Homepage: https://pypi.org/project/sphinx-theme-builder
+sphinx-theme-builder:
+sphinx-theme-builder:
+sphinx-theme-builder:
+sphinx-theme-builder:
diff --git a/sphinx-theme-builder/sphinx-theme-builder.SlackBuild b/sphinx-theme-builder/sphinx-theme-builder.SlackBuild
new file mode 100644
index 0000000..3a2610f
--- /dev/null
+++ b/sphinx-theme-builder/sphinx-theme-builder.SlackBuild
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+# SlackBuild build script for sphinx_theme_builder
+
+# Copyright (c) 2024 Slack Coder <slackcoder@server.ky>
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PRGNAM=sphinx-theme-builder
+VERSION=${VERSION:-0.2.0a7}
+BUILD=${BUILD:-1}
+TAG=${TAG:-_slackcoder}
+PKGTYPE=${PKGTYPE:-tgz}
+
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) ARCH=i586 ;;
+ arm*) ARCH=arm ;;
+ *) ARCH=$( uname -m ) ;;
+ esac
+fi
+
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
+TMP=${TMP:-/tmp/SBo}
+PKG=$TMP/package-$PRGNAM
+OUTPUT=${OUTPUT:-/tmp}
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "i686" ]; then
+ SLKCFLAGS="-O2 -march=i686 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+set -e
+
+rm -rf $PKG
+mkdir -p $TMP $PKG $OUTPUT
+cd $TMP
+rm -rf $PRGNAM-$VERSION
+tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
+cd $PRGNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+python3 -m build --wheel --no-isolation
+python3 -m installer --destdir "$PKG" dist/*.whl
+
+find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+
+mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
+cp -a README.md $PKG/usr/doc/$PRGNAM-$VERSION
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE
diff --git a/sphinx-theme-builder/sphinx-theme-builder.info b/sphinx-theme-builder/sphinx-theme-builder.info
new file mode 100644
index 0000000..e8ec123
--- /dev/null
+++ b/sphinx-theme-builder/sphinx-theme-builder.info
@@ -0,0 +1,10 @@
+PRGNAM="sphinx-theme-builder"
+VERSION="0.2.0a7"
+HOMEPAGE="https://pypi.org/project/sphinx-theme-builder"
+DOWNLOAD="https://files.pythonhosted.org/packages/37/67/c4a49681104ef3d019bf58c880f9609c22aabfbb0e9538797c0f356fe120/sphinx-theme-builder-0.2.0a7.tar.gz"
+MD5SUM="194df3d98fbcc8f2a5317c4f4a73a6ca"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES="python3-pyproject-metadata nodejs"
+MAINTAINER="Slack Coder"
+EMAIL="slackcoder@server.ky"
diff --git a/taler-exchange/README b/taler-exchange/README
index 2ea3751..de731fe 100644
--- a/taler-exchange/README
+++ b/taler-exchange/README
@@ -1,6 +1,59 @@
The exchange for the Taler payment system.
-The development version is used for this build. Taler also requires some
-bootstrapping in order to follow the usual build steps.
+Building this package on Slackware 15.0 requires:
-Download and create the expected sourcecode into a tar file by running ./download.sh.
+ - Postgres 15.x or greater, slackbuilds.org has version 14.x.
+ - Build a newer version of llvm, by setting CC=clang, and installing llvm from Slackware Current.
+ - The pre-release version of Gnunet.
+
+Installing this package automatically creates a number of supporting system
+users for the exchange. All are listed in the 'taler-exchange' user group.
+
+The taler exchange runs in a system of services, and a postgres database must
+be configured to service them. The setup described here assumes postgres was
+installed with using 'Peer authentication' by default (omitting '-A md5' when
+running 'initdb' after postgres installation).
+
+Create the database and its users for system users which require it:
+
+```
+sudo -u postgres -- createuser taler-exchange-httpd
+sudo -u postgres -- createuser taler-exchange-aggregator
+sudo -u postgres -- createuser taler-exchange-closer
+sudo -u postgres -- createuser taler-exchange-transfer
+sudo -u postgres -- createuser taler-exchange-wirewatch
+sudo -u postgres -- createdb taler-exchange --owner taler-exchange-httpd
+```
+
+Initialize the database schema, which should also be done after upgrades:
+
+```
+sudo -u taler-exchange-httpd -- taler-exchange-dbinit
+```
+
+Grant the user access to their tables in the database:
+
+```
+sudo -u taler-exchange-httpd psql taler-exchange << EOF
+ GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA exchange TO "taler-exchange-aggregator";
+ GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA exchange TO "taler-exchange-closer";
+ GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA exchange TO "taler-exchange-transfer";
+ GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA exchange TO "taler-exchange-wirewatch";
+ GRANT USAGE ON ALL SEQUENCES IN SCHEMA exchange TO "taler-exchange-aggregator";
+ GRANT USAGE ON ALL SEQUENCES IN SCHEMA exchange TO "taler-exchange-closer";
+ GRANT USAGE ON ALL SEQUENCES IN SCHEMA exchange TO "taler-exchange-transfer";
+ GRANT USAGE ON ALL SEQUENCES IN SCHEMA exchange TO "taler-exchange-wirewatch";
+EOF
+```
+
+To have the taler system start and stop with your host, add to /etc/rc.d/rc.local:
+
+ if [ -x /etc/rc.d/rc.taler-exchange ]; then
+ /etc/rc.d/rc.taler-exchange start
+ fi
+
+And to /etc/rc.d/rc.local_shutdown (creating if needed):
+
+ if [ -x /etc/rc.d/rc.taler-exchange ]; then
+ /etc/rc.d/rc.taler-exchange stop
+ fi
diff --git a/taler-exchange/doinst.sh b/taler-exchange/doinst.sh
new file mode 100644
index 0000000..e9cbe05
--- /dev/null
+++ b/taler-exchange/doinst.sh
@@ -0,0 +1,146 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+# Group for all taler exchange users.
+if ! getent group taler >/dev/null; then
+ groupadd taler \
+ --system \
+ || true
+fi
+
+# Group for all Taler users with direct database access.
+if ! getent group taler-exchange-db >/dev/null; then
+ groupadd taler-exchange-db \
+ --system \
+ || true
+fi
+
+# Group for processes with access to online signing keys.
+if ! getent group taler-exchange-secmod >/dev/null; then
+ groupadd taler-exchange-secmod \
+ --system \
+ || true
+fi
+
+# Group for the access to the offline private key.
+if ! getent group taler-exchange-offline >/dev/null; then
+ groupadd taler-exchange-offline \
+ --system \
+ || true
+fi
+
+if ! getent passwd taler-exchange-offline >/dev/null; then
+ useradd taler-exchange-offline \
+ --comment 'Runs the HTTP daemon with the core business logic' \
+ --groups taler-exchange-db \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+if ! getent passwd taler-exchange-secmod-rsa >/dev/null; then
+ useradd taler-exchange-secmod-rsa \
+ --comment 'Manages the RSA private online signing keys' \
+ --gid taler \
+ --groups taler-exchange-secmod \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+if ! getent passwd taler-secmod-cs >/dev/null; then
+ useradd taler-exchange-secmod-cs \
+ --comment 'Manages the CS private online signing keys' \
+ --gid taler \
+ --groups taler-exchange-secmod \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+if ! getent passwd taler-exchange-secmod-eddsa >/dev/null; then
+ useradd taler-exchange-secmod-eddsa \
+ --comment 'Manages the EdDSA private online signing keys' \
+ --gid taler \
+ --groups taler-exchange-secmod \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+if ! getent passwd taler-exchange-closer >/dev/null; then
+ useradd taler-exchange-closer \
+ --comment 'Closes idle reserves by triggering wire transfers that refund the originator' \
+ --gid taler \
+ --groups taler-exchange-db \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+if ! getent passwd taler-exchange-aggregator >/dev/null; then
+ useradd taler-exchange-aggregator \
+ --comment 'Aggregates deposits into larger wire transfer requests' \
+ --gid taler \
+ --groups taler-exchange-db \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+if ! getent passwd taler-exchange-transfer >/dev/null; then
+ useradd taler-exchange-transfer \
+ --comment 'Performs wire transfers with the bank (via LibEuFin/Nexus)' \
+ --gid taler \
+ --groups taler-exchange-db \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+if ! getent passwd taler-exchange-wirewatch >/dev/null; then
+ useradd taler-exchange-wirewatch \
+ --comment 'Checks for incoming wire transfers with the bank (via LibEuFin/Nexus)' \
+ --gid taler \
+ --groups taler-exchange-db \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+if ! getent passwd taler-exchange-offline >/dev/null; then
+ useradd taler-exchange-offline \
+ --comment 'User for the access to the offline private key.' \
+ --gid taler \
+ --groups taler-exchange-offline \
+ --system \
+ --home-dir /var/lib/taler \
+ || true
+fi
+
+config etc/httpd/sites-available/taler-exchange.conf.new
+config etc/rc.d/rc.taler-exchange.new
+config etc/taler/conf.d/exchange-business.conf.new
+config etc/taler/conf.d/exchange-coins.conf.new
+config etc/taler/conf.d/exchange-system.conf.new
+config etc/taler/secrets/exchange-accountcredentials-1.secret.conf.new
+config etc/taler/secrets/exchange-db.secret.conf.new
+
+chown root:taler etc/taler/secrets
+chown root:taler var/cache/taler
+chown root:taler var/lib/taler
+chown root:taler var/log/taler
+
+chown :taler etc/taler/secrets/exchange-accountcredentials-1.secret.conf.new
+chown :taler-exchange-db etc/taler/secrets/exchange-db.secret.conf.new
+chown :taler-exchange-db etc/taler/secrets/exchange-db.secret.conf.new
diff --git a/taler-exchange/download.sh b/taler-exchange/download.sh
deleted file mode 100755
index 31d62bd..0000000
--- a/taler-exchange/download.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-# exit early on error
-set -e
-
-GIT_REPO=${GIT_REPO:-https://git.taler.net/exchange.git}
-GIT_REPO_NAME=exchange
-PRGNAM=taler-exchange
-VERSION=${VERSION:-dadb96}
-
-CWD=$(pwd)
-OUTPUT="${OUTPUT:-/tmp}"
-PKG="$TMP/package-$PRGNAM"
-TMP=${TMP:-/tmp/sky}
-
-mkdir -p "$TMP"
-cd "$TMP"
-rm -fr "$GIT_REPO_NAME" "$PRGNAM-$VERSION"
-git clone "$GIT_REPO"
-mv "$GIT_REPO_NAME" "$PRGNAM-$VERSION"
-
-cd "$PRGNAM-$VERSION"
-git checkout "$VERSION"
-./bootstrap
-rm -fr .git
-
-cd "$TMP"
-tar -f "$OUTPUT/$PRGNAM-$VERSION.tar.gz" -C "$TMP" -cj "$PRGNAM-$VERSION"
-echo "$OUTPUT/$PRGNAM-$VERSION.tar.gz"
diff --git a/taler-exchange/root/etc/httpd/sites-available/taler-exchange.conf.new b/taler-exchange/root/etc/httpd/sites-available/taler-exchange.conf.new
new file mode 100644
index 0000000..39f2643
--- /dev/null
+++ b/taler-exchange/root/etc/httpd/sites-available/taler-exchange.conf.new
@@ -0,0 +1,4 @@
+<Location "/taler-exchange/">
+ ProxyPass "unix:/run/taler/exchange-httpd/exchange-http.sock|http://example.com/"
+ RequestHeader add "X-Forwarded-Proto" "https"
+</Location>
diff --git a/taler-exchange/root/etc/rc.d/rc.taler-exchange.new b/taler-exchange/root/etc/rc.d/rc.taler-exchange.new
new file mode 100755
index 0000000..b032830
--- /dev/null
+++ b/taler-exchange/root/etc/rc.d/rc.taler-exchange.new
@@ -0,0 +1,305 @@
+#!/bin/sh
+#
+# Startup/shutdown script for GNU Taler's exchange.
+#
+
+create_run_dir() {
+ if [ ! -d /run/taler/ ]; then
+ mkdir -p /run/taler
+ chown :taler /run/taler
+ chmod g+wX /run/taler
+ fi
+}
+
+start_httpd() {
+ echo "Starting Taler Exchange's httpd service"
+ create_run_dir
+
+ daemon \
+ --name=taler-exchange-httpd \
+ --user=taler-exchange-httpd \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-exchange-httpd.log \
+ -- taler-exchange-httpd --config /etc/taler/taler.conf
+}
+
+status_httpd() {
+ /usr/bin/daemon --name=taler-exchange-httpd --pidfiles=/run/taler --running --verbose
+}
+
+stop_httpd() {
+ echo "Stopping Taler Exchange's httpd service"
+ /usr/bin/daemon --name=taler-exchange-httpd --pidfiles=/run/taler --stop
+}
+
+start_aggregator() {
+ echo "Starting Taler Exchange's aggregator service"
+ create_run_dir
+
+ daemon \
+ --name=taler-exchange-aggregator \
+ --user=taler-exchange-aggregator \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-exchange-aggregator.log \
+ -- taler-exchange-aggregator --config /etc/taler/taler.conf
+}
+
+status_aggregator() {
+ /usr/bin/daemon --name=taler-exchange-aggregator --pidfiles=/run/taler --running --verbose
+}
+
+stop_aggregator() {
+ echo "Stopping Taler Exchange's aggregator service"
+ /usr/bin/daemon --name=taler-exchange-aggregator --pidfiles=/run/taler --stop
+}
+
+start_closer() {
+ echo "Starting Taler Exchange's closer service"
+ create_run_dir
+
+ daemon \
+ --name=taler-exchange-closer \
+ --user=taler-exchange-closer \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-exchange-closer.log \
+ -- taler-exchange-closer --config /etc/taler/taler.conf
+}
+
+status_closer() {
+ /usr/bin/daemon --name=taler-exchange-closer --pidfiles=/run/taler --running --verbose
+}
+
+stop_closer() {
+ echo "Stopping Taler Exchange's closer service"
+ /usr/bin/daemon --name=taler-exchange-closer --pidfiles=/run/taler --stop
+}
+
+start_secmod_cs() {
+ echo "Starting Taler Exchange's secmod-cs service"
+ create_run_dir
+
+ daemon \
+ --name=taler-exchange-secmod-cs \
+ --user=taler-exchange-secmod-cs \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-exchange-secmod-cs.log \
+ -- taler-exchange-secmod-cs --config /etc/taler/taler.conf
+}
+
+status_secmod_cs() {
+ /usr/bin/daemon --name=taler-exchange-secmod-cs --pidfiles=/run/taler --running --verbose
+}
+
+stop_secmod_cs() {
+ echo "Stopping Taler Exchange's secmod-cs service"
+ /usr/bin/daemon --name=taler-exchange-secmod-cs --pidfiles=/run/taler --stop
+}
+
+start_secmod_rsa() {
+ echo "Starting Taler Exchange's secmod-rsa service"
+ create_run_dir
+
+ daemon \
+ --name=taler-exchange-secmod-rsa \
+ --user=taler-exchange-secmod-rsa \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-exchange-secmod-rsa.log \
+ -- taler-exchange-secmod-rsa --config /etc/taler/taler.conf
+}
+
+status_secmod_rsa() {
+ /usr/bin/daemon --name=taler-exchange-secmod-rsa --pidfiles=/run/taler --running --verbose
+}
+
+stop_secmod_rsa() {
+ echo "Stopping Taler Exchange's secmod-rsa service"
+ /usr/bin/daemon --name=taler-exchange-secmod-rsa --pidfiles=/run/taler --stop
+}
+
+start_secmod_eddsa() {
+ echo "Starting Taler Exchange's secmod-eddsa service"
+ create_run_dir
+
+ daemon \
+ --name=taler-exchange-secmod-eddsa \
+ --user=taler-exchange-secmod-eddsa \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-exchange-secmod-eddsa.log \
+ -- taler-exchange-secmod-eddsa --config /etc/taler/taler.conf
+}
+
+stop_secmod_eddsa() {
+ echo "Stopping Taler Exchange's secmod-eddsa service"
+ /usr/bin/daemon --name=taler-exchange-secmod-eddsa --pidfiles=/run/taler --stop
+}
+
+start_transfer() {
+ echo "Starting Taler Exchange's transfer service"
+ create_run_dir
+
+ daemon \
+ --name=taler-exchange-transfer \
+ --user=taler-exchange-transfer \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-exchange-transfer.log \
+ -- taler-exchange-transfer --config /etc/taler/taler.conf
+}
+
+status_transfer() {
+ /usr/bin/daemon --name=taler-exchange-transfer --pidfiles=/run/taler --running --verbose
+}
+
+stop_transfer() {
+ echo "Stopping Taler Exchange's transfer service"
+ /usr/bin/daemon --name=taler-exchange-transfer --pidfiles=/run/taler --stop
+}
+
+start_wirewatch() {
+ echo "Starting Taler Exchange's wirewatch service"
+ create_run_dir
+
+ daemon \
+ --name=taler-exchange-wirewatch \
+ --user=taler-exchange-wirewatch \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-exchange-wirewatch.log \
+ -- taler-exchange-wirewatch --config /etc/taler/taler.conf
+}
+
+status_wirewatch() {
+ /usr/bin/daemon --name=taler-exchange-wirewatch --pidfiles=/run/taler --running --verbose
+}
+
+stop_wirewatch() {
+ echo "Stopping Taler Exchange's wirewatch service"
+ /usr/bin/daemon --name=taler-exchange-wirewatch --pidfiles=/run/taler --stop
+}
+
+start() {
+ start_httpd
+ start_aggregator
+ start_closer
+ start_secmod_cs
+ start_secmod_rsa
+ start_secmod_eddsa
+ start_transfer
+ start_wirewatch
+}
+
+status() {
+ status_httpd
+ status_aggregator
+ status_closer
+ status_secmod_cs
+ status_secmod_rsa
+ status_transfer
+ status_wirewatch
+}
+
+stop() {
+ stop_httpd
+ stop_aggregator
+ stop_closer
+ stop_secmod_cs
+ stop_secmod_rsa
+ stop_transfer
+ stop_wirewatch
+}
+
+case "$1" in
+start-httpd)
+ start_httpd
+ ;;
+status-httpd)
+ status_httpd
+ ;;
+stop-httpd)
+ stop_httpd
+ ;;
+
+start-aggregator)
+ start_aggregator
+ ;;
+status-aggregator)
+ status_aggregator
+ ;;
+stop-aggregator)
+ stop_aggregator
+ ;;
+
+start-closer)
+ start_closer
+ ;;
+status-closer)
+ status_closer
+ ;;
+stop-closer)
+ stop_closer
+ ;;
+
+start-secmod_cs)
+ start_secmod_cs
+ ;;
+status-secmod_cs)
+ status_secmod_cs
+ ;;
+stop-secmod_cs)
+ stop_secmod_cs
+ ;;
+
+start-secmod_rsa)
+ start_secmod_rsa
+ ;;
+status-secmod_rsa)
+ status_secmod_rsa
+ ;;
+stop-secmod_rsa)
+ stop_secmod_rsa
+ ;;
+
+start-secmod_eddsa)
+ start_secmod_eddsa
+ ;;
+status-secmod_eddsa)
+ status_secmod_eddsa
+ ;;
+stop-secmod_eddsa)
+ stop_secmod_eddsa
+ ;;
+
+start-transfer)
+ start_transfer
+ ;;
+status-transfer)
+ status_transfer
+ ;;
+stop-transfer)
+ stop_transfer
+ ;;
+
+start-wirewatch)
+ start_wirewatch
+ ;;
+status-wirewatch)
+ status_wirewatch
+ ;;
+stop-wirewatch)
+ stop_wirewatch
+ ;;
+
+start)
+ start
+ ;;
+status)
+ status
+ ;;
+stop)
+ stop
+ ;;
+*)
+ echo "Usage: $0 {start\(-*\)|stop\(-*\)|status\(-*\)}"
+ exit 1
+esac
+
+
+
diff --git a/taler-exchange/root/etc/taler/conf.d/exchange-business.conf.new b/taler-exchange/root/etc/taler/conf.d/exchange-business.conf.new
new file mode 100644
index 0000000..f56e47b
--- /dev/null
+++ b/taler-exchange/root/etc/taler/conf.d/exchange-business.conf.new
@@ -0,0 +1,48 @@
+# Configuration for business-level aspects of the exchange.
+
+[exchange]
+
+# Here you MUST add the master public key of the offline system
+# which you can get using `taler-exchange-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 exchange.
+# 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 exchange should be specified here:
+[exchange-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@ exchange-accountcredentials-1 ../secrets/exchange-accountcredentials-1.secret.conf
+
diff --git a/taler-exchange/root/etc/taler/conf.d/exchange-coins.conf.new b/taler-exchange/root/etc/taler/conf.d/exchange-coins.conf.new
new file mode 100644
index 0000000..562ba05
--- /dev/null
+++ b/taler-exchange/root/etc/taler/conf.d/exchange-coins.conf.new
@@ -0,0 +1,34 @@
+#
+# This configuration file specifies the various denominations offered by your
+# exchange.
+#
+# 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 exchange 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/taler-exchange/root/etc/taler/conf.d/exchange-system.conf.new b/taler-exchange/root/etc/taler/conf.d/exchange-system.conf.new
new file mode 100644
index 0000000..75c670f
--- /dev/null
+++ b/taler-exchange/root/etc/taler/conf.d/exchange-system.conf.new
@@ -0,0 +1,10 @@
+# Configuration settings for system parameters of the exchange.
+
+# Read secret sections into configuration, but only
+# if we have permission to do so.
+@inline-secret@ exchangedb-postgres ../secrets/exchange-db.secret.conf
+
+[exchange]
+
+# Only supported database is Postgres right now.
+DATABASE = postgres
diff --git a/taler-exchange/root/etc/taler/secrets/exchange-accountcredentials-1.secret.conf.new b/taler-exchange/root/etc/taler/secrets/exchange-accountcredentials-1.secret.conf.new
new file mode 100644
index 0000000..603dc60
--- /dev/null
+++ b/taler-exchange/root/etc/taler/secrets/exchange-accountcredentials-1.secret.conf.new
@@ -0,0 +1,16 @@
+# This file contains the secret credentials
+# to access the Taler Wire Gateway API (usually
+# provided by LibEuFin) for the exchange accounts.
+#
+# Each exchange-account-* section should have a matching
+# exchange-accountcredentials-* section here.
+#
+# Each of those sections must be imported via @inline-secret@,
+# usually in conf.d/exchange-business.conf.
+
+[exchange-accountcredentials-1]
+
+wire_gateway_auth_method = basic
+password =
+username =
+wire_gateway_url =
diff --git a/taler-exchange/root/etc/taler/secrets/exchange-db.secret.conf.new b/taler-exchange/root/etc/taler/secrets/exchange-db.secret.conf.new
new file mode 100644
index 0000000..08c2007
--- /dev/null
+++ b/taler-exchange/root/etc/taler/secrets/exchange-db.secret.conf.new
@@ -0,0 +1,10 @@
+# Database configuration for the Taler exchange.
+
+[exchangedb-postgres]
+
+# Typically, there should only be a single line here, of the form:
+
+CONFIG=postgres:///taler-exchange
+
+# The details of the URI depend on where the database lives and how
+# access control was configured.
diff --git a/taler-exchange/slack-desc b/taler-exchange/slack-desc
index e4aaa1d..712c373 100644
--- a/taler-exchange/slack-desc
+++ b/taler-exchange/slack-desc
@@ -4,9 +4,3 @@ taler-exchange:
taler-exchange: The exchange for the Taler payment system.
taler-exchange:
taler-exchange:
-taler-exchange:
-taler-exchange:
-taler-exchange:
-taler-exchange:
-taler-exchange:
-taler-exchange:
diff --git a/taler-exchange/taler-exchange.SlackBuild b/taler-exchange/taler-exchange.SlackBuild
index 5e59b9f..7234194 100755
--- a/taler-exchange/taler-exchange.SlackBuild
+++ b/taler-exchange/taler-exchange.SlackBuild
@@ -1,10 +1,13 @@
#!/bin/sh
PRGNAM=taler-exchange
-VERSION=${VERSION:-0.8.4}
+VERSION=${VERSION:-0.9.4a}
BUILD=${BUILD:-1}
TAG=${TAG:-_slackcoder}
+TALER_GID=${TALER_GID:-704}
+TALER_EXCHANGE_DB_GID=${TALER_EXCHANGE_DB_GID:-705}
+
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
@@ -37,9 +40,9 @@ set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION*.tar.gz
-cd $PRGNAM-$VERSION
+rm -rf $PRGNAM-0.9.4a
+tar xvf $CWD/$PRGNAM-0.9.4a.tar.gz
+cd $PRGNAM-0.9.4a
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
@@ -53,7 +56,7 @@ find -L . \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
- --docdir=/usr/doc/$PRGNAM-$VERSION \
+ --docdir=/usr/doc/$PRGNAM-0.9.4a \
--disable-static \
--build=$ARCH-slackware-linux
make
@@ -62,12 +65,40 @@ make DESTDIR="$PKG" install
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a README $PKG/usr/doc/$PRGNAM-$VERSION
-cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+mkdir -p $PKG/usr/doc/$PRGNAM-0.9.4a
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-0.9.4a/$PRGNAM.SlackBuild
+cat $CWD/README > $PKG/usr/doc/$PRGNAM-0.9.4a/README_slackware.txt
+cp -a \
+ AUTHORS \
+ COPYING \
+ ChangeLog \
+ INSTALL \
+ NEWS \
+ README \
+ README.1st \
+ $PKG/usr/doc/$PRGNAM-0.9.4a
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+mkdir -p $PKG/etc/taler/secrets
+chown root:$TALER_GID $PKG/etc/taler/secrets
+mkdir -p $PKG/var/cache/taler
+chown root:$TALER_GID $PKG/var/cache/taler
+chmod g+w $PKG/var/cache/taler
+mkdir -p $PKG/var/lib/taler
+chown root:$TALER_GID $PKG/var/lib/taler
+chmod g+w $PKG/var/lib/taler
+mkdir -p $PKG/var/log/taler
+chown root:$TALER_GID $PKG/var/log/taler
+chmod g+w $PKG/var/log/taler
+
+(cd $CWD/root && find . -type f -not -path . -exec install -D -m 755 {} "$PKG/{}" \; )
+chown :$TALER_GID $PKG/etc/taler/secrets/exchange-accountcredentials-1.secret.conf.new
+chown :$TALER_EXCHANGE_DB_GID $PKG/etc/taler/secrets/exchange-db.secret.conf.new
+chown :$TALER_EXCHANGE_DB_GID $PKG/etc/taler/secrets/exchange-db.secret.conf.new
+chmod -R u=rwX,g=rX,o= $PKG/etc/taler/secrets/*
cd $PKG
-/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz}
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-0.9.4a-$ARCH-$BUILD$TAG.${PKGTYPE:-txz}
diff --git a/taler-exchange/taler-exchange.info b/taler-exchange/taler-exchange.info
index a6bbf39..0a1558a 100644
--- a/taler-exchange/taler-exchange.info
+++ b/taler-exchange/taler-exchange.info
@@ -1,8 +1,8 @@
PRGNAM="taler-exchange"
-VERSION="0.8.4"
+VERSION="0.9.4a"
HOMEPAGE="https://taler.net"
-DOWNLOAD="https://ftpmirror.gnu.org/taler/taler-exchange-0.8.4.tar.gz"
-MD5SUM="fb9d15d363a7b8069f3cb220fefa996c"
-REQUIRES="gnunet Jinja2"
+DOWNLOAD="https://ftpmirror.gnu.org/gnu/taler/taler-exchange-0.9.4a.tar.gz"
+MD5SUM="04705ee8fc210ec161b5ba5e4b007d3b"
+REQUIRES="gnunet jq postgresql"
MAINTAINER="Slack Coder"
EMAIL="slackcoder@server.ky"
diff --git a/taler-merchant/README b/taler-merchant/README
index 7b7ebf5..7d45e58 100644
--- a/taler-merchant/README
+++ b/taler-merchant/README
@@ -1,6 +1,35 @@
The merchant for the Taler payment system.
-The development version is used for this build. Taler also requires some
-bootstrapping in order to follow the usual build steps.
+Building this package on Slackware 15.0 requires:
-Download and create the expected sourcecode into a tar file by running ./download.sh.
+ - Postgres 15.x or greater, slackbuilds.org has version 14.x.
+ - Build a newer version of llvm, by setting CC=clang, and installing llvm from Slackware Current.
+ - The pre-release version of Gnunet.
+
+Installing this package automatically creates the taler-merchant user and group.
+
+The taler merchant requires a postgres database to be configured. The setup
+described here assumes postgres was installed with using 'Peer authentication'
+by default (omitting '-A md5' when running 'initdb' after postgres
+installation).
+
+```
+# Create the database and its user.
+sudo -u postgres -- createuser taler-merchant
+sudo -u postgres -- createdb taler-merchant --owner taler-merchant
+
+# Initialize the database, must be done after each upgrade
+sudo -u taler-merchant -- taler-merchant-dbinit
+```
+
+To have the taler system start and stop with your host, add to /etc/rc.d/rc.local:
+
+ if [ -x /etc/rc.d/rc.taler-merchant ]; then
+ /etc/rc.d/rc.taler-merchant start
+ fi
+
+And to /etc/rc.d/rc.local_shutdown (creating if needed):
+
+ if [ -x /etc/rc.d/rc.taler-merchant ]; then
+ /etc/rc.d/rc.taler-merchant stop
+ fi
diff --git a/taler-merchant/doinst.sh b/taler-merchant/doinst.sh
new file mode 100644
index 0000000..5c6afac
--- /dev/null
+++ b/taler-merchant/doinst.sh
@@ -0,0 +1,41 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+if ! getent group taler >/dev/null; then
+ groupadd taler \
+ --system
+fi
+
+if ! getent group taler-merchant >/dev/null; then
+ groupadd taler-merchant \
+ --system
+fi
+
+if ! getent passwd taler-merchant >/dev/null; then
+ useradd taler-merchant \
+ --comment 'Merchant for accepting taler payments' \
+ --gid taler-merchant \
+ --groups taler \
+ --system
+fi
+
+config etc/httpd/sites-available/taler-merchant.conf.new
+config etc/rc.d/rc.taler-merchant.new
+config etc/taler/conf.d/merchant.conf.new
+config etc/taler/secrets/merchant-db.secret.conf.new
+
+chown :taler etc/taler/secrets
+chown :taler var/cache/taler
+chown :taler var/lib/taler
+chown :taler var/log/taler
+chown :taler-merchant etc/taler/secrets/merchant-db.secret.conf.new
diff --git a/taler-merchant/download.sh b/taler-merchant/download.sh
deleted file mode 100755
index fab7477..0000000
--- a/taler-merchant/download.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-# exit early on error
-set -e
-
-GIT_REPO=${GIT_REPO:-https://git.taler.net/merchant.git}
-GIT_REPO_NAME=merchant
-PRGNAM=taler-merchant
-VERSION=${VERSION:-9b2eae}
-
-CWD=$(pwd)
-OUTPUT="${OUTPUT:-/tmp}"
-PKG="$TMP/package-$PRGNAM"
-TMP=${TMP:-/tmp/sky}
-
-mkdir -p "$TMP"
-cd "$TMP"
-rm -fr "$GIT_REPO_NAME" "$PRGNAM-$VERSION"
-git clone "$GIT_REPO"
-mv "$GIT_REPO_NAME" "$PRGNAM-$VERSION"
-
-cd "$PRGNAM-$VERSION"
-git checkout "$VERSION"
-./bootstrap
-rm -fr .git
-
-cd "$TMP"
-tar -f "$OUTPUT/$PRGNAM-$VERSION.tar.gz" -C "$TMP" -cj "$PRGNAM-$VERSION"
-echo "$OUTPUT/$PRGNAM-$VERSION.tar.gz"
diff --git a/taler-merchant/root/etc/httpd/sites-available/taler-merchant.conf.new b/taler-merchant/root/etc/httpd/sites-available/taler-merchant.conf.new
new file mode 100644
index 0000000..5d0050a
--- /dev/null
+++ b/taler-merchant/root/etc/httpd/sites-available/taler-merchant.conf.new
@@ -0,0 +1,22 @@
+# Make sure to enable the following Apache modules before
+# integrating this into your configuration:
+#
+# a2enmod proxy
+# a2enmod proxy_http
+# a2enmod headers
+#
+# NOTE:
+# - consider to adjust the location
+# - consider putting all this into a VirtualHost
+# - strongly consider setting up TLS support
+#
+# For all of the above, please read the respective
+# Apache documentation.
+#
+<Location "/">
+ ProxyPass "unix:/var/run/taler/merchant-httpd/merchant-http.sock|http://example.com/"
+
+ # NOTE:
+ # - Uncomment this line if you use TLS/HTTPS
+ RequestHeader add "X-Forwarded-Proto" "https"
+</Location>
diff --git a/taler-merchant/root/etc/rc.d/rc.taler-merchant.new b/taler-merchant/root/etc/rc.d/rc.taler-merchant.new
new file mode 100755
index 0000000..cf6c783
--- /dev/null
+++ b/taler-merchant/root/etc/rc.d/rc.taler-merchant.new
@@ -0,0 +1,51 @@
+#!/bin/sh
+#
+# Startup/shutdown script for GNU Taler's exchange.
+#
+
+create_run_dir() {
+ if [ ! -d /run/taler/ ]; then
+ mkdir -p /run/taler
+ chown :taler /run/taler
+ chmod g+wX /run/taler
+ fi
+}
+
+start() {
+ echo "Starting Taler Merchant"
+ create_run_dir
+
+ daemon \
+ --name=taler-merchant-httpd \
+ --user=taler-merchant \
+ --pidfiles=/run/taler \
+ --output=/var/log/taler/taler-merchant-httpd.log \
+ -- taler-merchant-httpd --config /etc/taler/taler.conf
+}
+
+stop() {
+ echo "Stopping Taler Merchant"
+ /usr/bin/daemon --name=taler-merchant-httpd --pidfiles=/run/taler --stop
+}
+
+status() {
+ /usr/bin/daemon --name=taler-merchant-httpd --pidfiles=/run/taler --running --verbose
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop
+ ;;
+status)
+ status
+ ;;
+*)
+ echo "Usage: $0 {start|stop|status}"
+ exit 1
+esac
+
+
+
diff --git a/taler-merchant/root/etc/taler/conf.d/merchant.conf.new b/taler-merchant/root/etc/taler/conf.d/merchant.conf.new
new file mode 100644
index 0000000..4851615
--- /dev/null
+++ b/taler-merchant/root/etc/taler/conf.d/merchant.conf.new
@@ -0,0 +1,10 @@
+# Read secret sections into configuration, but only
+# if we have permission to do so.
+@inline-secret@ merchantdb-postgres ../secrets/merchant-db.secret.conf
+
+[merchant]
+DATABASE = postgres
+SERVE = unix
+
+# Merchant-specific overrides, included last to take precedence.
+@inline-matching@ ../merchant-overrides.conf
diff --git a/taler-merchant/root/etc/taler/secrets/merchant-db.secret.conf.new b/taler-merchant/root/etc/taler/secrets/merchant-db.secret.conf.new
new file mode 100644
index 0000000..6cbbb24
--- /dev/null
+++ b/taler-merchant/root/etc/taler/secrets/merchant-db.secret.conf.new
@@ -0,0 +1,8 @@
+[merchantdb-postgres]
+
+# Typically, there should only be a single line here, of the form:
+
+CONFIG=postgres:///taler-merchant
+
+# The details of the URI depend on where the database lives and how
+# access control was configured.
diff --git a/taler-merchant/taler-merchant.SlackBuild b/taler-merchant/taler-merchant.SlackBuild
index 33d9a8d..bfeb870 100755
--- a/taler-merchant/taler-merchant.SlackBuild
+++ b/taler-merchant/taler-merchant.SlackBuild
@@ -1,7 +1,7 @@
#!/bin/sh
PRGNAM=taler-merchant
-VERSION=${VERSION:-0.8.3}
+VERSION=${VERSION:-0.9.4b}
BUILD=${BUILD:-1}
TAG=${TAG:-_slackcoder}
@@ -37,9 +37,9 @@ set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
-rm -rf $PRGNAM-$VERSION
-tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
-cd $PRGNAM-$VERSION
+rm -rf $PRGNAM-0.9.4b
+tar xvf $CWD/$PRGNAM-0.9.4b.tar.gz
+cd $PRGNAM-0.9.4b
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
@@ -53,28 +53,41 @@ find -L . \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
- --docdir=/usr/doc/$PRGNAM-$VERSION \
+ --docdir=/usr/doc/$PRGNAM-0.9.4b \
--disable-static \
--build=$ARCH-slackware-linux
make
make DESTDIR="$PKG" install
-# make install does not exist for this project
-
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-# A soon to be fixed bug expects this file, causing it to exit early with
-# error.
-mkdir -p "$PKG/usr/share/taler/merchant/spa"
-touch "$PKG/usr/share/taler/merchant/spa/spa.html"
-
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a COPYING COPYING.* README $PKG/usr/doc/$PRGNAM-$VERSION
-cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
+mkdir -p $PKG/usr/doc/$PRGNAM-0.9.4b
+cp -a COPYING COPYING.* README $PKG/usr/doc/$PRGNAM-0.9.4b
+cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-0.9.4b/$PRGNAM.SlackBuild
+cat $CWD/README > $PKG/usr/doc/$PRGNAM-0.9.4b/README_slackware.txt
+cp -a \
+ AUTHORS \
+ COPYING* \
+ ChangeLog \
+ NEWS \
+ README \
+ $PKG/usr/doc/$PRGNAM-0.9.4b
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+mkdir -p $PKG/etc/taler/secrets
+mkdir -p $PKG/var/cache/taler
+chmod g+w $PKG/var/cache/taler
+mkdir -p $PKG/var/lib/taler
+chmod g+w $PKG/var/lib/taler
+mkdir -p $PKG/var/log/taler
+chmod g+w $PKG/var/log/taler
+
+(cd $CWD/root && find . -type f -exec install -D -m 755 {} "$PKG/{}" \; )
+chmod -R u=rwX,g=rX,o= $PKG/etc/taler/secrets
cd $PKG
-/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz}
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-0.9.4b-$ARCH-$BUILD$TAG.${PKGTYPE:-txz}
diff --git a/taler-merchant/taler-merchant.info b/taler-merchant/taler-merchant.info
index 93ba69a..f93b314 100644
--- a/taler-merchant/taler-merchant.info
+++ b/taler-merchant/taler-merchant.info
@@ -1,8 +1,8 @@
PRGNAM="taler-merchant"
-VERSION="0.8.3"
+VERSION="0.9.4b"
HOMEPAGE="https://taler.net"
-DOWNLOAD="http://ftpmirror.gnu.org/taler/taler-merchant-0.8.3.tar.gz"
-MD5SUM="8eda88ca970f8895e3c6b1ed03e18e48"
+DOWNLOAD="https://ftpmirror.gnu.org/gnu/taler/taler-merchant-0.9.4b.tar.gz"
+MD5SUM="6762ff93cbbe55b452ea9a213b935585"
REQUIRES="gnunet taler-exchange"
-MAINTAINER="SlackCoder"
+MAINTAINER="Slack Coder"
EMAIL="slackcoder@server.ky"