diff options
author | Aaron W. Swenson <titanofold@gentoo.org> | 2011-03-19 20:37:42 -0400 |
---|---|---|
committer | Aaron W. Swenson <titanofold@gentoo.org> | 2011-03-19 20:37:42 -0400 |
commit | 858da0576419b108f058d3ed6eef46f3cc40999c (patch) | |
tree | 2a2fd1523e2a82f7bee4c57750a695d398aa672e | |
parent | Initial commit. README describes repository layout. (diff) | |
download | patches-858da0576419b108f058d3ed6eef46f3cc40999c.tar.gz patches-858da0576419b108f058d3ed6eef46f3cc40999c.tar.bz2 patches-858da0576419b108f058d3ed6eef46f3cc40999c.zip |
Initial commit of initscript and related conf file for 8.2.
-rw-r--r-- | postgresql.confd | 57 | ||||
-rw-r--r-- | postgresql.init | 173 |
2 files changed, 230 insertions, 0 deletions
diff --git a/postgresql.confd b/postgresql.confd new file mode 100644 index 0000000..e306c96 --- /dev/null +++ b/postgresql.confd @@ -0,0 +1,57 @@ +# Which port and socket to bind PostgreSQL +PGPORT="5432" + +# Allow *_TIMEOUT to run its course. +# Disable timeouts by changing to '-W' (capital W) +WAIT_FOR_START="-w" +WAIT_FOR_STOP="-w" + +# Ignore new connections and wait for clients to disconnect from server before +# shutting down. +# Set NICE_QUIT to "NO" to disable. +NICE_QUIT="YES" + +# Forecfully disconnect clients from server and shut down. This is performed +# after NICE_QUIT. Terminating a client results in a rollback of open +# transactions for that client. +# Set RUDE_QUIT to "NO" to disable. +RUDE_QUIT="YES" + +# If the server still fails to shutdown, you can force it to quit by setting +# this to yes and a recover-run will execute on the next startup. +# Set FORCE_QUIT to "YES" to enable. +FORCE_QUIT="NO" + +# Extra options to run postmaster with, e.g.: +# -N is the maximal number of client connections +# -B is the number of shared buffers and has to be at least 2x the value for -N +# Please read the man-page to postmaster for more options. Many of +# these options can be set directly in the configuration file. +#PGOPTS="-N 512 -B 1024" + +# Pass extra environment variables. If you have to export environment +# variables for the database process, this can be done here. +# Don't forget to escape quotes. +#PG_EXTRA_ENV="PGPASSFILE=\"/path/to/.pgpass\"" + +############################################################################## +# +# The following values should not be arbitrarily changed. +# emerge --config dev-db/postgresql-server:8.2 uses these values to +# determine where to create the data directory, where to place the +# configuration files and any additional options you'd like to pass to initdb. +# +# The init script also uses these variables to inform pg_ctl where to find +# the same data and configuration files. +# +############################################################################## + +# Location of configuration files +PGDATA="/etc/postgresql-8.2/" + +# Where the data directory is located/to be created +DATA_DIR="/var/lib/postgresql/8.2/data" + +# Additional options to pass to initdb. +# See 'man initdb' for available options. +#PG_INITDB_OPTS="--locale=en_US.UTF-8" diff --git a/postgresql.init b/postgresql.init new file mode 100644 index 0000000..d0ef87c --- /dev/null +++ b/postgresql.init @@ -0,0 +1,173 @@ +#!/sbin/runscript +# Copyright 1999-2010 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,v 1.1 2010/06/04 14:18:52 patrick Exp $ + +opts="${opts} reload" + +depend() { + use net + provide postgresql + provide postgresql-8.2 +} + +checkconfig() { + if [ ! -d $DATA_DIR ] ; then + eerror "Directory not found: $DATA_DIR" + eerror "Please make sure that DATA_DIR points to the right path." + eerror "You can run 'emerge --config dev-db/postgresql-server:8.2' to setup a new" + eerror "database cluster." + return 1 + elif [ ! -f ${PGDATA%/}/postgresql.conf ] ; then + eerror "File not found: ${PGDATA%/}/postgresql.conf" + eerror "You may need to run:" + eerror "cp ${DATA_DIR%/}/postgresql.conf ${PGDATA%/}/postgresql.conf" + return 1 + elif [ ! -f ${PGDATA%/}/pg_hba.conf ] ; then + eerror "File not found: ${PGDATA%/}/pg_hba.conf" + eerror "You may need to run:" + eerror "cp ${DATA_DIR%/}/pg_hba.conf ${PGDATA%/}/pg_hba.conf" + return 1 + elif [ ! -f ${PGDATA%/}/pg_ident.conf ] ; then + eerror "File not found: ${PGDATA%/}/pg_ident.conf" + eerror "You may need to run:" + eerror "cp ${DATA_DIR%/}/pg_ident.conf ${PGDATA%/}/pg_ident.conf" + return 1 + elif [ -e /var/run/postgresql/.s.PGSQL.${PGPORT} ] ; then + eerror "Socket conflict." + eerror "A server is already listening on:" + eerror "/var/run/postgresql/.s.PGSQL.${PGPORT}." + eerror "Change PGPORT to listen on a different socket." + return 1 + fi +} + +start() { + checkconfig || return 1 + + ebegin "Starting PostgreSQL" + + if [ -f ${DATA_DIR%/}/postmaster.pid ] ; then + rm -f ${DATA_DIR%/}/postmaster.pid + fi + + local retval + + su -l postgres \ + -c "env PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} \ + /usr/lib/postgresql-8.2/bin/pg_ctl \ + start ${WAIT_FOR_START} -s -D ${DATA_DIR} -o \ + '-D ${PGDATA} --data-directory=${DATA_DIR} --silent-mode=true ${PGOPTS}'" + retval=$? + + if [ $retval -ne 0 ] ; then + eend $retval + return $retval + fi + + # The following is to catch the case of an already running server + # in which pg_ctl doesn't know to which server it connected to and + # falsely reports the server as 'up' + if [ ! -f ${DATA_DIR}/postmaster.pid ] ; then + eerror "The PID file doesn't exist but pg_ctl reported a running server." + eerror "Please check whether there is another server running on the same port or read the log-file." + eend 1 + return 1 + fi + + eend $? +} + +stop() { + ebegin "Stopping PostgreSQL (this can take up to 90 seconds)" + + local retval + + if [ "${NICE_QUIT}" != "NO" ] ; then + su -l postgres \ + -c "env PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} \ + /usr/lib/postgresql-8.2/bin/pg_ctl \ + stop ${WAIT_FOR_STOP} -s -D ${DATA_DIR} -m smart" + retval=$? + + if [ $retval -eq 0 ] ; then + eend $retval + return $retval + fi + + ewarn "Shutting down the server gracefully failed." + ewarn "Probably because some clients did not disconnect within ${NICE_TIMEOUT} seconds." + else + ewarn "NICE_QUIT disabled." + ewarn "You really should have it enabled." + fi + + if [ "${RUDE_QUIT}" != "NO" ] ; then + ewarn "RUDE_QUIT enabled." + ewarn "Going to shutdown the server anyway." + + su -l postgres \ + -c "env PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} \ + /usr/lib/postgresql-8.2/bin/pg_ctl \ + stop ${WAIT_FOR_STOP} -s -D ${DATA_DIR} -m fast" + retval=$? + + if [ $retval -eq 0 ] ; then + eend $retval + return $retval + fi + + eerror "Failed to shutdown server." + else + ewarn "RUDE_QUIT disabled." + fi + + if [ "${FORCE_QUIT}" = "YES" ] ; then + ewarn "FORCE_QUIT enabled." + ewarn "Forcing server to shutdown." + ewarn "A recover-run will be executed on the next startup." + + su -l postgres \ + -c "env PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} \ + /usr/lib/postgresql-8.2/bin/pg_ctl \ + stop ${WAIT_FOR_STOP} -s -D ${DATA_DIR} -m immediate" + + retval=$? + + if [ $retval -eq 0 ] ; then + ewarn "Server forced down." + eend $retval + return $retval + fi + + eerror "Forced shutdown failed!!!" + eerror "Something is wrong with your system." + eerror "Please take care of it manually." + eerror "Unable to stop server." + eend $retval + return $retval + else + ewarn "FORCE_QUIT disabled." + eerror "Unable to shutdown server." + eend 1 + return 1 + fi +} + +reload() { + ebegin "Reloading PostgreSQL configuration" + su -l postgres \ + -c "env PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} \ + /usr/lib/postgresql-8.2/bin/pg_ctl \ + reload -s -D ${DATA_DIR}" + eend $? +} + +status() { + ebegin "Reloading PostgreSQL configuration" + su -l postgres \ + -c "env PGPORT=\"${PGPORT}\" ${PG_EXTRA_ENV} \ + /usr/lib/postgresql-8.2/bin/pg_ctl \ + status -D ${DATA_DIR}" + eend $? +} |