133 lines
4.1 KiB
Bash
Executable file
133 lines
4.1 KiB
Bash
Executable file
#!/bin/bash
|
|
# Root: base services for manual merchant (no systemd).
|
|
# Pattern (all three stacks): root base → shell as service user → start_*.sh
|
|
#
|
|
# Container: taler-hacktivism
|
|
# Then as taler-merchant-httpd: /usr/local/bin/start_merchant.sh [--restart]
|
|
#
|
|
# Usage:
|
|
# /root/start_base_services_for_taler.sh # interactive shell as service user
|
|
# /root/start_base_services_for_taler.sh --no-shell # base only (automation)
|
|
|
|
set -e
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "Run as root" >&2
|
|
exit 1
|
|
fi
|
|
|
|
NO_SHELL=0
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--no-shell|-n) NO_SHELL=1 ;;
|
|
--help|-h)
|
|
echo "Usage: $0 [--no-shell]"
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
PWD_BIN="/usr/local/bin"
|
|
MERCHANT_STARTER="start_merchant.sh"
|
|
LOG_DIR=/var/log/taler-merchant
|
|
RUN_DIR=/var/run/taler-merchant/httpd
|
|
|
|
# --- Debian postgresql defaults (pg_createcluster layout) ---
|
|
ensure_postgresql() {
|
|
echo " Debian perms on /etc/postgresql + data/log/run..."
|
|
if [ -d /etc/postgresql ]; then
|
|
chown -R root:postgres /etc/postgresql
|
|
find /etc/postgresql -type d -exec chmod 755 {} \;
|
|
find /etc/postgresql -type f -name '*.conf' -exec chmod 640 {} \;
|
|
fi
|
|
chown -R postgres:postgres /var/lib/postgresql /var/log/postgresql 2>/dev/null || true
|
|
mkdir -p /var/run/postgresql
|
|
chown postgres:postgres /var/run/postgresql
|
|
# Debian package uses setgid sticky on run dir
|
|
chmod 2775 /var/run/postgresql 2>/dev/null || chmod 775 /var/run/postgresql
|
|
|
|
if pg_isready -q 2>/dev/null; then
|
|
echo " already accepting connections"
|
|
pg_isready || true
|
|
return 0
|
|
fi
|
|
|
|
# Stale socket lock only when not accepting
|
|
rm -f /var/run/postgresql/.s.PGSQL.*.lock 2>/dev/null || true
|
|
if ! pgrep -u postgres -x postgres >/dev/null 2>&1; then
|
|
rm -f /var/lib/postgresql/*/main/postmaster.pid 2>/dev/null || true
|
|
fi
|
|
|
|
if command -v pg_ctlcluster >/dev/null 2>&1 && command -v pg_lsclusters >/dev/null 2>&1; then
|
|
while read -r ver name _rest; do
|
|
[ -n "$ver" ] || continue
|
|
echo " pg_ctlcluster $ver $name start"
|
|
pg_ctlcluster "$ver" "$name" start 2>/dev/null || true
|
|
done < <(pg_lsclusters --no-header 2>/dev/null || true)
|
|
fi
|
|
if ! pg_isready -q 2>/dev/null; then
|
|
if [ -x /etc/init.d/postgresql ]; then
|
|
/etc/init.d/postgresql start || true
|
|
else
|
|
service postgresql start || true
|
|
fi
|
|
fi
|
|
sleep 1
|
|
pg_isready || true
|
|
}
|
|
|
|
echo "Start certbot renewal (background)..."
|
|
if [ -x /root/scripts/certbot_renew.sh ]; then
|
|
/root/scripts/certbot_renew.sh &
|
|
elif [ -x ./scripts/certbot_renew.sh ]; then
|
|
./scripts/certbot_renew.sh &
|
|
fi
|
|
|
|
echo "Create log + runtime dirs... permissions for taler-merchant-httpd / www-data:"
|
|
mkdir -p "$LOG_DIR" /var/run/taler-merchant "$RUN_DIR"
|
|
chown taler-merchant-httpd: "$LOG_DIR"
|
|
chmod 755 "$LOG_DIR"
|
|
chown taler-merchant-httpd:www-data /var/run/taler-merchant "$RUN_DIR"
|
|
chmod 755 /var/run/taler-merchant "$RUN_DIR"
|
|
# merchant app data (package default home)
|
|
if [ -d /var/lib/taler-merchant ]; then
|
|
chown -R taler-merchant-httpd:www-data /var/lib/taler-merchant 2>/dev/null || true
|
|
fi
|
|
|
|
echo "Start base services needed for Taler Merchant."
|
|
echo ""
|
|
|
|
if [ -f /root/.taler-secrets-env ]; then
|
|
echo -n "Read secrets needed for SMS delivery:"
|
|
set -a
|
|
# shellcheck disable=SC1091
|
|
source /root/.taler-secrets-env && echo " OK"
|
|
set +a
|
|
else
|
|
echo "No /root/.taler-secrets-env (SMS may fail)"
|
|
fi
|
|
|
|
echo "1. postgresql:"
|
|
ensure_postgresql
|
|
|
|
echo "2. nginx:"
|
|
if [ -x /etc/init.d/nginx ]; then
|
|
/etc/init.d/nginx start 2>/dev/null || nginx || true
|
|
else
|
|
service nginx start 2>/dev/null || nginx || true
|
|
fi
|
|
|
|
if [ "$NO_SHELL" -eq 1 ]; then
|
|
echo "Base services started (--no-shell). Next: runuser -u taler-merchant-httpd -- $PWD_BIN/$MERCHANT_STARTER [--restart]"
|
|
exit 0
|
|
fi
|
|
|
|
echo "3. Switching now to user taler-merchant-httpd, in $PWD_BIN; find executable $MERCHANT_STARTER there!"
|
|
echo ""
|
|
cd "$PWD_BIN"
|
|
# util-linux: -u and -s/--shell are mutually exclusive
|
|
exec runuser -u taler-merchant-httpd -- env \
|
|
CLICKSEND_API_KEY="${CLICKSEND_API_KEY:-}" \
|
|
CLICKSEND_USERNAME="${CLICKSEND_USERNAME:-}" \
|
|
TELESIGN_AUTH_TOKEN="${TELESIGN_AUTH_TOKEN:-}" \
|
|
bash
|