148 lines
4.9 KiB
Bash
Executable file
148 lines
4.9 KiB
Bash
Executable file
#!/bin/bash
|
|
# Root: base services for manual libeufin-bank (like merchant/exchange start_base).
|
|
# Then interactive shell as libeufin-bank → run start_bank.sh there.
|
|
#
|
|
# Container: taler-hacktivism-bank
|
|
#
|
|
# Usage:
|
|
# /root/start_base_services_for_taler_bank.sh
|
|
# /root/start_base_services_for_taler_bank.sh --no-shell
|
|
# /root/start_base_services_for_taler_bank.sh --no-shell --start-bank
|
|
# /root/start_base_services_for_taler_bank.sh --no-shell --start-bank --restart
|
|
|
|
set -e
|
|
CONF=/etc/libeufin/libeufin-bank.conf
|
|
LOG_DIR=/var/log/libeufin-bank
|
|
PWD_BIN=/usr/local/bin
|
|
BANK_STARTER=start_bank.sh
|
|
BANK_USER=libeufin-bank
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "Run as root" >&2
|
|
exit 1
|
|
fi
|
|
|
|
NO_SHELL=0
|
|
START_BANK=0
|
|
BANK_RESTART=0
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--no-shell|-n) NO_SHELL=1 ;;
|
|
--start-bank) START_BANK=1; NO_SHELL=1 ;;
|
|
--restart|-r) BANK_RESTART=1 ;;
|
|
--help|-h)
|
|
cat <<'EOF'
|
|
Usage: start_base_services_for_taler_bank.sh [options]
|
|
|
|
(default) Start postgres + dirs, then interactive shell as libeufin-bank
|
|
--no-shell Start base services only, do not open a shell
|
|
--start-bank After base services, run /usr/local/bin/start_bank.sh as libeufin-bank
|
|
(implies --no-shell)
|
|
--restart With --start-bank: pass --restart to start_bank.sh
|
|
EOF
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $arg" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# --- 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
|
|
chmod 2775 /var/run/postgresql 2>/dev/null || chmod 775 /var/run/postgresql
|
|
|
|
# Snakeoil TLS key: postgres fails if it cannot read the key (common in rootless images).
|
|
# Prefer fixing perms; if still broken, force ssl=off for local-only DB.
|
|
if [ -f /etc/ssl/private/ssl-cert-snakeoil.key ]; then
|
|
chown root:ssl-cert /etc/ssl/private/ssl-cert-snakeoil.key 2>/dev/null || true
|
|
chmod 640 /etc/ssl/private/ssl-cert-snakeoil.key 2>/dev/null || true
|
|
fi
|
|
for pgconf in /etc/postgresql/*/main/postgresql.conf; do
|
|
[ -f "$pgconf" ] || continue
|
|
if grep -qE '^\s*ssl\s*=' "$pgconf"; then
|
|
sed -i 's/^\s*ssl\s*=.*/ssl = off/' "$pgconf"
|
|
else
|
|
echo "ssl = off" >>"$pgconf"
|
|
fi
|
|
done
|
|
|
|
if pg_isready -q 2>/dev/null; then
|
|
echo " already accepting connections"
|
|
pg_isready || true
|
|
return 0
|
|
fi
|
|
|
|
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 "Create log + data dirs... giving permission to ${BANK_USER}:"
|
|
mkdir -p "$LOG_DIR" /var/lib/libeufin-bank
|
|
chown "${BANK_USER}:${BANK_USER}" "$LOG_DIR" /var/lib/libeufin-bank
|
|
chmod 755 "$LOG_DIR" /var/lib/libeufin-bank
|
|
|
|
echo "Start base services needed for GOA Exploration Bank."
|
|
echo ""
|
|
|
|
echo "1. postgresql:"
|
|
ensure_postgresql
|
|
# ensure role + DB (postgres:///libeufin) — Debian createuser/createdb as postgres
|
|
su -s /bin/bash postgres -c "psql -tc \"SELECT 1 FROM pg_roles WHERE rolname='libeufin-bank'\" | grep -q 1 || createuser -s libeufin-bank" || true
|
|
su -s /bin/bash postgres -c "psql -tc \"SELECT 1 FROM pg_database WHERE datname='libeufin'\" | grep -q 1 || createdb -O libeufin-bank libeufin" || true
|
|
pg_isready || true
|
|
|
|
if [ "$START_BANK" -eq 1 ]; then
|
|
echo ""
|
|
echo "2. start_bank.sh as ${BANK_USER}:"
|
|
if [ ! -x "$PWD_BIN/$BANK_STARTER" ]; then
|
|
echo "missing $PWD_BIN/$BANK_STARTER" >&2
|
|
exit 1
|
|
fi
|
|
if [ "$BANK_RESTART" -eq 1 ]; then
|
|
runuser -u "$BANK_USER" -- "$PWD_BIN/$BANK_STARTER" --restart
|
|
else
|
|
runuser -u "$BANK_USER" -- "$PWD_BIN/$BANK_STARTER"
|
|
fi
|
|
exit $?
|
|
fi
|
|
|
|
if [ "$NO_SHELL" -eq 1 ]; then
|
|
echo "Base services started (--no-shell). Next: runuser -u ${BANK_USER} -- $PWD_BIN/$BANK_STARTER [--restart]"
|
|
exit 0
|
|
fi
|
|
|
|
echo "2. Switching now to user ${BANK_USER}, in $PWD_BIN; find executable $BANK_STARTER there!"
|
|
echo ""
|
|
cd "$PWD_BIN"
|
|
# util-linux: -u and -s are mutually exclusive (same as exchange/merchant)
|
|
exec runuser -u "$BANK_USER" -- bash
|