From 6399e2c0929e4f1a2d21232bb9c5699f9782428f Mon Sep 17 00:00:00 2001 From: Paul G Webster Date: Tue, 2 Mar 2021 12:38:18 +0000 Subject: [PATCH 1/7] Experimental alternative build system --- .../ehrbase-postgresql-full-pgw.dockerfile | 45 +++++++++++++++++++ dockerfiles/scripts/init-db.sh | 15 +++++++ 2 files changed, 60 insertions(+) create mode 100644 dockerfiles/ehrbase-postgresql-full-pgw.dockerfile create mode 100644 dockerfiles/scripts/init-db.sh diff --git a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile new file mode 100644 index 0000000..b6d1f59 --- /dev/null +++ b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile @@ -0,0 +1,45 @@ +FROM postgres:11.5-alpine + +# Set default values for database user and passwords +ARG EHRBASE_USER="ehrbase" +ARG EHRBASE_PASSWORD="ehrbase" +ENV EHRBASE_USER=${EHRBASE_USER} +ENV EHRBASE_PASSWORD=${EHRBASE_PASSWORD} + +# Set Postgres data directory to custom folder +ENV PGDATA="/var/lib/postgresql/pgdata" + +# Create custom data directory and change ownership to postgres user +USER root +RUN mkdir -p ${PGDATA} +RUN chown postgres: ${PGDATA} +RUN chmod 0700 ${PGDATA} + +# Define Postgres version for easier upgrades for the future +ENV PG_MAJOR=11.11 + +# Copy init scripts to init directory +COPY ./scripts/create-ehrbase-user.sh /docker-entrypoint-initdb.d/ + +# Initialize basic database cluster +RUN sh -c "/usr/local/bin/docker-entrypoint.sh postgres & " && \ + sleep 20 && \ + echo "Database initialized" + +# Allow connections from all adresses & Listen to all interfaces +RUN echo "host all all 0.0.0.0/0 scram-sha-256" >> ${PGDATA}/pg_hba.conf +RUN echo "listen_addresses='*'" >> ${PGDATA}/postgresql.conf + +# Install python and dependencies +RUN apk add --update postgresql=${PG_MAJOR}-r0 \ + build-base \ + git \ + flex \ + bison + +COPY scripts /scripts +RUN chmod +x /scripts/* +RUN env > /scripts/.env +RUN sh /scripts/init-db.sh + +EXPOSE 5432 diff --git a/dockerfiles/scripts/init-db.sh b/dockerfiles/scripts/init-db.sh new file mode 100644 index 0000000..63d3e5d --- /dev/null +++ b/dockerfiles/scripts/init-db.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# Chjange to the same directory as this script +cd "$(dirname "$0")" + +# Import all env's that was present at the time of init +set -o allexport +[[ -f .env ]] && source .env +set +o allexport + +# Execute the DB init scripts +sh -c "./install-temporal-tables.sh" +sh -c "./install-jsquery.sh" +sh -c "./prepare-databases.sh" + From c86566d3c537a74d67e32b5f8d56300aceb8e26c Mon Sep 17 00:00:00 2001 From: Paul G Webster Date: Tue, 2 Mar 2021 13:39:41 +0000 Subject: [PATCH 2/7] Progressed idea to chainload postgres entrypoint --- .../ehrbase-postgresql-full-pgw.dockerfile | 1 + dockerfiles/scripts/create-ehrbase-user.sh | 18 +++++++---- dockerfiles/scripts/init-db.sh | 20 +++++++++++- dockerfiles/scripts/install-jsquery.sh | 17 ++++++---- .../scripts/install-temporal-tables.sh | 28 +++++++++------- dockerfiles/scripts/prepare-databases.sh | 32 +++++++++++-------- 6 files changed, 75 insertions(+), 41 deletions(-) diff --git a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile index b6d1f59..4f140ce 100644 --- a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile +++ b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile @@ -43,3 +43,4 @@ RUN env > /scripts/.env RUN sh /scripts/init-db.sh EXPOSE 5432 +CMD eval /docker-entrypoint.sh diff --git a/dockerfiles/scripts/create-ehrbase-user.sh b/dockerfiles/scripts/create-ehrbase-user.sh index 7387a83..adc6ea0 100644 --- a/dockerfiles/scripts/create-ehrbase-user.sh +++ b/dockerfiles/scripts/create-ehrbase-user.sh @@ -1,12 +1,16 @@ #!/bin/bash set -e -psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - CREATE ROLE ${EHRBASE_USER} LOGIN PASSWORD '${EHRBASE_PASSWORD}'; - CREATE DATABASE ehrbase ENCODING 'UTF-8' TEMPLATE template0; - GRANT ALL PRIVILEGES ON DATABASE ehrbase TO ${EHRBASE_USER}; - CREATE USER root WITH SUPERUSER; +if [ ! -f /var/lib/postgresql/pgdata/.userinit ]; then + + psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + CREATE ROLE ${EHRBASE_USER} LOGIN PASSWORD '${EHRBASE_PASSWORD}'; + CREATE DATABASE ehrbase ENCODING 'UTF-8' TEMPLATE template0; + GRANT ALL PRIVILEGES ON DATABASE ehrbase TO ${EHRBASE_USER}; + CREATE USER root WITH SUPERUSER; EOSQL -# Stop database before proceeding -su - postgres -c "pg_ctl -D ${PGDATA} -w stop" + # Stop database before proceeding + su - postgres -c "pg_ctl -D ${PGDATA} -w stop" + echo "done" > /var/lib/postgresql/pgdata/.userinit +fi diff --git a/dockerfiles/scripts/init-db.sh b/dockerfiles/scripts/init-db.sh index 63d3e5d..0888771 100644 --- a/dockerfiles/scripts/init-db.sh +++ b/dockerfiles/scripts/init-db.sh @@ -1,8 +1,14 @@ -#!/bin/bash +#!/bin/sh # Chjange to the same directory as this script cd "$(dirname "$0")" +# If we was in build we are in the scripts directory +# if we booted we are in / +if [ -d scripts ]; then + cd scripts +fi; + # Import all env's that was present at the time of init set -o allexport [[ -f .env ]] && source .env @@ -13,3 +19,15 @@ sh -c "./install-temporal-tables.sh" sh -c "./install-jsquery.sh" sh -c "./prepare-databases.sh" +# Next we need to swap back to docker root +cd / + +# move the standard docker-entrypoint and replace with our own +if [ ! -f /docker-entrypoint-primary.sh ]; then + unlink /docker-entrypoint.sh + ln -s /scripts/init-db.sh /docker-entrypoint.sh + ln -s /usr/local/bin/docker-entrypoint.sh /docker-entrypoint-primary.sh +else + echo "exec: /docker-entrypoint-primary.sh"; + bash docker-entrypoint-primary.sh postgres +fi diff --git a/dockerfiles/scripts/install-jsquery.sh b/dockerfiles/scripts/install-jsquery.sh index 4c7bed3..b7ef1d7 100644 --- a/dockerfiles/scripts/install-jsquery.sh +++ b/dockerfiles/scripts/install-jsquery.sh @@ -2,12 +2,15 @@ set -e -# Fetch from remote repository -git clone https://github.com/postgrespro/jsquery.git -cd jsquery +if [ ! -f /var/lib/postgresql/pgdata/.jsquery_installed ]; then + # Fetch from remote repository + git clone https://github.com/postgrespro/jsquery.git + cd jsquery -# Build jsQuery plugin -make USE_PGXS=1 && \ -make USE_PGXS=1 install && \ + # Build jsQuery plugin + make USE_PGXS=1 && \ + make USE_PGXS=1 install && \ -cd .. \ No newline at end of file + cd .. + echo "done" > /var/lib/postgresql/pgdata/.jsquery_installed +fi diff --git a/dockerfiles/scripts/install-temporal-tables.sh b/dockerfiles/scripts/install-temporal-tables.sh index 6314eb4..3b47591 100644 --- a/dockerfiles/scripts/install-temporal-tables.sh +++ b/dockerfiles/scripts/install-temporal-tables.sh @@ -2,19 +2,23 @@ set -e -# Start server -su - postgres -c "pg_ctl -D ${PGDATA} -w start" +if [ ! -f /var/lib/postgresql/pgdata/.temporary_tables_installed ]; then + # Start server + su - postgres -c "pg_ctl -D ${PGDATA} -w start" -# Fetch from branch "mlt" which has full support of Postgres 11 -git clone https://github.com/mlt/temporal_tables.git --branch mlt -cd temporal_tables + # Fetch from branch "mlt" which has full support of Postgres 11 + git clone https://github.com/mlt/temporal_tables.git --branch mlt + cd temporal_tables -# Build from source -make PGUSER=postgres && -make install && -make installcheck + # Build from source + make PGUSER=postgres && + make install && + make installcheck -# Stop server -su - postgres -c "pg_ctl -D ${PGDATA} -w stop" + # Stop server + su - postgres -c "pg_ctl -D ${PGDATA} -w stop" + + cd .. + echo "done" > /var/lib/postgresql/pgdata/.temporary_tables_installed +fi -cd .. \ No newline at end of file diff --git a/dockerfiles/scripts/prepare-databases.sh b/dockerfiles/scripts/prepare-databases.sh index c091668..baa17c1 100644 --- a/dockerfiles/scripts/prepare-databases.sh +++ b/dockerfiles/scripts/prepare-databases.sh @@ -2,20 +2,24 @@ set -e -# Start server -su - postgres -c "pg_ctl -D ${PGDATA} -w start" +if [ ! -f /var/lib/postgresql/pgdata/.prepared_tables ]; then -# Setup schemas and activate extensions -psql --username="$POSTGRES_USER" --dbname "ehrbase" <<-EOSQL - CREATE SCHEMA IF NOT EXISTS ehr AUTHORIZATION "$EHRBASE_USER"; - CREATE SCHEMA IF NOT EXISTS ext AUTHORIZATION "$EHRBASE_USER"; - CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA ext; - CREATE EXTENSION IF NOT EXISTS "temporal_tables" SCHEMA ext; - CREATE EXTENSION IF NOT EXISTS "jsquery" SCHEMA ext; - CREATE EXTENSION IF NOT EXISTS "ltree" SCHEMA ext; - ALTER DATABASE ehrbase SET search_path to "$EHRBASE_USER",public,ext; - GRANT ALL ON ALL FUNCTIONS IN SCHEMA ext TO $EHRBASE_USER; + # Start server + su - postgres -c "pg_ctl -D ${PGDATA} -w start" + + # Setup schemas and activate extensions + psql --username="$POSTGRES_USER" --dbname "ehrbase" <<-EOSQL + CREATE SCHEMA IF NOT EXISTS ehr AUTHORIZATION "$EHRBASE_USER"; + CREATE SCHEMA IF NOT EXISTS ext AUTHORIZATION "$EHRBASE_USER"; + CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA ext; + CREATE EXTENSION IF NOT EXISTS "temporal_tables" SCHEMA ext; + CREATE EXTENSION IF NOT EXISTS "jsquery" SCHEMA ext; + CREATE EXTENSION IF NOT EXISTS "ltree" SCHEMA ext; + ALTER DATABASE ehrbase SET search_path to "$EHRBASE_USER",public,ext; + GRANT ALL ON ALL FUNCTIONS IN SCHEMA ext TO $EHRBASE_USER; EOSQL -# Stop server -su - postgres -c "pg_ctl -D ${PGDATA} -w stop" + # Stop server + su - postgres -c "pg_ctl -D ${PGDATA} -w stop" + echo "done" > /var/lib/postgresql/pgdata/.prepared_tables +fi From 4ef181b512e4b48c2aa2bd78a845ab5d71342dea Mon Sep 17 00:00:00 2001 From: Paul G Webster Date: Tue, 2 Mar 2021 13:48:53 +0000 Subject: [PATCH 3/7] Experimental working build --- dockerfiles/ehrbase-postgresql-full-pgw.dockerfile | 3 ++- dockerfiles/scripts/init-db.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile index 4f140ce..4063c3b 100644 --- a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile +++ b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile @@ -43,4 +43,5 @@ RUN env > /scripts/.env RUN sh /scripts/init-db.sh EXPOSE 5432 -CMD eval /docker-entrypoint.sh + +ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/dockerfiles/scripts/init-db.sh b/dockerfiles/scripts/init-db.sh index 0888771..6bede56 100644 --- a/dockerfiles/scripts/init-db.sh +++ b/dockerfiles/scripts/init-db.sh @@ -29,5 +29,5 @@ if [ ! -f /docker-entrypoint-primary.sh ]; then ln -s /usr/local/bin/docker-entrypoint.sh /docker-entrypoint-primary.sh else echo "exec: /docker-entrypoint-primary.sh"; - bash docker-entrypoint-primary.sh postgres + ./docker-entrypoint-primary.sh postgres fi From 761dbb6b8ac97d1353e304a02a9c9a486daa4fab Mon Sep 17 00:00:00 2001 From: Paul G Webster Date: Tue, 2 Mar 2021 16:16:50 +0000 Subject: [PATCH 4/7] Working I believe --- .../ehrbase-postgresql-full-pgw.dockerfile | 43 +++++++++++-------- dockerfiles/scripts/chain-load.sh | 30 +++++++++++++ dockerfiles/scripts/create-ehrbase-user.sh | 19 ++++---- dockerfiles/scripts/init-db.sh | 33 -------------- .../scripts/install-temporal-tables.sh | 24 ++++------- dockerfiles/scripts/prepare-databases.sh | 35 +++++++-------- 6 files changed, 92 insertions(+), 92 deletions(-) create mode 100644 dockerfiles/scripts/chain-load.sh delete mode 100644 dockerfiles/scripts/init-db.sh diff --git a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile index 4063c3b..f43b7f0 100644 --- a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile +++ b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile @@ -11,24 +11,31 @@ ENV PGDATA="/var/lib/postgresql/pgdata" # Create custom data directory and change ownership to postgres user USER root -RUN mkdir -p ${PGDATA} +RUN mkdir -p ${PGDATA} /usr/local/share/doc/ RUN chown postgres: ${PGDATA} RUN chmod 0700 ${PGDATA} # Define Postgres version for easier upgrades for the future ENV PG_MAJOR=11.11 -# Copy init scripts to init directory -COPY ./scripts/create-ehrbase-user.sh /docker-entrypoint-initdb.d/ - -# Initialize basic database cluster -RUN sh -c "/usr/local/bin/docker-entrypoint.sh postgres & " && \ - sleep 20 && \ - echo "Database initialized" +# Copy system scripts to the scripts directory on root +COPY scripts /scripts +RUN chmod +x /scripts/* +RUN env > /scripts/.env -# Allow connections from all adresses & Listen to all interfaces -RUN echo "host all all 0.0.0.0/0 scram-sha-256" >> ${PGDATA}/pg_hba.conf -RUN echo "listen_addresses='*'" >> ${PGDATA}/postgresql.conf +# Copy init scripts to init directory +COPY ./scripts/chain-load.sh /docker-entrypoint-initdb.d/ +RUN chown -R root:postgres /scripts \ + /usr/local/lib/postgresql \ + /usr/local/include/postgresql \ + /usr/local/share/postgresql/extension \ + /usr/local/share/doc/ + +RUN chmod -R g+rwx /scripts \ + /usr/local/lib/postgresql \ + /usr/local/include/postgresql \ + /usr/local/share/postgresql/extension \ + /usr/local/share/doc/ # Install python and dependencies RUN apk add --update postgresql=${PG_MAJOR}-r0 \ @@ -37,11 +44,13 @@ RUN apk add --update postgresql=${PG_MAJOR}-r0 \ flex \ bison -COPY scripts /scripts -RUN chmod +x /scripts/* -RUN env > /scripts/.env -RUN sh /scripts/init-db.sh +# Initialize basic database cluster +RUN sh -c "/usr/local/bin/docker-entrypoint.sh postgres & " && \ + sleep 20 && \ + echo "Database initialized" -EXPOSE 5432 +# Allow connections from all adresses & Listen to all interfaces +RUN echo "host all all 0.0.0.0/0 md5" >> ${PGDATA}/pg_hba.conf +RUN echo "listen_addresses='*'" >> ${PGDATA}/postgresql.conf -ENTRYPOINT ["/docker-entrypoint.sh"] +EXPOSE 5432 diff --git a/dockerfiles/scripts/chain-load.sh b/dockerfiles/scripts/chain-load.sh new file mode 100644 index 0000000..bef60cd --- /dev/null +++ b/dockerfiles/scripts/chain-load.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +set -e + +cd /scripts + +set -o allexport +[[ -f .env ]] && source .env +set +o allexport + +# Check if it is already initilized +if [ -f /var/lib/postgresql/pgdata/.prepared ]; then + echo "Database has already been initilized" +else + # Execute the DB init scripts + echo "Running: create-ehrbase-user" + eval ./create-ehrbase-user.sh + + echo "Installing temporal tables" + rm -Rf temporal* + eval ./install-temporal-tables.sh + + echo "Installing JSquery" + rm -Rf jsquery* + eval ./install-jsquery.sh + + echo "Creating default databases" + eval ./prepare-databases.sh +fi + diff --git a/dockerfiles/scripts/create-ehrbase-user.sh b/dockerfiles/scripts/create-ehrbase-user.sh index adc6ea0..2461878 100644 --- a/dockerfiles/scripts/create-ehrbase-user.sh +++ b/dockerfiles/scripts/create-ehrbase-user.sh @@ -1,16 +1,15 @@ #!/bin/bash set -e -if [ ! -f /var/lib/postgresql/pgdata/.userinit ]; then +echo "CREATE ROLE ${EHRBASE_USER} LOGIN PASSWORD '${EHRBASE_PASSWORD}'" - psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL - CREATE ROLE ${EHRBASE_USER} LOGIN PASSWORD '${EHRBASE_PASSWORD}'; - CREATE DATABASE ehrbase ENCODING 'UTF-8' TEMPLATE template0; - GRANT ALL PRIVILEGES ON DATABASE ehrbase TO ${EHRBASE_USER}; - CREATE USER root WITH SUPERUSER; +psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL +CREATE ROLE ${EHRBASE_USER} LOGIN PASSWORD '${EHRBASE_PASSWORD}'; +CREATE DATABASE ehrbase ENCODING 'UTF-8' TEMPLATE template0; +GRANT ALL PRIVILEGES ON DATABASE ehrbase TO ${EHRBASE_USER}; +CREATE USER root WITH SUPERUSER; EOSQL - # Stop database before proceeding - su - postgres -c "pg_ctl -D ${PGDATA} -w stop" - echo "done" > /var/lib/postgresql/pgdata/.userinit -fi +# Stop database before proceeding +pg_ctl stop -D ${PGDATA} +echo "done" > /var/lib/postgresql/pgdata/.userinit diff --git a/dockerfiles/scripts/init-db.sh b/dockerfiles/scripts/init-db.sh deleted file mode 100644 index 6bede56..0000000 --- a/dockerfiles/scripts/init-db.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -# Chjange to the same directory as this script -cd "$(dirname "$0")" - -# If we was in build we are in the scripts directory -# if we booted we are in / -if [ -d scripts ]; then - cd scripts -fi; - -# Import all env's that was present at the time of init -set -o allexport -[[ -f .env ]] && source .env -set +o allexport - -# Execute the DB init scripts -sh -c "./install-temporal-tables.sh" -sh -c "./install-jsquery.sh" -sh -c "./prepare-databases.sh" - -# Next we need to swap back to docker root -cd / - -# move the standard docker-entrypoint and replace with our own -if [ ! -f /docker-entrypoint-primary.sh ]; then - unlink /docker-entrypoint.sh - ln -s /scripts/init-db.sh /docker-entrypoint.sh - ln -s /usr/local/bin/docker-entrypoint.sh /docker-entrypoint-primary.sh -else - echo "exec: /docker-entrypoint-primary.sh"; - ./docker-entrypoint-primary.sh postgres -fi diff --git a/dockerfiles/scripts/install-temporal-tables.sh b/dockerfiles/scripts/install-temporal-tables.sh index 3b47591..02404ff 100644 --- a/dockerfiles/scripts/install-temporal-tables.sh +++ b/dockerfiles/scripts/install-temporal-tables.sh @@ -2,23 +2,17 @@ set -e -if [ ! -f /var/lib/postgresql/pgdata/.temporary_tables_installed ]; then - # Start server - su - postgres -c "pg_ctl -D ${PGDATA} -w start" +pg_ctl start -D ${PGDATA} - # Fetch from branch "mlt" which has full support of Postgres 11 - git clone https://github.com/mlt/temporal_tables.git --branch mlt - cd temporal_tables +# Fetch from branch "mlt" which has full support of Postgres 11 +git clone https://github.com/mlt/temporal_tables.git --branch mlt +cd temporal_tables - # Build from source - make PGUSER=postgres && - make install && - make installcheck +# Build from source +make PGUSER=postgres && make install && make installcheck - # Stop server - su - postgres -c "pg_ctl -D ${PGDATA} -w stop" +# Stop server +pg_ctl stop -D ${PGDATA} - cd .. - echo "done" > /var/lib/postgresql/pgdata/.temporary_tables_installed -fi +cd .. diff --git a/dockerfiles/scripts/prepare-databases.sh b/dockerfiles/scripts/prepare-databases.sh index baa17c1..d232e8e 100644 --- a/dockerfiles/scripts/prepare-databases.sh +++ b/dockerfiles/scripts/prepare-databases.sh @@ -2,24 +2,25 @@ set -e -if [ ! -f /var/lib/postgresql/pgdata/.prepared_tables ]; then - # Start server - su - postgres -c "pg_ctl -D ${PGDATA} -w start" +# Start server +pg_ctl start -D ${PGDATA} - # Setup schemas and activate extensions - psql --username="$POSTGRES_USER" --dbname "ehrbase" <<-EOSQL - CREATE SCHEMA IF NOT EXISTS ehr AUTHORIZATION "$EHRBASE_USER"; - CREATE SCHEMA IF NOT EXISTS ext AUTHORIZATION "$EHRBASE_USER"; - CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA ext; - CREATE EXTENSION IF NOT EXISTS "temporal_tables" SCHEMA ext; - CREATE EXTENSION IF NOT EXISTS "jsquery" SCHEMA ext; - CREATE EXTENSION IF NOT EXISTS "ltree" SCHEMA ext; - ALTER DATABASE ehrbase SET search_path to "$EHRBASE_USER",public,ext; - GRANT ALL ON ALL FUNCTIONS IN SCHEMA ext TO $EHRBASE_USER; +echo "Creating schemas" + +# Setup schemas and activate extensions +psql --username="$POSTGRES_USER" --dbname "ehrbase" <<-EOSQL +CREATE SCHEMA IF NOT EXISTS ehr AUTHORIZATION "$EHRBASE_USER"; +CREATE SCHEMA IF NOT EXISTS ext AUTHORIZATION "$EHRBASE_USER"; +CREATE EXTENSION IF NOT EXISTS "uuid-ossp" SCHEMA ext; +CREATE EXTENSION IF NOT EXISTS "temporal_tables" SCHEMA ext; +CREATE EXTENSION IF NOT EXISTS "jsquery" SCHEMA ext; +CREATE EXTENSION IF NOT EXISTS "ltree" SCHEMA ext; +ALTER DATABASE ehrbase SET search_path to "$EHRBASE_USER",public,ext; +GRANT ALL ON ALL FUNCTIONS IN SCHEMA ext TO $EHRBASE_USER; EOSQL - # Stop server - su - postgres -c "pg_ctl -D ${PGDATA} -w stop" - echo "done" > /var/lib/postgresql/pgdata/.prepared_tables -fi +# Stop server +pg_ctl stop -D ${PGDATA} + +echo "done" > /var/lib/postgresql/pgdata/.prepared From 331624b100117124a69e4d7415c64bf63cf961c7 Mon Sep 17 00:00:00 2001 From: Paul G Webster Date: Tue, 2 Mar 2021 16:20:16 +0000 Subject: [PATCH 5/7] Overwrote original dockerfile for pull request sanity --- .../ehrbase-postgresql-full-pgw.dockerfile | 56 ------------------ .../ehrbase-postgresql-full.dockerfile | 58 +++++++++---------- 2 files changed, 28 insertions(+), 86 deletions(-) delete mode 100644 dockerfiles/ehrbase-postgresql-full-pgw.dockerfile diff --git a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile b/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile deleted file mode 100644 index f43b7f0..0000000 --- a/dockerfiles/ehrbase-postgresql-full-pgw.dockerfile +++ /dev/null @@ -1,56 +0,0 @@ -FROM postgres:11.5-alpine - -# Set default values for database user and passwords -ARG EHRBASE_USER="ehrbase" -ARG EHRBASE_PASSWORD="ehrbase" -ENV EHRBASE_USER=${EHRBASE_USER} -ENV EHRBASE_PASSWORD=${EHRBASE_PASSWORD} - -# Set Postgres data directory to custom folder -ENV PGDATA="/var/lib/postgresql/pgdata" - -# Create custom data directory and change ownership to postgres user -USER root -RUN mkdir -p ${PGDATA} /usr/local/share/doc/ -RUN chown postgres: ${PGDATA} -RUN chmod 0700 ${PGDATA} - -# Define Postgres version for easier upgrades for the future -ENV PG_MAJOR=11.11 - -# Copy system scripts to the scripts directory on root -COPY scripts /scripts -RUN chmod +x /scripts/* -RUN env > /scripts/.env - -# Copy init scripts to init directory -COPY ./scripts/chain-load.sh /docker-entrypoint-initdb.d/ -RUN chown -R root:postgres /scripts \ - /usr/local/lib/postgresql \ - /usr/local/include/postgresql \ - /usr/local/share/postgresql/extension \ - /usr/local/share/doc/ - -RUN chmod -R g+rwx /scripts \ - /usr/local/lib/postgresql \ - /usr/local/include/postgresql \ - /usr/local/share/postgresql/extension \ - /usr/local/share/doc/ - -# Install python and dependencies -RUN apk add --update postgresql=${PG_MAJOR}-r0 \ - build-base \ - git \ - flex \ - bison - -# Initialize basic database cluster -RUN sh -c "/usr/local/bin/docker-entrypoint.sh postgres & " && \ - sleep 20 && \ - echo "Database initialized" - -# Allow connections from all adresses & Listen to all interfaces -RUN echo "host all all 0.0.0.0/0 md5" >> ${PGDATA}/pg_hba.conf -RUN echo "listen_addresses='*'" >> ${PGDATA}/postgresql.conf - -EXPOSE 5432 diff --git a/dockerfiles/ehrbase-postgresql-full.dockerfile b/dockerfiles/ehrbase-postgresql-full.dockerfile index 75b2530..f43b7f0 100644 --- a/dockerfiles/ehrbase-postgresql-full.dockerfile +++ b/dockerfiles/ehrbase-postgresql-full.dockerfile @@ -10,15 +10,39 @@ ENV EHRBASE_PASSWORD=${EHRBASE_PASSWORD} ENV PGDATA="/var/lib/postgresql/pgdata" # Create custom data directory and change ownership to postgres user -RUN mkdir -p ${PGDATA} +USER root +RUN mkdir -p ${PGDATA} /usr/local/share/doc/ RUN chown postgres: ${PGDATA} RUN chmod 0700 ${PGDATA} # Define Postgres version for easier upgrades for the future -ENV PG_MAJOR=11.10 +ENV PG_MAJOR=11.11 + +# Copy system scripts to the scripts directory on root +COPY scripts /scripts +RUN chmod +x /scripts/* +RUN env > /scripts/.env # Copy init scripts to init directory -COPY ./scripts/create-ehrbase-user.sh /docker-entrypoint-initdb.d/ +COPY ./scripts/chain-load.sh /docker-entrypoint-initdb.d/ +RUN chown -R root:postgres /scripts \ + /usr/local/lib/postgresql \ + /usr/local/include/postgresql \ + /usr/local/share/postgresql/extension \ + /usr/local/share/doc/ + +RUN chmod -R g+rwx /scripts \ + /usr/local/lib/postgresql \ + /usr/local/include/postgresql \ + /usr/local/share/postgresql/extension \ + /usr/local/share/doc/ + +# Install python and dependencies +RUN apk add --update postgresql=${PG_MAJOR}-r0 \ + build-base \ + git \ + flex \ + bison # Initialize basic database cluster RUN sh -c "/usr/local/bin/docker-entrypoint.sh postgres & " && \ @@ -26,33 +50,7 @@ RUN sh -c "/usr/local/bin/docker-entrypoint.sh postgres & " && \ echo "Database initialized" # Allow connections from all adresses & Listen to all interfaces -RUN echo "host all all 0.0.0.0/0 scram-sha-256" >> ${PGDATA}/pg_hba.conf +RUN echo "host all all 0.0.0.0/0 md5" >> ${PGDATA}/pg_hba.conf RUN echo "listen_addresses='*'" >> ${PGDATA}/postgresql.conf -# Install python and dependencies -RUN apk add --update postgresql=${PG_MAJOR}-r0 \ - build-base \ - git \ - flex \ - bison - -# Install temporary_tables plugin -COPY ./scripts/install-temporal-tables.sh . -RUN chmod +x ./install-temporal-tables.sh -RUN sh -c "./install-temporal-tables.sh" - -# Install jsquery plugin -COPY ./scripts/install-jsquery.sh . -RUN chmod +x ./install-jsquery.sh -RUN sh -c "./install-jsquery.sh" - -# Prepare database schemas -COPY ./scripts/prepare-databases.sh . -RUN chmod +x ./prepare-databases.sh -RUN sh -c "./prepare-databases.sh" - -# Cleanup -RUN rm -f -r ./jsquery -RUN rm -f -r ./temporal_tables - EXPOSE 5432 From 1c70e35100a754da47d4ed07e8490896fd24f212 Mon Sep 17 00:00:00 2001 From: Paul G Webster Date: Wed, 3 Mar 2021 20:43:22 +0000 Subject: [PATCH 6/7] Rather large refactor --- .../ehrbase-postgresql-full.dockerfile | 58 ++++++----- dockerfiles/scripts/chain-load.sh | 68 +++++++++---- dockerfiles/scripts/create-ehrbase-user.sh | 11 +-- dockerfiles/scripts/etc/pg_hba.conf | 95 +++++++++++++++++++ dockerfiles/scripts/install-jsquery.sh | 16 ---- .../scripts/install-temporal-tables.sh | 18 ---- dockerfiles/scripts/prepare-databases.sh | 11 --- dockerfiles/scripts/test-temporal-tables.sh | 6 ++ 8 files changed, 187 insertions(+), 96 deletions(-) create mode 100644 dockerfiles/scripts/etc/pg_hba.conf delete mode 100644 dockerfiles/scripts/install-jsquery.sh delete mode 100644 dockerfiles/scripts/install-temporal-tables.sh create mode 100644 dockerfiles/scripts/test-temporal-tables.sh diff --git a/dockerfiles/ehrbase-postgresql-full.dockerfile b/dockerfiles/ehrbase-postgresql-full.dockerfile index f43b7f0..de48074 100644 --- a/dockerfiles/ehrbase-postgresql-full.dockerfile +++ b/dockerfiles/ehrbase-postgresql-full.dockerfile @@ -3,8 +3,8 @@ FROM postgres:11.5-alpine # Set default values for database user and passwords ARG EHRBASE_USER="ehrbase" ARG EHRBASE_PASSWORD="ehrbase" -ENV EHRBASE_USER=${EHRBASE_USER} -ENV EHRBASE_PASSWORD=${EHRBASE_PASSWORD} +ENV EHRBASE_USER=${EHRBASE_USER:-ehrbase} +ENV EHRBASE_PASSWORD=${EHRBASE_PASSWORD:-ehrbase} # Set Postgres data directory to custom folder ENV PGDATA="/var/lib/postgresql/pgdata" @@ -21,36 +21,46 @@ ENV PG_MAJOR=11.11 # Copy system scripts to the scripts directory on root COPY scripts /scripts RUN chmod +x /scripts/* -RUN env > /scripts/.env - -# Copy init scripts to init directory -COPY ./scripts/chain-load.sh /docker-entrypoint-initdb.d/ -RUN chown -R root:postgres /scripts \ - /usr/local/lib/postgresql \ - /usr/local/include/postgresql \ - /usr/local/share/postgresql/extension \ - /usr/local/share/doc/ - -RUN chmod -R g+rwx /scripts \ - /usr/local/lib/postgresql \ - /usr/local/include/postgresql \ - /usr/local/share/postgresql/extension \ - /usr/local/share/doc/ # Install python and dependencies RUN apk add --update postgresql=${PG_MAJOR}-r0 \ build-base \ git \ flex \ - bison + bison \ + psutils + +# Install JSQuery +RUN cd /scripts/ \ + && git clone https://github.com/postgrespro/jsquery.git \ + && cd jsquery \ + && make USE_PGXS=1 \ + && make USE_PGXS=1 install + +# Install temporal tables +RUN cd /scripts/ \ + && git clone https://github.com/mlt/temporal_tables.git --branch mlt \ + && cd temporal_tables \ + && make PGUSER=postgres \ + && make install + +# Allow regression test to run from /scripts/temporal +RUN chown -R root:postgres /scripts +RUN chmod -R g+rwx /scripts # Initialize basic database cluster -RUN sh -c "/usr/local/bin/docker-entrypoint.sh postgres & " && \ - sleep 20 && \ - echo "Database initialized" +RUN su postgres -c sh -c "/scripts/chain-load.sh SETUP" \ + && su postgres -c sh -c "/usr/local/bin/docker-entrypoint.sh postgres &" \ + && su postgres -c sh -c "/scripts/chain-load.sh WAIT" \ + && su postgres -c sh -c "/scripts/chain-load.sh SPAWNSET" \ + && su postgres -c sh -c "/scripts/chain-load.sh STOP" + +RUN echo "DONE" > /scripts/.pginit -# Allow connections from all adresses & Listen to all interfaces -RUN echo "host all all 0.0.0.0/0 md5" >> ${PGDATA}/pg_hba.conf -RUN echo "listen_addresses='*'" >> ${PGDATA}/postgresql.conf +# Copy init scripts to init directory +COPY /scripts/chain-load.sh /docker-entrypoint-initdb.d/ +# COPY the pg_hba to the PGDATA directory +COPY /scripts/etc/pg_hba.conf ${PGDATA}/ +RUN chown -Rv postgres:postgres ${PGDATA} EXPOSE 5432 diff --git a/dockerfiles/scripts/chain-load.sh b/dockerfiles/scripts/chain-load.sh index bef60cd..0520c4f 100644 --- a/dockerfiles/scripts/chain-load.sh +++ b/dockerfiles/scripts/chain-load.sh @@ -1,30 +1,60 @@ -#!/bin/sh +#!/bin/bash -set -e +# Read in ARG0 +STARTSERVER="$1"; +# Always swap to /scripts cd /scripts -set -o allexport -[[ -f .env ]] && source .env -set +o allexport +# Always expand the enviroment +set -e + +# Incase this is a volume mount move +if [ -f "/scripts/.pginit" ]; then + STARTSERVER="SPAWNSET" +fi -# Check if it is already initilized -if [ -f /var/lib/postgresql/pgdata/.prepared ]; then - echo "Database has already been initilized" +if [[ -z "$STARTSERVER" ]]; then + echo "No runmode specified!" + exit 0 else - # Execute the DB init scripts - echo "Running: create-ehrbase-user" - eval ./create-ehrbase-user.sh + echo "Running mode: $STARTSERVER" +fi - echo "Installing temporal tables" - rm -Rf temporal* - eval ./install-temporal-tables.sh +# If we are in setup, init the db and install the required databases +# and modules +if [ $STARTSERVER == "INIT" ]; then + sh -c 'pg_ctl initdb -D ${PGDATA}' +elif [ "$STARTSERVER" == "START" ]; then + sh -c 'pg_ctl start -D ${PGDATA}' +elif [ "$STARTSERVER" == "WAIT" ]; then + LOOPRUN=0 + while [ "$LOOPRUN" != 1 ]; do + sleep 1 + LOOPRUN=$(perl -e 'print `psql -AtXq -U postgres -d template1 -c "SELECT 1"`') + done + echo "Primary database initilization complete!" +elif [ "$STARTSERVER" == "STOP" ]; then + sh -c 'pg_ctl stop -D ${PGDATA}' +elif [ "$STARTSERVER" == "SETUP" ]; then + # Totally remove the PGDATA to force re-init on image start + rm -Rf "${PGDATA}" +elif [ "$STARTSERVER" == "SPAWNSET" ]; then + # Execute the DB init scripts, we are already the postgres user + # Add in MD5 auth + echo "listen_addresses='*'" >> ${PGDATA}/postgresql.conf + + echo "Running temporal table test" + eval ./test-temporal-tables.sh - echo "Installing JSquery" - rm -Rf jsquery* - eval ./install-jsquery.sh + echo "Running: create-ehrbase-user" + eval ./create-ehrbase-user.sh echo "Creating default databases" eval ./prepare-databases.sh -fi - +elif [ "$STARTSERVER" == "PASSRESET" ]; then + echo "Running: password-recrypt-set" + eval ./password-recrypt-set.sh +else + echo "Unknown action '$STARTSERVER' called." +fi; diff --git a/dockerfiles/scripts/create-ehrbase-user.sh b/dockerfiles/scripts/create-ehrbase-user.sh index 2461878..bd874ea 100644 --- a/dockerfiles/scripts/create-ehrbase-user.sh +++ b/dockerfiles/scripts/create-ehrbase-user.sh @@ -1,15 +1,10 @@ #!/bin/bash -set -e -echo "CREATE ROLE ${EHRBASE_USER} LOGIN PASSWORD '${EHRBASE_PASSWORD}'" +echo "Creating user(${EHRBASE_USER}) pass(${EHRBASE_PASSWORD}) db(ehrbase)" -psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL -CREATE ROLE ${EHRBASE_USER} LOGIN PASSWORD '${EHRBASE_PASSWORD}'; +psql -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" <<-EOSQL +CREATE ROLE ${EHRBASE_USER} WITH LOGIN PASSWORD '${EHRBASE_PASSWORD}'; CREATE DATABASE ehrbase ENCODING 'UTF-8' TEMPLATE template0; GRANT ALL PRIVILEGES ON DATABASE ehrbase TO ${EHRBASE_USER}; CREATE USER root WITH SUPERUSER; EOSQL - -# Stop database before proceeding -pg_ctl stop -D ${PGDATA} -echo "done" > /var/lib/postgresql/pgdata/.userinit diff --git a/dockerfiles/scripts/etc/pg_hba.conf b/dockerfiles/scripts/etc/pg_hba.conf new file mode 100644 index 0000000..65bbc2c --- /dev/null +++ b/dockerfiles/scripts/etc/pg_hba.conf @@ -0,0 +1,95 @@ +# PostgreSQL Client Authentication Configuration File +# =================================================== +# +# Refer to the "Client Authentication" section in the PostgreSQL +# documentation for a complete description of this file. A short +# synopsis follows. +# +# This file controls: which hosts are allowed to connect, how clients +# are authenticated, which PostgreSQL user names they can use, which +# databases they can access. Records take one of these forms: +# +# local DATABASE USER METHOD [OPTIONS] +# host DATABASE USER ADDRESS METHOD [OPTIONS] +# hostssl DATABASE USER ADDRESS METHOD [OPTIONS] +# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] +# +# (The uppercase items must be replaced by actual values.) +# +# The first field is the connection type: "local" is a Unix-domain +# socket, "host" is either a plain or SSL-encrypted TCP/IP socket, +# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a +# plain TCP/IP socket. +# +# DATABASE can be "all", "sameuser", "samerole", "replication", a +# database name, or a comma-separated list thereof. The "all" +# keyword does not match "replication". Access to replication +# must be enabled in a separate record (see example below). +# +# USER can be "all", a user name, a group name prefixed with "+", or a +# comma-separated list thereof. In both the DATABASE and USER fields +# you can also write a file name prefixed with "@" to include names +# from a separate file. +# +# ADDRESS specifies the set of hosts the record matches. It can be a +# host name, or it is made up of an IP address and a CIDR mask that is +# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that +# specifies the number of significant bits in the mask. A host name +# that starts with a dot (.) matches a suffix of the actual host name. +# Alternatively, you can write an IP address and netmask in separate +# columns to specify the set of hosts. Instead of a CIDR-address, you +# can write "samehost" to match any of the server's own IP addresses, +# or "samenet" to match any address in any subnet that the server is +# directly connected to. +# +# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256", +# "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". +# Note that "password" sends passwords in clear text; "md5" or +# "scram-sha-256" are preferred since they send encrypted passwords. +# +# OPTIONS are a set of options for the authentication in the format +# NAME=VALUE. The available options depend on the different +# authentication methods -- refer to the "Client Authentication" +# section in the documentation for a list of which options are +# available for which authentication methods. +# +# Database and user names containing spaces, commas, quotes and other +# special characters must be quoted. Quoting one of the keywords +# "all", "sameuser", "samerole" or "replication" makes the name lose +# its special character, and just match a database or username with +# that name. +# +# This file is read on server startup and when the server receives a +# SIGHUP signal. If you edit the file on a running system, you have to +# SIGHUP the server for the changes to take effect, run "pg_ctl reload", +# or execute "SELECT pg_reload_conf()". +# +# Put your actual configuration here +# ---------------------------------- +# +# If you want to allow non-local connections, you need to add more +# "host" records. In that case you will also need to make PostgreSQL +# listen on a non-local interface via the listen_addresses +# configuration parameter, or via the -i or -h command line switches. + +# CAUTION: Configuring the system for local "trust" authentication +# allows any local user to connect as any PostgreSQL user, including +# the database superuser. If you do not trust all your local users, +# use another authentication method. + + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all trust +# IPv4 local connections: +host all all 127.0.0.1/32 trust +# IPv6 local connections: +host all all ::1/128 trust +# Allow replication connections from localhost, by a user with the +# replication privilege. +local replication all trust +host replication all 127.0.0.1/32 trust +host replication all ::1/128 trust +# Require MD5 auth for all other connections +host all all 0.0.0.0/0 md5 diff --git a/dockerfiles/scripts/install-jsquery.sh b/dockerfiles/scripts/install-jsquery.sh deleted file mode 100644 index b7ef1d7..0000000 --- a/dockerfiles/scripts/install-jsquery.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -set -e - -if [ ! -f /var/lib/postgresql/pgdata/.jsquery_installed ]; then - # Fetch from remote repository - git clone https://github.com/postgrespro/jsquery.git - cd jsquery - - # Build jsQuery plugin - make USE_PGXS=1 && \ - make USE_PGXS=1 install && \ - - cd .. - echo "done" > /var/lib/postgresql/pgdata/.jsquery_installed -fi diff --git a/dockerfiles/scripts/install-temporal-tables.sh b/dockerfiles/scripts/install-temporal-tables.sh deleted file mode 100644 index 02404ff..0000000 --- a/dockerfiles/scripts/install-temporal-tables.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -set -e - -pg_ctl start -D ${PGDATA} - -# Fetch from branch "mlt" which has full support of Postgres 11 -git clone https://github.com/mlt/temporal_tables.git --branch mlt -cd temporal_tables - -# Build from source -make PGUSER=postgres && make install && make installcheck - -# Stop server -pg_ctl stop -D ${PGDATA} - -cd .. - diff --git a/dockerfiles/scripts/prepare-databases.sh b/dockerfiles/scripts/prepare-databases.sh index d232e8e..cb02c4c 100644 --- a/dockerfiles/scripts/prepare-databases.sh +++ b/dockerfiles/scripts/prepare-databases.sh @@ -1,11 +1,5 @@ #!/bin/bash -set -e - - -# Start server -pg_ctl start -D ${PGDATA} - echo "Creating schemas" # Setup schemas and activate extensions @@ -19,8 +13,3 @@ CREATE EXTENSION IF NOT EXISTS "ltree" SCHEMA ext; ALTER DATABASE ehrbase SET search_path to "$EHRBASE_USER",public,ext; GRANT ALL ON ALL FUNCTIONS IN SCHEMA ext TO $EHRBASE_USER; EOSQL - -# Stop server -pg_ctl stop -D ${PGDATA} - -echo "done" > /var/lib/postgresql/pgdata/.prepared diff --git a/dockerfiles/scripts/test-temporal-tables.sh b/dockerfiles/scripts/test-temporal-tables.sh new file mode 100644 index 0000000..8688e05 --- /dev/null +++ b/dockerfiles/scripts/test-temporal-tables.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +cd /scripts/temporal_tables + +# Build from source +make installcheck From 8f5c7579f92a21deeb3f8f0acca1f30d95320ad5 Mon Sep 17 00:00:00 2001 From: Paul G Webster Date: Wed, 3 Mar 2021 21:02:33 +0000 Subject: [PATCH 7/7] Force refresh of server credentials on re init --- dockerfiles/ehrbase-postgresql-full.dockerfile | 3 ++- dockerfiles/scripts/chain-load.sh | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/dockerfiles/ehrbase-postgresql-full.dockerfile b/dockerfiles/ehrbase-postgresql-full.dockerfile index de48074..82ceb53 100644 --- a/dockerfiles/ehrbase-postgresql-full.dockerfile +++ b/dockerfiles/ehrbase-postgresql-full.dockerfile @@ -61,6 +61,7 @@ RUN echo "DONE" > /scripts/.pginit COPY /scripts/chain-load.sh /docker-entrypoint-initdb.d/ # COPY the pg_hba to the PGDATA directory COPY /scripts/etc/pg_hba.conf ${PGDATA}/ -RUN chown -Rv postgres:postgres ${PGDATA} +RUN echo "Enforcing ownership, one moment" \ + && chown -R postgres:postgres ${PGDATA} EXPOSE 5432 diff --git a/dockerfiles/scripts/chain-load.sh b/dockerfiles/scripts/chain-load.sh index 0520c4f..98e96c3 100644 --- a/dockerfiles/scripts/chain-load.sh +++ b/dockerfiles/scripts/chain-load.sh @@ -40,6 +40,11 @@ elif [ "$STARTSERVER" == "SETUP" ]; then # Totally remove the PGDATA to force re-init on image start rm -Rf "${PGDATA}" elif [ "$STARTSERVER" == "SPAWNSET" ]; then + # If this is a move, then there will be no PGDATA/.spawn + if [ -f "${PGDATA}/.spawn" ]; then + exit 0; + fi + # Execute the DB init scripts, we are already the postgres user # Add in MD5 auth echo "listen_addresses='*'" >> ${PGDATA}/postgresql.conf @@ -52,6 +57,12 @@ elif [ "$STARTSERVER" == "SPAWNSET" ]; then echo "Creating default databases" eval ./prepare-databases.sh + + # To stop looping init + echo "DONE" > "${PGDATA}/.spawn" + echo "Restarting server" + sh -c "/scripts/chain-load.sh stop" + sh -c "/scripts/chain-load.sh start" elif [ "$STARTSERVER" == "PASSRESET" ]; then echo "Running: password-recrypt-set" eval ./password-recrypt-set.sh