aports/main/postgresql-bdr/postgresql-bdr.initd
2016-02-11 22:51:17 +02:00

153 lines
3.8 KiB
Plaintext

#!/sbin/openrc-run
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql-server/files/postgresql.init-8.3,v 1.4 2008/09/28 22:53:02 caleb Exp $
# Modifications to support Alpine Linux pg-restore
extra_started_commands="reload"
extra_stopped_commands="setup"
depend() {
use net
after firewall
}
get_config() {
[ -f ${PGDATA%/}/postgresql.conf ] || return 1
eval echo $(sed -e 's:#.*::' ${PGDATA%/}/postgresql.conf | awk '$1 == "'$1'" { print ($2 == "=" ? $3 : $2) }')
}
checkconfig() {
configured_port=$(get_config port)
: ${configured_port:=${PGPORT:-5432}}
socket_path=$(get_config unix_socket_directories)
: ${socket_path:=/var/run/postgresql}
checkpath -d -m 0770 -o postgres:postgres ${socket_path}
if [ -n "$WAIT_FOR_START" ]; then
START_TIMEOUT=$WAIT_FOR_START
fi
[ -d "$PGDATA/base" ] && return 0
if [ -z "$AUTO_SETUP" ] ; then
eerror "Database not found at: $PGDATA"
eerror "Please make sure that PGDATA points to the right path."
eerror "You can run '/etc/init.d/postgresql setup' to setup a new database cluster."
return 1
fi
setup
}
start() {
checkconfig || return 1
ebegin "Starting PostgreSQL"
if [ -f "$PGDATA/postmaster.pid" ] ; then
rm -f "$PGDATA/postmaster.pid"
fi
local retval= x= extraenv=
for x in ${PG_EXTRA_ENV} ; do
extraenv="${extraenv} --env ${x}"
done
start-stop-daemon --start \
--user ${PGUSER:-postgres} \
--group ${PGGROUP:-postgres} \
--env "PGPORT=${configured_port}" \
${extraenv} \
--pidfile ${PGDATA}/postmaster.pid \
--wait 5000 \
--exec /usr/bin/pg_ctl \
-- \
start -s -w -t ${START_TIMEOUT:-10} \
-l ${PGDATA}/postmaster.log \
-D ${PGDATA} -o "$PGOPTS"
retval=$?
if [ $retval -ne 0 ] ; then
eerror "Check the log for a possible explanation of the above error."
eerror " ${PGDATA}/postmaster.log"
fi
eend $retval
}
stop() {
if [ -n "$WAIT_FOR_DISCONNECT" ]; then
NICE_TIMEOUT=$WAIT_FOR_DISCONNECT
fi
if [ -n "$WAIT_FOR_CLEANUP" ]; then
RUDE_QUIT=YES
RUDE_TIMEOUT=$WAIT_FOR_CLEANUP
fi
if [ -n "$WAIT_FOR_QUIT" ] && [ $WAIT_FOR_QUIT -ne 0 ]; then
FORCE_QUIT=YES
FORCE_TIMEOUT=$WAIT_FOR_QUIT
fi
local seconds=${NICE_TIMEOUT}
local retval
local retries=SIGTERM/${NICE_TIMEOUT}
if [ "${RUDE_QUIT}" != "NO" ] ; then
retries="${retries}/SIGINT/${RUDE_TIMEOUT}"
seconds=$(( $seconds + ${NICE_TIMEOUT} ))
fi
if [ "${FORCE_QUIT}" = "YES" ] ; then
retries="${retries}/SIGQUIT/${FORCE_TIMEOUT}"
seconds=$(( $seconds + ${FORCE_TIMEOUT} ))
fi
ebegin "Stopping PostgreSQL (this can take up to ${seconds} seconds)"
# Loops through nice, rude, and force quit in one go.
start-stop-daemon --stop \
--exec /usr/bin/postgres \
--retry ${retries} \
--progress \
--pidfile ${PGDATA}/postmaster.pid
eend
}
reload() {
ebegin "Reloading PostgreSQL configuration"
kill -HUP $(head -n1 ${PGDATA}/postmaster.pid)
eend $?
}
setup() {
ebegin "Creating a new PostgreSQL database cluster"
if [ -d "${PGDATA}/base" ] ; then
eend 1 "${PGDATA}/base already exists"
return
fi
mkdir -p "${PGDATA}" 2>/dev/null
# If the pg_hba.conf and friends exist, move them
local tmpdir="$( dirname "$PGDATA" )/tmp"
mkdir -p "${tmpdir}" >/dev/null
echo mv "${PGDATA}"/* "${tmpdir}"
mv "${PGDATA}"/* "${tmpdir}" 2>/dev/null
rm -rf "${PGDATA}"/* 2>/dev/null
chown -Rf postgres:postgres "${PGDATA}"
chmod 0700 "${PGDATA}"
cd "${PGDATA}" # to avoid the: could not change directory to "/root"
su -c "/usr/bin/initdb --pgdata ${PGDATA}" postgres
local res=$?
# move the pg_hba.conf and friends
mv $tmpdir/* "$PGDATA" 2>/dev/null
rm -rf $tmpdir 2>/dev/null
# Do not send a SIGHUP to postmaster; its not necessary for a new database
# and allows pg-restore to do a blind restore of an old database
eend $res
}