Last active
November 15, 2018 11:10
-
-
Save mche/08d0dc800c9e32cc92afc1dcbaec0470 to your computer and use it in GitHub Desktop.
Gentoo openrc postgresql init
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/sbin/openrc-run | |
# Copyright 1999-2017 Gentoo Foundation | |
# Distributed under the terms of the GNU General Public License v2 | |
# Comma-separated list of directories that contain a unix | |
# socket. Created and controlled by the related initscript. The | |
# directories created will be owned root:postgres with mode 1775. | |
# | |
# /run/postgresql is the default directory. | |
#~ PG_SOCKET_DIRECTORIES="/tmp" | |
PGUSER="guest" | |
# Which port and socket to bind PostgreSQL | |
PGPORT="5432" | |
# How long to wait for server to start in seconds | |
START_TIMEOUT=10 | |
# NICE_QUIT ignores new connections and wait for clients to disconnect from | |
# server before shutting down. NICE_TIMEOUT in seconds determines how long to | |
# wait for this to succeed. | |
NICE_TIMEOUT=60 | |
# Forecfully disconnect clients from server and shut down. This is performed | |
# after NICE_QUIT. Terminated client connections have their open transactions | |
# rolled back. | |
# Set RUDE_QUIT to "NO" to disable. RUDE_TIMEOUT in seconds. | |
RUDE_QUIT="YES" | |
RUDE_TIMEOUT=30 | |
# 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_TIMEOUT in seconds. | |
FORCE_QUIT="NO" | |
FORCE_TIMEOUT=2 | |
# 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" | |
# отключить TCP | |
PGOPTS=' -c listen_addresses="" ' | |
# 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:9.6' uses these values to | |
# determine where to create the data directory, where to place the | |
# configuration files, and any additional options to pass to initdb. | |
# | |
# The initscript also uses these variables to inform PostgreSQL where to find | |
# its data directory and configuration files. | |
# | |
############################################################################## | |
# Location of configuration files | |
PGDIR="/home/guest/postgresql" | |
# Where the data directory is located/to be created | |
DATA_DIR="${PGDIR}/data" | |
# Additional options to pass to initdb. | |
# See `man initdb' for available options. | |
##PG_INITDB_OPTS="--encoding=UTF8" | |
extra_commands="initdb" | |
extra_started_commands="reload promote" | |
PG_CTL="${PGDIR}/bin/pg_ctl" | |
description="PostgreSQL --- the world's most advanced open source database -- | |
${RC_SERVICE} is a wrapper around pg_ctl with additional administrative checks | |
and convenience" | |
get_config() { | |
[ -f "${DATA_DIR%/}/postgresql.conf" ] || return 1 | |
eval echo $(sed -e 's:#.*::' "${DATA_DIR%/}/postgresql.conf" \ | |
| awk '$1 == "'$1'" { print ($2 == "=" ? $3 : $2) }') | |
} | |
depend() { | |
use net | |
provide postgresql | |
if [ "$(get_config log_destination)" = "syslog" ]; then | |
use logger | |
fi | |
} | |
configured_port=$(get_config port) | |
: ${configured_port:=${PGPORT}} | |
checkconfig() { | |
# Check that DATA_DIR has been set | |
if [ -z "${DATA_DIR}" ] ; then | |
eerror "DATA_DIR not set" | |
#~ eerror "HINT: Perhaps you need to update /etc/conf.d/postgresql-9.6" | |
return 1 | |
fi | |
# Check that DATA_DIR exists | |
if [ ! -d "${DATA_DIR}" ] ; then | |
eerror "Directory not found: ${DATA_DIR}" | |
#~ eerror "HINT: Ensure that DATA_DIR points to the right path." | |
#~ eerror "HINT: Or perhaps you need to create the database cluster:" | |
#~ eerror " emerge --config dev-db/postgresql:9.6" | |
return 1 | |
fi | |
# Check for the existence of PostgreSQL's config files, and set the | |
# proper mode and ownership. | |
# Only three files should be checked as potentially other files | |
# may be in PGDATA that should not be touched. | |
local file | |
for file in postgresql pg_hba pg_ident ; do | |
file="${DATA_DIR%/}/${file}.conf" | |
if [ -f "${file}" ] ; then | |
checkpath -f -m 0600 -o $PGUSER:$PGUSER "${file}" | |
else | |
eerror "${file} not found" | |
#~ eerror "HINT: mv ${DATA_DIR%/}/*.conf ${PGDATA}" | |
return 1 | |
fi | |
done | |
# Set the proper permission for the socket paths and create it if | |
# it doesn't exist. | |
#~ set -f; IFS=',' | |
#~ local s | |
#~ for s in ${PG_SOCKET_DIRECTORIES}; do | |
#~ checkpath -d -m 1775 -o root:postgres "${s}" | |
#~ if [ -e "${s%/}/.s.PGSQL.${configured_port}" ] ; then | |
#~ eerror "Socket conflict." | |
#~ eerror "A server is already listening on:" | |
#~ eerror " ${s%/}/.s.PGSQL.${configured_port}" | |
#~ eerror "HINT: Change PGPORT to listen on a different socket." | |
#~ return 1 | |
#~ fi | |
#~ done | |
#~ set +f; unset IFS | |
} | |
start() { | |
checkconfig || return 1 | |
ebegin "Starting PostgreSQL" | |
rm -f "${DATA_DIR%/}/postmaster.pid" | |
# PGPORT=${configured_port} | |
su - $PGUSER -c " ${PG_CTL} start \ | |
-w -t ${START_TIMEOUT} -l ${DATA_DIR%/}/logfile -D ${DATA_DIR} -o '${PGOPTS}' " | |
local retval=$? | |
#~ if [ $retval -ne 0 ] ; then | |
#~ eerror "Check the log for a possible explanation of the above error." | |
#~ eerror "The log may be located at:" | |
#~ eerror " ${DATA_DIR%/}/postmaster.log" | |
#~ eerror "Or wherever you configured PostgreSQL 9.6 to log." | |
#~ fi | |
eend $retval | |
} | |
stop() { | |
local seconds=$(( ${NICE_TIMEOUT} + ${RUDE_TIMEOUT} + ${FORCE_TIMEOUT} )) | |
ebegin "Stopping PostgreSQL (this can take up to ${seconds} seconds)" | |
su - $PGUSER -c \ | |
"${PG_CTL} stop -t ${NICE_TIMEOUT} -s -D ${DATA_DIR} -m smart" | |
local retval=$? | |
if [ "${RUDE_QUIT}" != "NO" -a ${retval} -ne 0 ] ; then | |
einfo "Previous attempt failed. Trying RUDE_QUIT." | |
su - $PGUSER -c \ | |
"${PG_CTL} stop -t ${RUDE_TIMEOUT} -s -D ${DATA_DIR} -m fast" | |
retval=$? | |
fi | |
if [ "${FORCE_QUIT}" = "YES" -a ${retval} -ne 0 ] ; then | |
einfo "Previous step failed. Trying FORCE_QUIT." | |
ewarn "A recover-run might be executed on next startup." | |
su - $PGUSER -c \ | |
"${PG_CTL} stop -t ${FORCE_TIMEOUT} -s -D ${DATA_DIR} -m immediate" | |
retval=$? | |
fi | |
eend ${retval} | |
} | |
status() { | |
ebegin "Checking PostgreSQL status" | |
su - $PGUSER -c "${PG_CTL} status -D ${DATA_DIR}" | |
eend $? | |
} | |
description_reload="Simply sends the postgres process a SIGHUP signal, causing | |
it to reread its configuration files (postgresql.conf, pg_hba.conf, | |
etc.). This allows changing of configuration-file options that do not | |
require a complete restart to take effect." | |
reload() { | |
ebegin "Reloading PostgreSQL configuration" | |
su - $PGUSER -c "${PG_CTL} reload -s -D ${DATA_DIR}" | |
eend $? | |
} | |
description_promote="If the server is in standby, it is commanded to exit | |
recovery and begin read-write operations." | |
promote() { | |
ebegin "Promoting PostgreSQL" | |
su - $PGUSER -c "${PG_CTL} promote -s -D ${DATA_DIR}" | |
eend $? | |
} | |
#~ PostgreSQL library and include directories. However, if you want to | |
#~ control it yourself, define the environment variables POSTGRES_INCLUDE | |
#~ and POSTGRES_LIB, or define just POSTGRES_HOME. Note that if you have | |
#~ compiled PostgreSQL with SSL support, you must define the POSTGRES_LIB | |
#~ environment variable and add "-lssl" to it, like this: | |
# export POSTGRES_LIB="/usr/local/pgsql/lib -lssl" | |
initdb() { | |
ebegin "Initing PostgreSQL cluster on ${DATA_DIR}" | |
su - $PGUSER -c "mkdir -p ${DATA_DIR}; ${PGDIR}/bin/initdb -D ${DATA_DIR} ${PG_INITDB_OPTS}" | |
local retval=$? | |
if [ $retval -eq 0 ] ; then | |
su - $PGUSER -c " echo 'export POSTGRES_HOME=\"${PGDIR}\" > ${PGDIR}/env;' \ | |
echo 'export PATH=\"${PGDIR}/bin:$PATH\" ' >> ${PGDIR}/env; \ | |
echo 'export LD_LIBRARY_PATH=\"${PGDIR}/lib:$LD_LIBRARY_PATH\" ' >> ${PGDIR}/env; \ | |
echo 'export CPATH=\"${PGDIR}/include:$CPATH\" ' >> ${PGDIR}/env; \ | |
echo 'export MANPATH=\"${PGDIR}/share/man:$MANPATH\" ' >> ${PGDIR}/env; " | |
echo "You can add >> source ${PGDIR}/env << to user's <${PGUSER}> ~/.bashrc or ~/.bash_profile or similar file" | |
echo "to have it all set to your paths" | |
echo "<export POSTGRES_HOME=\"${PGDIR}\"; cpanm --reinstall DBD::Pg> " | |
fi | |
eend ${retval} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment