Skip to content

PostgreSQL service #121

@flexibeast

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

?

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