summaryrefslogtreecommitdiffstats
path: root/postgresql-setup.in
diff options
context:
space:
mode:
authorPavel Raiskup <praiskup@redhat.com>2016-07-22 08:20:28 +0200
committerPavel Raiskup <praiskup@redhat.com>2016-07-22 08:20:28 +0200
commit3fcfb0e1f4cf535ce3356ecef32a21a9e9fc27b5 (patch)
tree21edbc3325b8df4933e943d257e685862ff890ae /postgresql-setup.in
parent300dc14017f27bc2ea79c0bb01a627d84d7790f6 (diff)
downloadpostgresql-setup-master.tar.gz
postgresql-setup-master.tar.xz
postgresql-setup-master.zip
Move the repo to github.HEADmaster
Diffstat (limited to 'postgresql-setup.in')
-rw-r--r--postgresql-setup.in826
1 files changed, 0 insertions, 826 deletions
diff --git a/postgresql-setup.in b/postgresql-setup.in
deleted file mode 100644
index ba9def2..0000000
--- a/postgresql-setup.in
+++ /dev/null
@@ -1,826 +0,0 @@
-#!/bin/bash
-#
-# postgresql-setup - Initialization and upgrade operations for PostgreSQL
-
-test -z "$PATH" && export PATH="/sbin:/usr/sbin:/bin:/usr/bin"
-
-test x"$PGSETUP_DEBUG" != x && set -x && PS4='${LINENO}: '
-
-# Directory containing the postmaster executable
-PGENGINE=@bindir@
-
-# Distribution README file
-README_DIST=@README_DIST@
-
-# Home directory of postgres user
-POSTGRES_HOMEDIR=@POSTGRES_HOMEDIR@
-
-# Convenient tool-aliases
-SU_POSTGRES="@SU_POSTGRES@"
-
-# The where PostgreSQL server listens by default
-PGPORT_DEF=5432
-
-. "@rawpkgdatadir@/library.sh"
-
-@SCL_SOURCE@
-
-# We upgrade by default from system's default PostgreSQL installation
-option_upgradefrom="@NAME_DEFAULT_PREV_SERVICE@"
-
-srvsuff=
-test 0 -eq @WANT_SYSVINIT@ && srvsuff=".service"
-
-USAGE_STRING=$"\
-Usage: $0 MODE_OPTION [--unit=UNIT_NAME] [OPTION...]
-
-Script is aimed to help sysadmin with basic database cluster administration.
-Usually, \"@NAME_BINARYBASE@-setup --initdb\" and \"@NAME_BINARYBASE@-setup --upgrade\" is
-enough, however there are other options described below.
-
-For more info and howto/when use this script please look at the documentation
-file $README_DIST.
-
-Available operation mode:
- --initdb Initialize new PostgreSQL database cluster. This is usually the
- first action you perform after PostgreSQL server installation.
- --upgrade Upgrade database cluster for new major version of PostgreSQL
- server. See the --upgrade-from option for more info.
-
-Options:
- --unit=UNIT_NAME The UNIT_NAME is used to select proper unit
- configuration (unit == service or initscript name
- on non-systemd systems). For example, if you want
- to work with unit called
- 'postgresql@com_example.service', you should use
- 'postgresql@com_example' (without trailing .service
- string). When no UNIT_NAME is explicitly passed,
- the 'postgresql' string is used by default.
- --port=PORT port where the initialized server will listen for
- connections"
-
-test 0 -eq @WANT_SYSVINIT@ && \
-USAGE_STRING+="
- --datadir=PATH Specify absolute path to DB data directory, only
- use with --new-systemd-unit.
- --new-systemd-unit Pre-generate system'd configuration in drop-in
- directory if the unit is not yet configured,
- requires non-default --unit specified and explicit
- --datadir and --port."
-
-USAGE_STRING+="
- --upgrade-from-unit=UNIT Select proper unit name to upgrade from. This
- has similar semantics as --unit option.
- --upgrade-ids Print list of available IDs of upgrade scenarios to
- standard output.
- --upgrade-from=ID Specify id \"old\" postgresql stack to upgrade
- from. List of available IDs can be listed by
- --upgrade-ids. Default is '$option_upgradefrom'.
-
-Other options:
- --help show this help
- --version show version of this package
- --debug show basic debugging information
-
-Environment:
- PGSETUP_INITDB_OPTIONS Options carried by this variable are passed to
- subsequent call of \`initdb\` binary (see man
- initdb(1)). This variable is used also during
- 'upgrade' mode because the new cluster is actually
- re-initialized from the old one.
- PGSETUP_PGUPGRADE_OPTIONS Options in this variable are passed next to the
- subsequent call of \`pg_upgrade\`. For more info
- about possible options please look at man
- pg_upgrade(1).
- PGSETUP_DEBUG Set to '1' if you want to see very verbose shell
- debugging output."
-
-
-print_version()
-{
- echo "@NAME_BINARYBASE@-setup @VERSION@"
- echo $"Built against PostgreSQL version @PGVERSION@."
-}
-
-
-check_not_initialized()
-{
- if test -f "$pgdata/PG_VERSION"; then
- error $"Data directory $pgdata is not empty!"
- return 1
- fi
- return 0
-}
-
-
-# code shared between initdb and upgrade actions
-perform_initdb()
-{
- if [ ! -e "$pgdata" ]; then
- mkdir "$pgdata" || return 1
- chown postgres:postgres "$pgdata"
- chmod go-rwx "$pgdata"
- fi
-
- # Clean up SELinux tagging for pgdata
- [ -x /sbin/restorecon ] && /sbin/restorecon "$pgdata"
-
- # Create the initdb log file if needed
- if [ ! -e "$initdb_log" -a ! -h "$initdb_log" ]; then
- touch "$initdb_log" || return 1
- chown postgres:postgres "$initdb_log"
- chmod go-rwx "$initdb_log"
- [ -x /sbin/restorecon ] && /sbin/restorecon "$initdb_log"
- fi
-
- # Initialize the database
- initdbcmd="@SCL_SOURCE@"
- initdbcmd+=" $PGENGINE/initdb --pgdata='$pgdata' --auth='ident'"
- initdbcmd+=" $PGSETUP_INITDB_OPTIONS"
-
- $SU_POSTGRES -c "$initdbcmd" >> "$initdb_log" 2>&1 < /dev/null
-
- # Create directory for postmaster log files
- mkdir "$pgdata/pg_log"
- chown postgres:postgres "$pgdata/pg_log"
- chmod go-rwx "$pgdata/pg_log"
- [ -x /sbin/restorecon ] && /sbin/restorecon "$pgdata/pg_log"
-
- # This if-fork is just to not unnecessarily overwrite what upstream
- # generates by initdb (upstream implicitly uses PGPORT_DEF).
- if test "$pgport" != "$PGPORT_DEF"; then
- local pgconf="$pgdata/postgresql.conf"
- sed -i "s|^[[:space:]#]*port[[:space:]]=[^#]*|port = $pgport |g" \
- "$pgconf" \
- && grep "^port = " "$pgconf" >/dev/null
-
- if test $? -ne 0; then
- error "can not change port in $pgdata/postgresql.conf"
- return 1
- fi
- fi
-
- test -f "$pgdata/PG_VERSION"
-}
-
-
-initdb()
-{
- port_info=
- test "$pgport" != "$PGPORT_DEF" \
- && port_info=$", listening on port '$pgport'"
-
- info $"Initializing database in '$pgdata'$port_info"
- if check_not_initialized && perform_initdb; then
- info $"Initialized, logs are in ${initdb_log}"
- cleanup_dropin=
- else
- error $"Initializing database failed, possibly see $initdb_log"
- script_result=1
- fi
-}
-
-
-old_data_in_use()
-{
- local pidfile="$pgdataold/postmaster.pid"
- test -f "$pidfile" || return 1
- error $"The pidfile '$pidfile' exists. Verify that there is no postmaster"
- error_q $"running the $pgdataold directory."
-}
-
-
-upgrade()
-{
- local inplace=false
- test "$pgdata" = "$upgradefrom_data" && inplace=true
-
- debug "running inplace upgrade: $inplace"
-
- # must see previous version in PG_VERSION
- local old_data_version="`cat "$upgradefrom_data/PG_VERSION"`"
- if [ ! -f "$upgradefrom_data/PG_VERSION" -o \
- x"$old_data_version" != x"$upgradefrom_major" ]
- then
- error $"Cannot upgrade because the database in $upgradefrom_data is of"
- error_q $"version $old_data_version but it should be $upgradefrom_major"
- exit 1
- fi
- if [ ! -x "$upgradefrom_engine/postgres" ]; then
- error $"Please install the $upgradefrom_package package."
- exit 5
- fi
-
- # Set up log file for pg_upgrade
- rm -f "$upgrade_log"
- touch "$upgrade_log" || die "can't write into $upgrade_log file"
-
- chown postgres:postgres "$upgrade_log"
- chmod go-rwx "$upgrade_log"
- [ -x /sbin/restorecon ] && /sbin/restorecon "$upgrade_log"
-
- # Move old DB to pgdataold
-
- if $inplace; then
- pgdataold="${pgdata}-old"
- rm -rf "$pgdataold"
- mv "$pgdata" "$pgdataold" || exit 1
- else
- pgdataold="$upgradefrom_data"
- fi
-
- # Create configuration file for upgrade process
- HBA_CONF_BACKUP="$pgdataold/pg_hba.conf.@NAME_BINARYBASE@-setup.`date +%s`"
- HBA_CONF_BACKUP_EXISTS=0
-
- if [ ! -f $HBA_CONF_BACKUP ]; then
- mv "$pgdataold/pg_hba.conf" "$HBA_CONF_BACKUP"
- HBA_CONF_BACKUP_EXISTS=1
-
- # For fluent upgrade 'postgres' user should be able to connect
- # to any database without password. Temporarily, no other type
- # of connection is needed.
- echo "local all postgres ident" > "$pgdataold/pg_hba.conf"
- fi
-
- info $"Upgrading database."
-
- scls_upgrade_hacks=
- test -n "$upgradefrom_scls" && {
- debug "scls [$upgradefrom_scls] will be enabled"
- scls_upgrade_hacks="source scl_source enable $upgradefrom_scls ;"
- }
-
- test -n "$upgradefrom_redhat_sockets_hack" && {
- debug "upgrading from redhat server"
- socket_hacks="export REDHAT_PGUPGRADE_FROM_RHEL=yes ;"
- }
-
- test -n "$upgradefrom_pghost_override" && {
- pghost_override="PGHOST='$upgradefrom_pghost_override'"
- }
-
- local failure_cleanup=true
- if old_data_in_use; then
- script_result=1
- # Cleanup makes sense once perform_initdb gets called.
- failure_cleanup=false
- elif ! check_not_initialized; then
- # Don't try to re-init initialized data directory and also do not
- # remove it after this unsuccessful upgrade.
- script_result=1
- failure_cleanup=false
- elif perform_initdb; then
- $inplace && link_option=--link
-
- # After creating the empty new-format database, do the upgrade
- run_cmd_as_dbadmin "\
- $scls_upgrade_hacks \
- $socket_hacks \
- $pghost_override \
- $PGENGINE/pg_upgrade \
- '--old-bindir=$upgradefrom_engine' \
- '--new-bindir=$PGENGINE' \
- '--old-datadir=$pgdataold' \
- '--new-datadir=$pgdata' \
- $link_option \
- '--old-port=$PGPORT' '--new-port=$PGPORT' \
- @PG_UPGRADE_BIN_USER_OPT@=postgres \
- $PGSETUP_PGUPGRADE_OPTIONS" \
- "$upgrade_log" "$upgrade_log"
- if [ $? -ne 0 ]; then
- # pg_upgrade failed
- error $"pg_upgrade tool failed"
- script_result=1
- fi
- else
- error $"initdb failed"
- script_result=1
- fi
-
- # Move back the backed-up pg_hba.conf regardless of the script_result.
- if [ x$HBA_CONF_BACKUP_EXISTS = x1 ]; then
- mv -f "$HBA_CONF_BACKUP" "$pgdataold/pg_hba.conf"
- fi
-
- if [ $script_result -eq 0 ]; then
- info $"Upgraded OK."
- warn $"The configuration files were replaced by default configuration."
- warn $"The previous configuration and data are stored in folder"
- warn $pgdataold.
- else
- # Clean up after failure.
- $failure_cleanup && rm -rf "$pgdata"
- $inplace && mv "$pgdataold" "$pgdata"
- error $"Upgrade failed."
- fi
- info $"See $upgrade_log for details."
-}
-
-
-generate_systemd_dropin()
-{
- local service="$1"
- local dropindir="@systemduserunitsdir@/$service.service.d"
- local dropin="$dropindir/30-@NAME_BINARYBASE@-setup.conf"
-
- test -e "$dropindir" \
- && die "The systemd drop-in directory '$dropindir' exists already"
-
- mkdir -p "$dropindir" \
- || die "Can not create '$dropindir'"
-
- cleanup_dropin="rm -rf \"$dropindir\""
-
- cat <<EOF > "$dropin" || die "Can not write to '$dropin'"
-[Service]
-Environment=PGDATA=$pgdata
-EOF
-
- reload_systemd="systemctl daemon-reload"
- $reload_systemd || die $"Can not perform '$reload_systemd'"
-
- info $"The '$option_service' configured in '$dropindir' directory"
-}
-
-
-check_daemon_reload()
-{
- local nr_option=NeedDaemonReload
-
- test @WANT_SYSVINIT@ = 1 && return 0
-
- local nr_out="`systemctl show -p $nr_option $option_service.service 2>/dev/null`"
- if [[ "$nr_out" != "$nr_option=no" ]]; then
- error $"Note that systemd configuration for '$option_service' changed."
- error_q $"You need to perform 'systemctl daemon-reload' otherwise the"
- error_q $"results of this script can be inadequate."
- exit 1
- fi
-}
-
-
-handle_service_env()
-{
- local service="$1"
-
- local systemd_env="$(systemctl show -p Environment "${service}.service")" \
- || { return; }
-
- for env_var in `echo "$systemd_env" | sed 's/^Environment=//'`; do
- # If one variable name is defined multiple times the last definition wins.
- case "$env_var" in
- PGDATA=*)
- unit_pgdata="${env_var##PGDATA=}"
- debug "unit's datadir: '$unit_pgdata'"
- ;;
- PGPORT=*)
- unit_pgport="${env_var##PGPORT=}"
- debug "unit's pgport: $unit_pgport"
- ;;
- esac
- done
-}
-
-
-handle_envfile()
-{
- local file="$1"
-
- debug "trying to read '$file' env file"
- if test ! -r "$file"; then
- if test @WANT_SYSVINIT@ = 1; then
- return
- fi
- error "Can not read EnvironmentFile '$file' specified"
- error_q "in ${service}.service"
- fi
-
- # Note that the env file parser in systemd does not perform exactly the
- # same job.
- unset PGPORT PGDATA
- . "$file"
- envfile_pgdata="$PGDATA"
- envfile_pgport="$PGPORT"
- unset PGPORT PGDATA
-}
-
-
-handle_service_envfiles()
-{
- local mode="$1"
- local service="$2"
-
- local envfiles="$(systemctl show -p EnvironmentFiles "${service}.service")"\
- || return
-
- test -z "$envfiles" && return
-
- envfiles=$(echo $envfiles | \
- sed -e 's/^EnvironmentFile=//' \
- -e 's| ([^)]*)$||'
- )
-
- # Read the file names line-by-line (spaces may be inside)
- while read line; do
- handle_envfile "$line"
- done <<<"$envfiles"
-}
-
-
-handle_pgconf()
-{
- local datadir="$1"
- local conffile="$datadir/postgresql.conf"
-
- debug "postgresql.conf: $conffile"
-
- test -r "$conffile" || {
- error "config file $conffile is not readable or does not exist"
- die "Old cluster in '$data' does not seem to be initialized"
- }
-
- local sp='[[:space:]]'
- local sed_expr="s/^$sp*port$sp*=$sp\([0-9]\+\).*/\1/p"
-
- rv=0
- conf_pgport=`sed -n "$sed_expr" $conffile | tail -1` || rv=1
- test -n "$conf_pgport" && debug "postgresql.conf pgport: $conf_pgport"
- return $rv
-}
-
-
-service_configuration()
-{
- local data=
- local port=
- local unit_pgport=
- local unit_pgdata=
- local envfile_pgport=
- local envfile_pgdata=
-
- # 'mode' is 'initdb' or 'upgrade'. Basically, if called with mode=initdb, we
- # parse configuration of the current (maybe already configured) service.
- # When run with mode=upgrade, we try to parse the configuration of the old
- # PostgreSQL configuration that we try to upgrade from.
-
- local mode="$1" datavar="$2" portvar="$3" service="$4"
-
- debug "running service_configuration() for $service, mode: $mode"
-
- if test "@WANT_SYSVINIT@" = 1; then
- # Sysvinit has the default PGDATA (for default unit name only)
- # configured directly in the initscript, so no additional configuration
- # must exist. Set the default value of pgdata here to match whats in
- # initscript for the cases when no additional configuration file exists.
- # This is done to avoid parsing of whole initscript (for the real value)
- # and mainly to not fail in the logic following 'service_configuration'
- # call, where we usually want to error that pgdata is not defined..
- # Don't set the default pgdata for upgrade case, however, as we must
- # upgrade only from already properly configured & working stack (missing
- # pgdata here is a good reason to die later).
- test initdb = "$mode" && test "$service" = "@NAME_SERVICE@" \
- && set_var "$datavar" "@PGDATADIR@"
- handle_envfile "@initscriptsconfdir@/$service"
- else
- # We ship two service files, @NAME_SERVICE@.service and
- # @NAME_SERVICE@@.service. The former has PGDATA set by default
- # similarly to sysvinit case.
- handle_service_env "$service"
- handle_service_envfiles "$option_mode" "$service"
- fi
-
- # EnvironmentFile beats Environment configuration in systemd. In sysvinit
- # there is no "unit_pgdata". So make sure the envfile_gpdata is used later
- # than unit_pgdata.
- test -n "$unit_pgdata" && set_var "$datavar" "$unit_pgdata"
- test -n "$envfile_pgdata" && set_var "$datavar" "$envfile_pgdata"
-
- # skip for the first run
- test initdb = "$mode" && return
-
- set_var data "\$$datavar"
- handle_pgconf "$data"
-
- test -n "$conf_pgport" && set_var "$portvar" "$conf_pgport"
- test -n "$unit_pgport" && set_var "$portvar" "$unit_pgport"
- test -n "$envfile_pgport" && set_var "$portvar" "$envfile_pgport"
-}
-
-cleanup_dropin=
-exit_handler()
-{
- test -n "$cleanup_dropin" && {
- info "cleaning up created dropin directory"
- eval "$cleanup_dropin"
- }
-}
-
-trap exit_handler 0
-
-# <Compat>
-# Alow users to use the old style arguments like
-# 'postgresql-setup initdb $SERVICE_NAME'.
-case "$1" in initdb|upgrade)
- action="--$1"
- shift
-
- warn "using obsoleted argument syntax, try --help"
- old_long_args="help,usage,version,debug"
- oldargs=`getopt -o "" -l "$old_long_args" -n "old-options" -- "$@"` \
- || die "can't parse old arguments"
- eval set -- "$oldargs"
- additional_opts=
- while true; do
- case "$1" in
- --version|--help|--usage|--debug)
- additional_opts="$additional_opts $1"
- shift
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- service="@NAME_SERVICE@"
- if test -n "$1"; then
- service=$1
- shift
- fi
-
- set -- $additional_opts "$action" --unit "$service" "$@"
- warn "arguments transformed to: ${0##*/} $*"
-esac
-# </Compat>
-
-
-# postgresql-setup arguments are parsed into those variables
-option_mode=none
-option_service="@NAME_SERVICE@"
-option_port=
-option_pgdata=
-option_debug=0
-option_upgradefrom_unit=
-
-# Content of EnvironmentFile= files fills those:
-envfile_pgdata=
-envfile_pgport=
-
-# Configuration from (/etc/systemd/system/$option_service.service) fills those
-# variables.
-unit_pgdata=
-unit_pgport=
-
-# Configuration from postgresql.conf:
-conf_pgport=
-
-# Key variables. Try to fill them by postgresql.conf, Environment= statement in
-# service file or EnvironmentFile= content (the later mentioned has more
-# priority).
-pgdata=default
-pgport=default
-
-## PARSE SCRIPT ARGUMENTS ##
-
-short_opts=""
-long_opts="\
-initdb,upgrade,\
-new-systemd-unit,upgrade-ids,\
-unit:,service:,port:,datadir:,upgrade-from:,upgrade-from-unit:,\
-debug,\
-version,help,usage"
-
-args=`getopt -o "$short_opts" -l "$long_opts" -n "@NAME_BINARYBASE@-setup" -- "$@"` \
- || die "can't parse arguments"
-eval set -- "$args"
-parse_fail=0
-while true; do
- case "$1" in
- --initdb|--upgrade)
- if test "$option_mode" != none; then
- error "bad argument $1, mode already specified: --$option_mode"
- parse_fail=1
- else
- option_mode=${1##--}
- fi
- shift
- ;;
-
- --unit|--service)
- option_service=$2
- shift 2
- ;;
-
- --port)
- option_port=$2
- shift 2
- ;;
-
- --new-systemd-unit)
- option_systemd_config=yes
- shift
- ;;
-
- --datadir)
- option_pgdata=$2
- shift 2
- ;;
-
- --debug)
- option_debug=1
- shift
- ;;
-
- --help|--usage)
- echo "$USAGE_STRING"
- exit 0
- ;;
-
- --upgrade-from)
- option_upgradefrom="$2"
- shift 2
- ;;
-
- --upgrade-from-unit)
- option_upgradefrom_unit="$2"
- shift 2
- ;;
-
- --upgrade-ids)
- parse_upgrade_setup help
- exit 0
- ;;
-
- --version)
- print_version
- exit 0
- ;;
-
- --)
- shift
- break
- ;;
-
- *)
- die "author's fault: option $1 not handled"
- break
- ;;
- esac
-done
-
-test $parse_fail -ne 0 && die "can't parse arguments"
-
-test "$option_mode" = none \
- && die "no mode specified, use --initdb or --upgrade, or --help"
-
-if ! parse_upgrade_setup config "$option_upgradefrom"; then
- if test upgrade = "$option_mode"; then
- die $"bad --upgrade-from parameter '$option_upgradefrom'," \
- $"try --upgrade-ids"
- fi
-fi
-
-## GATHER THE SETUP FIRST ##
-
-initdb_log="$POSTGRES_HOMEDIR/initdb_${option_service}.log"
-upgrade_log="$POSTGRES_HOMEDIR/upgrade_${option_service}.log"
-
-debug "mode used: $option_mode"
-debug "service name: $option_service"
-
-root_prereq
-
-# load service's pgdata
-service_configuration initdb pgdata UNUSED "$option_service"
-
-# Check that nothing breaks --new-systemd-unit
-if test "$option_systemd_config" = yes; then
- if test "$option_service" = "@NAME_SERVICE@"; then
- die $"Default unit '@NAME_SERVICE@.service' should not need --new-systemd-unit"
- elif test "$pgdata" != default; then
- die $"Option --new-systemd-unit failed, is '$option_service.service'"\
- $"already configured to '$pgdata'?"
- elif test -z "$option_pgdata"; then
- die $"Option --new-systemd-unit requires --datadir"
- fi
-
- # pgdata == default && option_pgdata is set
- pgdata="$option_pgdata"
-
-elif test -n "$option_pgdata"; then
- warn $"--datadir option is ignored, either use --new-systemd-unit"
- warn_q $"option, or configure the systemd unit manually."
-fi
-
-test "$pgdata" = default \
- && die $"no db datadir (PGDATA) configured for '$option_service$srvsuff' unit"
-
-[[ "$pgdata" =~ ^/.* ]] \
- || die $"the PostgreSQL datadir not absolute path: '$pgdata', try --debug"
-
-test "$option_systemd_config" = yes \
- && generate_systemd_dropin "$option_service"
-
-## GATHER DATA FROM INITIALIZED DATADIR ##
-
-test -n "$option_port" && pgport=$option_port
-
-if test upgrade = "$option_mode"; then
- upgradefrom_data="$upgradefrom_data_default"
-
- if test -z "$option_upgradefrom_unit"; then
- if test "@NAME_DEFAULT_PREV_SERVICE@" = "@NAME_SERVICE@"; then
- # Fedora usecase -> upgrade while keeping the same name of
- # service/unit.
- option_upgradefrom_unit=$option_service
- else
- # PGRPMs/RHSCL usecase -> we upgrade from one service/unit name to
- # a different one, e.g. from postgresql92 to postgresql93, or from
- # postgresql (system version) to postgresql94 (scl).
- option_upgradefrom_unit=$upgradefrom_id
-
- # Try to predict situations: postgresql93@second -> postgresql94@second
- if [[ "$option_service" =~ ^@NAME_SERVICE@@(.*)$ ]]; then
- option_upgradefrom_unit="$upgradefrom_id@${BASH_REMATCH[1]}"
- fi
- fi
- fi
-
- test "$option_service" = "$option_upgradefrom_unit" \
- || info "upgrading from '$option_upgradefrom_unit$srvsuff'" \
- "to '$option_service$srvsuff'"
-
- service_configuration upgrade upgradefrom_data pgport \
- "$option_upgradefrom_unit"
- test -n "$option_port" -a "$option_port" != "$pgport" \
- && warn "Old pgport $pgport has bigger priority than --pgport value."
-fi
-
-# We expect that for upgrade - the previous stack was in working state (thus
-# running on the default port).
-test "$option_mode" = upgrade -a "$pgport" = default \
- && pgport=$PGPORT_DEF
-
-# This is mostly for 'initdb'. We assume that the default port is $PGPORT_DEF
-# if not set explicitly for default service name 'postgresql'.
-if test "$pgport" = default -a "$option_service" = "@NAME_SERVICE@"; then
- debug $"Using the default port '$PGPORT_DEF'"
- pgport=$PGPORT_DEF
-fi
-
-if test "$pgport" = default; then
- # initdb case.. Note that this may be called by initscripts. If this gets
- # called by legacy script, we can't help too much because systemd does not
- # allow passing additional arguments to 'service XX initdb' command.
- die $"For non-default unit names you must specify port by --port option."
-fi
-
-[[ "$option_port" =~ ^[0-9]*$ ]] \
- || die $"port set to '$option_port', must be integer number"
-
-## LAST CHECK THE SETUP ##
-
-check_daemon_reload
-
-# These variables are read by underlying utilites, rather export them.
-export PGDATA=$pgdata
-export PGPORT=$pgport
-
-debug "final pgdata: $pgdata"
-debug "final pgport: $pgport"
-
-script_result=0
-
-$SU_POSTGRES -c 'test -w @POSTGRES_HOMEDIR@' || {
- # pg_upgrade binary needs to have write-able $PWD (and we use 'su -')
- error $"The @POSTGRES_HOMEDIR@ directory has wrong permissions."
- error_q $"Please make sure the directory is writable by postgres."
- exit 1
-}
-
-if @MOUNTPOINT@ -q "$pgdata" || @MOUNTPOINT@ -q "$(dirname "$pgdata")"; then
- warn $"Note that either your data directory '$pgdata' or"
- warn_q $"the parent directory '$(dirname "$pgdata")'"
- warn_q $"is a direct mountpoint. This is usually a bad idea and your"
- warn_q $"filesystem layout should ideally look like:"
- warn_q $"/ROOT_OWNED_MOUNTPOINT/POSTGRES_OWNED_DIRECTORY/DATADIR."
- warn_q $"See the upstream documentation for more info:"
- warn_q $"http://www.postgresql.org/docs/@PGMAJORVERSION@/static/creating-cluster.html"
-fi
-
-# See how we were called.
-case "$option_mode" in
- initdb)
- initdb
- ;;
- upgrade)
- upgrade
- ;;
- *)
- echo >&2 "$USAGE_STRING"
- exit 2
-esac
-
-exit $script_result