coolsnowwolf-packages/libs/postgresql/files/postgresql.init
Daniel Golle 7c37753174 postgresql: improve init script
Use newly introduced procd_add_restart_mount_trigger to make sure
postmaster gets started only once PGDATA becomes available.
Relocate socket directory to /var/lib/postgresql to make it possible
to run postgresql inside a ujail.
Use signal for shutdown, so it works nicely with jail.
Allow multiple script in UCI 'config postgres-db' to be a list and
run them in order listed.
User more silent methods to check for db or role existence and make
it easy to create several databases owned by the same user by passing
the same credentials multiple times.
Remove disfunctional reload handler.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2022-11-08 14:59:08 +08:00

93 lines
2.1 KiB
Bash

#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2015 OpenWrt.org
START=50
PROG=/usr/bin/postmaster
USE_PROCD=1
fix_hosts() {
# make sure localhost (without a dot) is in /etc/hosts
grep -q 'localhost$' /etc/hosts || echo '127.0.0.1 localhost' >> /etc/hosts
}
fix_perms() {
# for whatever reason, /dev/null gets wrong perms
chmod a+w /dev/null
}
cleanup() {
if [ -f "$1/postmaster.pid" ]; then
rm "$1/postmaster.pid"
fi
}
start_service() {
. /lib/functions/postgresql.sh
config_load "postgresql"
config_get pgdata config PGDATA
config_get pgopts config PGOPTS
user_exists postgres 5432 || user_add postgres 5432
group_exists postgres 5432 || group_add postgres 5432
[ "$_BOOT" = "1" ] &&
[ "$(procd_get_mountpoints $pgdata)" ] && return 0
fix_perms
fix_hosts
if [ ! -e "${pgdata}/PG_VERSION" ]; then
pg_init_data ${pgdata}
[ $? -gt 0 ] && return 1
fi
cleanup "${pgdata}"
mkdir -m 0755 -p /var/run/postgresql
chmod 0750 /var/run/postgresql
chown postgres:postgres /var/run/postgresql
procd_open_instance postmaster
procd_set_param user postgres
procd_set_param command $PROG
procd_append_param command -D "${pgdata}"
procd_append_param command -k "/var/run/postgresql"
[ -n "${pgopts}" ] && procd_append_param command -o "${pgopts}"
procd_set_param respawn retry=60
procd_add_jail postgresql log
procd_add_jail_mount /usr/lib/postgresql /usr/share/postgresql
procd_add_jail_mount_rw /var/run/postgresql "${pgdata}"
procd_add_jail_mount_rw /dev/shm
procd_set_param stderr 1
procd_set_param stdout 1
procd_close_instance
procd_open_instance uci_dbinit
procd_set_param user postgres
procd_set_param command /lib/functions/postgresql.sh init "${pgdata}"
procd_set_param stdout 1
procd_set_param stderr 1
procd_close_instance
}
boot() {
_BOOT=1 start
}
service_triggers() {
config_load "postgresql"
config_get pgdata config PGDATA
procd_add_restart_mount_trigger "${pgdata}"
}
stop_service() {
procd_send_signal "postgresql" postmaster SIGTERM
}
status_service() {
config_load "postgresql"
config_get pgdata config PGDATA
/usr/bin/pg_ctl status -U postgres -D "${pgdata}"
}