mirror of
https://github.com/coolsnowwolf/packages
synced 2025-01-09 09:07:30 +08:00
7c37753174
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>
93 lines
2.1 KiB
Bash
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}"
|
|
}
|