provisioning/taskservs/postgres/default/install-postgres.sh

109 lines
4.0 KiB
Bash
Raw Normal View History

#!/bin/bash
POSTGRES_VERSION=${POSTGRES_VERSION:-1.16}
POSTGRES_URL="apt https://github.com/postgres/postgres/releases"
POSTGRES_FILE=.
POSTGRES_ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')"
POSTGRES_OS="$(uname | tr '[:upper:]' '[:lower:]')"
POSTGRES_RUN_PATH=${POSTGRES_RUN_PATH:-/usr/bin/psql}
POSTGRES_SYSTEMCTL_MODE=enabled
POSTGRES_ETC_PATH=${POSTGRES_ETC_PATH:-/etc/postgresql}
POSTGRES_LIB_PATH=${POSTGRES_LIB_PATH:-/var/lib/postgresql}
POSTGRES_DATA_PATH=${POSTGRES_DATA_PATH:-/var/lib/postgresql/$(echo "$POSTGRES_VERSION" | cut -f2 -d".")/main}
POSTGRES_CONFIG_FILE=${POSTGRES_CONFIG_FILE=postgresql.conf}
POSTGRES_RUN_USER=${POSTGRES_RUN_USER:-postgres}
POSTGRES_RUN_GROUP=${POSTGRES_RUN_GROUP:-postgres}
POSTGRES_RUN_USER_HOME=${POSTGRES_RUN_USER_HOME:-/var/lib/postgresql}
POSTGRES_PKG_NAME=postgresql
[ -r "global.sh" ] && . ./global.sh
[ -r "env-postgres" ] && . ./env-postgres
CMD_TSKSRVC=${1:-install}
ORG="$PWD"
export LC_CTYPE=C.UTF-8
export LANG=C.UTF-8
_init() {
#[ -z "$POSTGRES_VERSION" ] || [ -z "$POSTGRES_ARCH" ] || [ -z "$POSTGRES_URL" ] || [ -z "$POSTGRES_FILE" ] && exit 1
[ -z "$POSTGRES_VERSION" ] && exit 1
[ -x "$POSTGRES_RUN_PATH" ] && curr_vers=$(${POSTGRES_RUN_PATH} -V | awk '{print $3}')
if [ "$curr_vers" != "$POSTGRES_VERSION" ] || [ "$curr_vers" != "$POSTGRES_VERSION" ]; then
#local codename=$(grep VERSION_CODENAME /etc/os-release | cut -f2 -d"=" )
#if [ "$codename" == "bookworm" ] ; then
# su -c 'echo "APT::Get::Update::SourceListWarnings::NonFreeFirmware \"false\";" > /etc/apt/apt.conf.d/no-bookworm-firmware.conf'
#fi
# # Create the file repository configuration:
# sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# # Import the repository signing key:
# sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# # Update the package lists:
# sudo DEBIAN_FRONTEND=noninteractive apt-get update
# # Install the latest version of PostgreSQL.
# # If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
# if ! sudo DEBIAN_FRONTEND=noninteractive apt-get -y install postgresql ; then
# return 1
# fi
if ! sudo DEBIAN_FRONTEND=noninteractive apt-get -y install postgresql postgresql-client; then
return 1
fi
fi
return 0
}
_config_postgres() {
#[ ! -r "${POSTGRES_RUN_PATH}" ] && [ ! -r "postgres.service" ] && return
# cp postgres.service
# check /etc/system/multi-user.target.wants/postgresql.service
# started via /etc/rc2.d/S01postgresql
[ -d "$POSTGRES_ETC_PATH" ] && sudo chown -R "$POSTGRES_RUN_USER":"$POSTGRES_RUN_GROUP" "$POSTGRES_ETC_PATH"
[ -r "data.tar.gz" ] && sudo tar -C "$POSTGRES_LIB_PATH" -xf "data.tar.gz" && sudo chown -R "$POSTGRES_RUN_USER":"$POSTGRES_RUN_GROUP" "$POSTGRES_LIB_PATH"
#[ "${POSTGRES_SYSTEMCTL_MODE}" == "enabled" ] && systemctl enable "$POSTGRES_PKG_NAME" --now
#[ "${POSTGRES_SYSTEMCTL_MODE}" == "start" ] && systemctl start "$POSTGRES_PKG_NAME"
_start_postgres
}
_remove_postgres() {
sudo timeout -k 10 20 systemctl stop "$POSTGRES_PKG_NAME"
sudo timeout -k 10 20 systemctl disable "$POSTGRES_PKG_NAME"
sudo rm -f "${POSTGRES_RUN_PATH}"
}
_start_postgres() {
if [ "$POSTGRES_SYSTEMCTL_MODE" == "enabled" ] ; then
sudo timeout -k 10 20 systemctl enable "$POSTGRES_PKG_NAME" >/dev/null 2>&1
else
sudo timeout -k 10 20 systemctl disable "$POSTGRES_PKG_NAME" >/dev/null 2>&1
fi
sudo timeout -k 10 20 systemctl restart "$POSTGRES_PKG_NAME" >/dev/null 2>&1
}
_restart_postgres() {
sudo timeout -k 10 20 systemctl restart "$POSTGRES_PKG_NAME" >/dev/null 2>&1
}
if [ "$CMD_TSKSRVC" == "remove" ] ; then
_remove_postgres
exit
fi
if ! _init ; then
echo "error postgres install"
exit 1
fi
[ "$CMD_TSKSRVC" == "update" ] && _restart_postgres && exit 0
if ! _config_postgres ; then
echo "error postgres config"
exit 1
fi
if ! _start_postgres ; then
echo "error postgres start"
exit 1
fi
exit 0