Skip to content

PostgreSQL service #121

Description

@flexibeast

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 PGDATA from PGROOT if the latter is 'sourced' via execl-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

?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions