-
Notifications
You must be signed in to change notification settings - Fork 10
Description
i've been playing around with creating a 66 service for PostgreSQL, and at the moment, i can't seem to do any better than merely using the existing runit run script:
[main]
@type = classic
@version = 0.0.1
@description = "PostgreSQL daemon"
@user = ( root )
[start]
@build = custom
@shebang = "/bin/sh"
@execute = (
. /etc/default/postgresql
: ${PGDATA:="$PGROOT/data"}
if [ "$PGROOT" != "/var/lib/postgresql" ]; then
echo "Creating symlink /var/lib/postgresql -> $PGROOT"
# Remove /var/lib/postgres if empty dir, but not if symlink
if [ ! -L /var/lib/postgres ] && [ -d /var/lib/postgres ]; then
rmdir /var/lib/postgres
fi
ln -sf "$PGROOT" /var/lib/postgresql
fi
if [ ! -d "$PGDATA" ]; then
echo "Initializing database in $PGDATA"
mkdir -p "$PGDATA"
chown -R postgres:postgres "$PGDATA"
chmod 0700 "$PGDATA"
su - postgres -m -c "/usr/bin/initdb $INITOPTS -D '$PGDATA'" >/dev/null
if [ -f /etc/postgresql/postgresql.conf ]; then
ln -sf /etc/postgresql/postgresql.conf "$PGDATA/postgresql.conf"
fi
fi
exec chpst -u postgres:postgres postgres -D "$PGDATA" $PGOPTS 2>&1
)
i'm assuming that the service should use /etc/default/postgresql, for compatibility with existing installations. But in terms of then creating an execline script, i haven't been able to work out:
-
how to derive
PGDATAfromPGROOTif the latter is 'sourced' viaexecl-envfile. Is this possible? -
whether a variable in an
[environment]section can refer to a variable defined previously. E.g. can one do:
pg_root=!/var/lib/postgresql
pg_data=${pg_root}/data
? The frontend docs don't say anything either way, and a search of this repo doesn't seem to show any such usage ....
Finally, assuming all this isn't ported to execline, do we make changes such as converting:
mkdir -p "$PGDATA"
chown -R postgres:postgres "$PGDATA"
chmod 0700 "$PGDATA"
to
execl-toc -X -d "$PGDATA" -u postgres -g postgres -m 0700
?