mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-05 05:17:07 +02:00
153 lines
3.8 KiB
Plaintext
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
|
|
}
|
|
|