From 8820f3e4b26ccaf4c0ed3fa1e7952a88d7396903 Mon Sep 17 00:00:00 2001 From: Admire Nyakudya Date: Sat, 22 Apr 2023 11:27:50 +0200 Subject: [PATCH 1/2] fix running in kurbenetes --- Dockerfile | 2 +- scripts/docker-entrypoint.sh | 31 ++++--------------- scripts/env-data.sh | 59 ++++++++++++++++++++++++++++++------ 3 files changed, 56 insertions(+), 36 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7a620cf7..8ce79621 100644 --- a/Dockerfile +++ b/Dockerfile @@ -144,7 +144,7 @@ RUN chmod +x *.sh # Run any additional tasks here that are too tedious to put in # this dockerfile directly. RUN set -eux \ - && /scripts/setup.sh;rm /scripts/.pass_* + && /scripts/setup.sh;rm /home/postgresuser/.pass_* RUN echo 'figlet -t "Kartoza Docker PostGIS"' >> ~/.bashrc diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh index c34a2ea0..a912cf9b 100755 --- a/scripts/docker-entrypoint.sh +++ b/scripts/docker-entrypoint.sh @@ -19,25 +19,6 @@ figlet -t "Kartoza Docker PostGIS" # Gosu preparations if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then - USER_ID=${POSTGRES_UID:-1000} - GROUP_ID=${POSTGRES_GID:-1000} - USER_NAME=${USER:-postgresuser} - DB_GROUP_NAME=${GROUP_NAME:-postgresusers} - - export USER_NAME=${USER_NAME} - export DB_GROUP_NAME=${DB_GROUP_NAME} - - # Add group - if [ ! $(getent group "${DB_GROUP_NAME}") ]; then - groupadd -r "${DB_GROUP_NAME}" -g ${GROUP_ID} - fi - - # Add user to system - if id "${USER_NAME}" &>/dev/null; then - echo ' skipping user creation' - else - useradd -l -m -d /home/"${USER_NAME}"/ -u "${USER_ID}" --gid "${GROUP_ID}" -s /bin/bash -G "${DB_GROUP_NAME}" "${USER_NAME}" - fi if [[ "${REPLICATION}" =~ [Tt][Rr][Uu][Ee] ]] ; then echo "/home/"${USER_NAME}"/.pgpass" > /tmp/pg_subs.txt @@ -48,15 +29,15 @@ if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then fi -if [[ -f /scripts/.pass_20.txt ]]; then - USER_CREDENTIAL_PASS=$(cat /scripts/.pass_20.txt) - cp /scripts/.pass_20.txt /tmp/PGPASSWORD.txt +if [[ -f /home/"${USER_NAME}"//.pass_20.txt ]]; then + USER_CREDENTIAL_PASS=$(cat /home/"${USER_NAME}"//.pass_20.txt) + cp /home/"${USER_NAME}"//.pass_20.txt /tmp/PGPASSWORD.txt echo -e "[Entrypoint] GENERATED Postgres PASSWORD: \e[1;31m $USER_CREDENTIAL_PASS \033[0m" fi -if [[ -f /scripts/.pass_22.txt ]]; then - USER_CREDENTIAL_PASS=$(cat /scripts/.pass_22.txt) - cp /scripts/.pass_22.txt /tmp/REPLPASSWORD.txt +if [[ -f /home/"${USER_NAME}"//.pass_22.txt ]]; then + USER_CREDENTIAL_PASS=$(cat /home/"${USER_NAME}"//.pass_22.txt) + cp /home/"${USER_NAME}"//.pass_22.txt /tmp/REPLPASSWORD.txt echo -e "[Entrypoint] GENERATED Replication PASSWORD: \e[1;34m $USER_CREDENTIAL_PASS \033[0m" fi diff --git a/scripts/env-data.sh b/scripts/env-data.sh index b5ed5877..832dc717 100644 --- a/scripts/env-data.sh +++ b/scripts/env-data.sh @@ -1,4 +1,43 @@ #!/usr/bin/env bash + +if [ -z "${POSTGRES_UID}" ]; then + POSTGRES_UID=1000 +fi +if [ -z "${POSTGRES_GID}" ]; then + POSTGRES_GID=1000 +fi +if [ -z "${USER}" ]; then + USER=postgresuser +fi +if [ -z "${GROUP_NAME}" ]; then + GROUP_NAME=postgresusers +fi + +export USER_ID=${POSTGRES_UID} +export GROUP_ID=${POSTGRES_GID} +export USER_NAME=${USER} +export DB_GROUP_NAME=${GROUP_NAME} + +function create_local_user() { + local group_name="$1" + local group_id="$2" + local user_name="$3" + local user_id="$4" + + # Add group if not exists + if ! getent group "${group_name}" >/dev/null; then + groupadd -r "${group_name}" -g "${group_id}" + fi + + # Add user if not exists + if ! id "${user_name}" >/dev/null 2>&1; then + useradd -l -m -d "/home/${user_name}" -u "${user_id}" \ + --gid "${group_id}" -s /bin/bash -G "${group_name}" "${user_name}" + fi +} + +create_local_user "${DB_GROUP_NAME}" "${GROUP_ID}" "${USER_NAME}" "${USER_ID}" + POSTGRES_MAJOR_VERSION=$(cat /tmp/pg_version.txt) POSTGIS_MAJOR=$(cat /tmp/pg_major_version.txt) POSTGIS_MINOR_RELEASE=$(cat /tmp/pg_minor_version.txt) @@ -6,13 +45,13 @@ DEFAULT_DATADIR="/var/lib/postgresql/${POSTGRES_MAJOR_VERSION}/main" # Commented for documentation. You can specify the location of # pg_wal directory/volume using the following environment variable: # POSTGRES_INITDB_WALDIR (default value is unset) -DEFAULT_SCRIPTS_LOCKFILE_DIR="/docker-entrypoint.initdb.d" -DEFAULT_CONF_LOCKFILE_DIR="/settings" -DEFAULT_EXTRA_CONF_DIR="/settings" +DEFAULT_SCRIPTS_LOCKFILE_DIR="/home/"${USER_NAME}"/docker-entrypoint.initdb.d" +DEFAULT_CONF_LOCKFILE_DIR="/home/"${USER_NAME}"/settings" +DEFAULT_EXTRA_CONF_DIR="/home/"${USER_NAME}"/settings" ROOT_CONF="/etc/postgresql/${POSTGRES_MAJOR_VERSION}/main" PG_ENV="$ROOT_CONF/environment" CONF="$ROOT_CONF/postgresql.conf" -DEFAULT_WAL_ARCHIVE="/opt/archivedir" +DEFAULT_WAL_ARCHIVE="/home/"${USER_NAME}"/archivedir" RECOVERY_CONF="$ROOT_CONF/recovery.conf" POSTGRES="/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/postgres" INITDB="/usr/lib/postgresql/${POSTGRES_MAJOR_VERSION}/bin/initdb" @@ -33,7 +72,7 @@ PG_PID="/var/run/postgresql/${POSTGRES_MAJOR_VERSION}-main.pid" # ie: file_env 'XYZ_DB_PASSWORD' 'example' # (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of # "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -function file_env { +function file_env() { local var="$1" local fileVar="${var}_FILE" local def="${2:-}" @@ -64,7 +103,7 @@ function boolean() { file_env 'POSTGRES_PASS' file_env 'POSTGRES_USER' -file_env 'POSTGRES_DBNAME' + function create_dir() { DATA_PATH=$1 @@ -79,10 +118,10 @@ fi function generate_random_string() { STRING_LENGTH=$1 random_pass_string=$(cat /dev/urandom | tr -dc '[:alnum:]' | head -c "${STRING_LENGTH}") - if [[ ! -f /scripts/.pass_${STRING_LENGTH}.txt ]]; then - echo ${random_pass_string} > /scripts/.pass_${STRING_LENGTH}.txt + if [[ ! -f /home/"${USER_NAME}"/scripts/.pass_${STRING_LENGTH}.txt ]]; then + echo ${random_pass_string} > /home/"${USER_NAME}"/.pass_${STRING_LENGTH}.txt fi - export RAND=$(cat /scripts/.pass_${STRING_LENGTH}.txt) + export RAND=$(cat /home/"${USER_NAME}"/.pass_${STRING_LENGTH}.txt) } # Make sure we have a user set up @@ -114,7 +153,7 @@ else RECREATE_DATADIR=$(boolean ${RECREATE_DATADIR}) fi if [ -z "${SSL_DIR}" ]; then - SSL_DIR="/ssl_certificates" + SSL_DIR="/home/"${USER_NAME}"/ssl_certificates" fi if [ -z "${WAL_ARCHIVE}" ]; then From e4df4a1c26bdb8f257e3567816a8f958c9385e8a Mon Sep 17 00:00:00 2001 From: Admire Nyakudya Date: Sat, 22 Apr 2023 11:30:36 +0200 Subject: [PATCH 2/2] remove double forward slash --- scripts/docker-entrypoint.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh index a912cf9b..f71a0961 100755 --- a/scripts/docker-entrypoint.sh +++ b/scripts/docker-entrypoint.sh @@ -29,15 +29,15 @@ if [[ ${RUN_AS_ROOT} =~ [Ff][Aa][Ll][Ss][Ee] ]];then fi -if [[ -f /home/"${USER_NAME}"//.pass_20.txt ]]; then +if [[ -f /home/"${USER_NAME}"/.pass_20.txt ]]; then USER_CREDENTIAL_PASS=$(cat /home/"${USER_NAME}"//.pass_20.txt) - cp /home/"${USER_NAME}"//.pass_20.txt /tmp/PGPASSWORD.txt + cp /home/"${USER_NAME}"/.pass_20.txt /tmp/PGPASSWORD.txt echo -e "[Entrypoint] GENERATED Postgres PASSWORD: \e[1;31m $USER_CREDENTIAL_PASS \033[0m" fi -if [[ -f /home/"${USER_NAME}"//.pass_22.txt ]]; then +if [[ -f /home/"${USER_NAME}"/.pass_22.txt ]]; then USER_CREDENTIAL_PASS=$(cat /home/"${USER_NAME}"//.pass_22.txt) - cp /home/"${USER_NAME}"//.pass_22.txt /tmp/REPLPASSWORD.txt + cp /home/"${USER_NAME}"/.pass_22.txt /tmp/REPLPASSWORD.txt echo -e "[Entrypoint] GENERATED Replication PASSWORD: \e[1;34m $USER_CREDENTIAL_PASS \033[0m" fi