mirror of
https://github.com/joglomedia/LEMPer.git
synced 2026-04-03 03:08:27 +00:00
181 lines
7.3 KiB
Bash
Executable File
181 lines
7.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# PostgreSQL server installer
|
|
# Min. Requirement : GNU/Linux Ubuntu 18.04
|
|
# Last Build : 08/04/2023
|
|
# Author : MasEDI.Net (me@masedi.net)
|
|
# Since Version : 2.6.6
|
|
|
|
# Include helper functions.
|
|
if [[ "$(type -t run)" != "function" ]]; then
|
|
BASE_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )
|
|
# shellcheck disable=SC1091
|
|
. "${BASE_DIR}/utils.sh"
|
|
|
|
# Make sure only root can run this installer script.
|
|
requires_root "$@"
|
|
|
|
# Make sure only supported distribution can run this installer script.
|
|
preflight_system_check
|
|
fi
|
|
|
|
##
|
|
# Add PostgreSQL Repository.
|
|
##
|
|
function add_postgres_repo() {
|
|
local POSTGRES_VERSION=${POSTGRES_VERSION:-"15"}
|
|
local POSTGRES_REPO_KEY=${POSTGRES_REPO_KEY:-"ACCC4CF8"}
|
|
|
|
case ${DISTRIB_NAME} in
|
|
debian | ubuntu)
|
|
if [[ ! -f "/etc/apt/sources.list.d/postgres-${RELEASE_NAME}.list" ]]; then
|
|
echo "Adding PostgreSQL repository key..."
|
|
|
|
run bash -c "wget --quiet -O - https://www.postgresql.org/media/keys/${POSTGRES_REPO_KEY}.asc | apt-key add -"
|
|
|
|
echo "Adding PostgreSQL repository..."
|
|
|
|
run touch "/etc/apt/sources.list.d/postgres-${RELEASE_NAME}.list"
|
|
run bash -c "echo 'deb http://apt.postgresql.org/pub/repos/apt ${RELEASE_NAME}-pgdg main' > /etc/apt/sources.list.d/postgres-${RELEASE_NAME}.list"
|
|
run apt-get update -q -y
|
|
else
|
|
info "PostgreSQL ${POSTGRES_VERSION} repository already exists."
|
|
fi
|
|
;;
|
|
*)
|
|
error "Unable to add PostgreSQL repo, unsupported release: ${DISTRIB_NAME^} ${RELEASE_NAME^}."
|
|
echo "Sorry your system is not supported yet, installing from source may fix the issue."
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
##
|
|
# Install Postgres.
|
|
##
|
|
function init_postgres_install() {
|
|
if [[ "${AUTO_INSTALL}" == true ]]; then
|
|
if [[ "${INSTALL_POSTGRES}" == true ]]; then
|
|
local DO_INSTALL_POSTGRES="y"
|
|
else
|
|
local DO_INSTALL_POSTGRES="n"
|
|
fi
|
|
else
|
|
while [[ "${DO_INSTALL_POSTGRES}" != y* && "${DO_INSTALL_POSTGRES}" != n* ]]; do
|
|
read -rp "Do you want to install PostgreSQL server? [y/n]: " -i y -e DO_INSTALL_POSTGRES
|
|
done
|
|
fi
|
|
|
|
#export POSTGRES_USER=${POSTGRES_USER:-"postgres"}
|
|
export POSTGRES_USER="postgres"
|
|
export PSQL_USER=${LEMPER_USERNAME:-"lemper"}
|
|
export PSQL_PASS=${LEMPER_PASSWORD:-$(openssl rand -base64 64 | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)}
|
|
|
|
local POSTGRES_VERSION=${POSTGRES_VERSION:-"15"}
|
|
local POSTGRES_TEST_DB="${PSQL_USER}db"
|
|
#local PGDATA=${POSTGRES_PGDATA:-"/var/lib/postgresql/data"}
|
|
local POSTGRES_PKGS=()
|
|
|
|
# Do PostgreSQL server installation here...
|
|
if [[ ${DO_INSTALL_POSTGRES} == y* || ${DO_INSTALL_POSTGRES} == Y* ]]; then
|
|
# Add repository.
|
|
add_postgres_repo
|
|
|
|
echo "Installing PostgreSQL server..."
|
|
|
|
# Default PostgreSQL user
|
|
#if [[ -z $(getent passwd "${POSTGRES_USER}") ]]; then
|
|
# run groupadd -r "${POSTGRES_USER}" --gid=999 && \
|
|
# run useradd -r -g "${POSTGRES_USER}" --uid=999 --home-dir=/var/lib/postgresql --shell=/bin/bash "${POSTGRES_USER}" && \
|
|
# run mkdir -p /var/lib/postgresql && \
|
|
# run chown -hR "${POSTGRES_USER}":"${POSTGRES_USER}" /var/lib/postgresql
|
|
#fi
|
|
|
|
# Install Postgres
|
|
if [[ "${POSTGRES_VERSION}" == "latest" || "${POSTGRES_VERSION}" == "stable" ]]; then
|
|
POSTGRES_PKGS+=("postgresql" "postgresql-client" "postgresql-client-common" "postgresql-common")
|
|
else
|
|
POSTGRES_PKGS+=("postgresql-${POSTGRES_VERSION}" "postgresql-client-${POSTGRES_VERSION}" \
|
|
"postgresql-client-common" "postgresql-common")
|
|
fi
|
|
|
|
run apt-get install -q -y "${POSTGRES_PKGS[@]}"
|
|
|
|
#run mkdir -p /var/run/postgresql && \
|
|
#run chown -R "${POSTGRES_USER}":"${POSTGRES_USER}" /var/run/postgresql && \
|
|
#run chmod 2777 /var/run/postgresql
|
|
#run mkdir -p "${PGDATA}" && \
|
|
#run chown -R "${POSTGRES_USER}":"${POSTGRES_USER}" "${PGDATA}" && \
|
|
#run chmod 777 "${PGDATA}"
|
|
|
|
# Configure PostgreSQL installation.
|
|
if [[ "${DRYRUN}" == true ]]; then
|
|
info "PostgreSQL server installed in dry run mode."
|
|
else
|
|
if [[ -f "/lib/systemd/system/postgresql@${POSTGRES_VERSION}-main.service" ]]; then
|
|
# Trying to reload daemon.
|
|
run systemctl daemon-reload
|
|
|
|
# Enable PostgreSQL on startup.
|
|
run systemctl enable "postgresql@${POSTGRES_VERSION}-main.service"
|
|
|
|
# Restart PostgreSQL service daemon.
|
|
#run systemctl restart "postgresql@${POSTGRES_VERSION}-main.service"
|
|
fi
|
|
|
|
if [[ $(pgrep -c postgres) -gt 0 || -n $(command -v psql) ]]; then
|
|
success "PostgreSQL server installed successfully."
|
|
|
|
# Create default PostgreSQL role and database test.
|
|
# Skip from GitHub Action due to unknown database connection issue.
|
|
if [[ -n $(command -v psql) && "${SERVER_HOSTNAME}" != "gh-ci.lemper.cloud" ]]; then
|
|
echo "Creating PostgreSQL user '${PSQL_USER}' and database '${POSTGRES_TEST_DB}'."
|
|
|
|
run sudo -i -u "${POSTGRES_USER}" -- psql -v ON_ERROR_STOP=1 <<-PGSQL
|
|
CREATE ROLE ${PSQL_USER} LOGIN PASSWORD '${PSQL_PASS}';
|
|
CREATE DATABASE ${POSTGRES_TEST_DB};
|
|
GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_TEST_DB} TO ${PSQL_USER};
|
|
PGSQL
|
|
fi
|
|
|
|
# Restart Postgres
|
|
run systemctl restart "postgresql@${POSTGRES_VERSION}-main.service"
|
|
sleep 3
|
|
|
|
if [[ $(pgrep -c postgres) -gt 0 ]]; then
|
|
success "PostgreSQL server configured successfully."
|
|
else
|
|
# Server died? try to start it.
|
|
run systemctl start "postgresql@${POSTGRES_VERSION}-main.service"
|
|
|
|
if [[ $(pgrep -c postgres) -gt 0 ]]; then
|
|
success "PostgreSQL server configured successfully."
|
|
else
|
|
info "Something went wrong with PostgreSQL server configuration."
|
|
fi
|
|
fi
|
|
|
|
# Save config.
|
|
save_config -e "POSTGRES_USER=${POSTGRES_USER}\nPSQL_DB_USER=${PSQL_USER}\nPSQL_DB_PASS=${PSQL_PASS}\nPSQL_DB_TEST=${POSTGRES_TEST_DB}"
|
|
|
|
# Save log.
|
|
save_log -e "Postgres server credentials.\nPostgres default user: ${POSTGRES_USER}, Postgres DB Username: ${PSQL_USER}, Postgres DB Password: ${PSQL_PASS}, Postgres DB Test: ${POSTGRES_TEST_DB}\nSave this credential and use it to authenticate your PostgreSQL test database connection."
|
|
else
|
|
info "Something went wrong with PostgreSQL server installation."
|
|
fi
|
|
fi
|
|
else
|
|
info "PostgreSQL installation skipped."
|
|
fi
|
|
}
|
|
|
|
echo "[PostgreSQL Installation]"
|
|
|
|
# Start running things from a call at the end so if this script is executed
|
|
# after a partial download it doesn't do anything.
|
|
if [[ -n $(command -v postgres) && "${FORCE_INSTALL}" != true ]]; then
|
|
info "PostgreSQL server already exists, installation skipped."
|
|
else
|
|
init_postgres_install "$@"
|
|
fi
|