Files
c-relay-pg/systemd/setup_postgres_18.sh
T

48 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# Configure PostgreSQL 18 for c-relay-pg using peer authentication.
# Idempotent: safe to run multiple times.
set -euo pipefail
PG_VERSION="18"
PG_HBA="/etc/postgresql/${PG_VERSION}/main/pg_hba.conf"
RELAY_ROLE="c-relay-pg"
RELAY_DB="crelay"
if ! command -v psql >/dev/null 2>&1; then
echo "ERROR: psql not found. Install postgresql-18 first."
exit 1
fi
if [ ! -f "$PG_HBA" ]; then
echo "ERROR: pg_hba.conf not found at $PG_HBA"
exit 1
fi
echo "Ensuring PostgreSQL role exists: $RELAY_ROLE"
sudo -u postgres psql -v ON_ERROR_STOP=1 -tAc "SELECT 1 FROM pg_roles WHERE rolname='${RELAY_ROLE}'" | grep -q 1 || \
sudo -u postgres psql -v ON_ERROR_STOP=1 -c "CREATE ROLE \"${RELAY_ROLE}\" LOGIN"
echo "Ensuring PostgreSQL database exists: $RELAY_DB"
sudo -u postgres psql -v ON_ERROR_STOP=1 -tAc "SELECT 1 FROM pg_database WHERE datname='${RELAY_DB}'" | grep -q 1 || \
sudo -u postgres createdb --owner="${RELAY_ROLE}" "${RELAY_DB}"
echo "Ensuring owner on database: $RELAY_DB"
sudo -u postgres psql -v ON_ERROR_STOP=1 -c "ALTER DATABASE \"${RELAY_DB}\" OWNER TO \"${RELAY_ROLE}\""
PEER_RULE="local ${RELAY_DB} ${RELAY_ROLE} peer"
if ! grep -Eq "^local[[:space:]]+${RELAY_DB}[[:space:]]+${RELAY_ROLE}[[:space:]]+peer$" "$PG_HBA"; then
echo "Adding explicit peer auth rule to $PG_HBA"
TMP_FILE=$(mktemp)
{
echo "$PEER_RULE"
cat "$PG_HBA"
} > "$TMP_FILE"
sudo cp "$TMP_FILE" "$PG_HBA"
rm -f "$TMP_FILE"
sudo systemctl restart postgresql
fi
echo "PostgreSQL setup complete"