From dc8844b76b09db806c5f543a3f9d9e016ef45d36 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zolt=C3=A1n=20Felleg?= Date: Sat, 20 Dec 2025 10:18:51 +0100 Subject: [PATCH] Updated pgs.in (synchronized from/with qqcs-lxc). --- .../c3d/firstboot/data/postgresql.clusters | 2 + .../c3d/firstboot/scripts/10_setuppostgres.sh | 73 ++++++++++ .../firstboot/scripts/10_setuppostgresql.sh | 67 --------- .../c3d/firstboot/scripts/90_setupservices.sh | 18 ++- .../usr/local/bin/archive_command.sh | 22 +-- .../usr/local/bin/backup_postgresql.sh | 136 +++++++++++++----- .../usr/local/bin/restore_command.sh | 20 +-- .../postinstall/scripts/10_setupservices.sh | 2 + .../postinstall/scripts/20_setupcrontab.sh | 4 - sources/pgs.in/envvars | 6 +- 10 files changed, 222 insertions(+), 128 deletions(-) create mode 100644 sources/pgs.in/c3d/firstboot/data/postgresql.clusters create mode 100755 sources/pgs.in/c3d/firstboot/scripts/10_setuppostgres.sh delete mode 100755 sources/pgs.in/c3d/firstboot/scripts/10_setuppostgresql.sh mode change 100644 => 100755 sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/archive_command.sh mode change 100644 => 100755 sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/backup_postgresql.sh mode change 100644 => 100755 sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/restore_command.sh delete mode 100755 sources/pgs.in/c3d/postinstall/scripts/20_setupcrontab.sh diff --git a/sources/pgs.in/c3d/firstboot/data/postgresql.clusters b/sources/pgs.in/c3d/firstboot/data/postgresql.clusters new file mode 100644 index 0000000..fa2e59f --- /dev/null +++ b/sources/pgs.in/c3d/firstboot/data/postgresql.clusters @@ -0,0 +1,2 @@ +prod:5432 +td:54321 diff --git a/sources/pgs.in/c3d/firstboot/scripts/10_setuppostgres.sh b/sources/pgs.in/c3d/firstboot/scripts/10_setuppostgres.sh new file mode 100755 index 0000000..c9f580f --- /dev/null +++ b/sources/pgs.in/c3d/firstboot/scripts/10_setuppostgres.sh @@ -0,0 +1,73 @@ +#!/bin/sh + + +SCRIPT_PATH=$(realpath $(dirname $0)) +DATA_PATH=$(realpath $SCRIPT_PATH/../data) + +FQ_POSTGRESQL_PATH=/data/postgresql +FQ_BACKUP_PATH=$FQ_POSTGRESQL_PATH/backups +FQ_DUMP_PATH=$FQ_POSTGRESQL_PATH/dumps +FQ_WAL_ARCHIVE_PATH=$FQ_POSTGRESQL_PATH/wal-archive + + +# create the base directory structure +if [ ! -d $FQ_POSTGRESQL_PATH ] +then + mkdir $FQ_POSTGRESQL_PATH +fi +chown postgres:postgres $FQ_POSTGRESQL_PATH +chmod 700 $FQ_POSTGRESQL_PATH +if [ ! -d $FQ_BACKUP_PATH ] +then + mkdir $FQ_BACKUP_PATH +fi +chown postgres:postgres $FQ_BACKUP_PATH +chmod 700 $FQ_BACKUP_PATH +if [ ! -d $FQ_DUMP_PATH ] +then + mkdir $FQ_DUMP_PATH +fi +chown postgres:postgres $FQ_DUMP_PATH +chmod 700 $FQ_DUMP_PATH +if [ ! -d $FQ_WAL_ARCHIVE_PATH ] +then + mkdir $FQ_WAL_ARCHIVE_PATH +fi +chown postgres:postgres $FQ_WAL_ARCHIVE_PATH +chmod 700 $FQ_WAL_ARCHIVE_PATH + + +# create the database clusters (production, test & development) +cat $DATA_PATH/postgresql.clusters | while read DBC_NAME_PORT +do + DBC_NAME=$(echo $DBC_NAME_PORT | cut -f 1 -d ':') + DBC_PORT=$(echo $DBC_NAME_PORT | cut -f 2 -d ':') + DBC_PATH=${DBC_NAME}-dbc + FQ_DBC_PATH=$FQ_POSTGRESQL_PATH/$DBC_PATH + FQ_DBC_WAL_ARCHIVE_PATH=$FQ_WAL_ARCHIVE_PATH/$DBC_PATH + + if [ ! -d $FQ_DBC_WAL_ARCHIVE_PATH ] + then + mkdir $FQ_DBC_WAL_ARCHIVE_PATH + fi + chown postgres:postgres $FQ_DBC_WAL_ARCHIVE_PATH + chmod 700 $FQ_DBC_WAL_ARCHIVE_PATH + + postgresql-new-systemd-unit \ + --unit postgresql@$DBC_NAME \ + --datadir $FQ_DBC_PATH + + if [ ! -d $FQ_DBC_PATH ] + then + postgresql-setup \ + --initdb \ + --port=$DBC_PORT \ + --unit=postgresql@$DBC_NAME + fi +done + +sed --in-place=.orig \ + 's/^MAILTO=root$/MAILTO=zoltan.felleg@userrendszerhaz.hu/' \ + /etc/crontab +echo >>/etc/crontab +echo '0 2 * * * postgres /usr/local/bin/backup_postgresql.sh' >>/etc/crontab diff --git a/sources/pgs.in/c3d/firstboot/scripts/10_setuppostgresql.sh b/sources/pgs.in/c3d/firstboot/scripts/10_setuppostgresql.sh deleted file mode 100755 index 4a080df..0000000 --- a/sources/pgs.in/c3d/firstboot/scripts/10_setuppostgresql.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh - - -POSTGRESQL_PATH=/data/postgresql -DUMP_PATH=$POSTGRESQL_PATH/dumps -WAL_ARCHIVE_PATH=$POSTGRESQL_PATH/wal-archive - - -if [ ! -d $POSTGRESQL_PATH ] -then - mkdir $POSTGRESQL_PATH -fi -chown postgres:postgres $POSTGRESQL_PATH -if [ ! -d $DUMP_PATH ] -then - mkdir $DUMP_PATH -fi -chown postgres:postgres $DUMP_PATH -if [ ! -d $WAL_ARCHIVE_PATH ] -then - mkdir $WAL_ARCHIVE_PATH -fi - -# create the main database cluster -MAIN_DBC_NAME=main-dbc -MAIN_DBC_PATH=$POSTGRESQL_PATH/$MAIN_DBC_NAME -MAIN_DBC_DUMP_PATH=$DUMP_PATH/$MAIN_DBC_NAME -MAIN_DBC_WAL_ARCHIVE_PATH=$WAL_ARCHIVE_PATH/$MAIN_DBC_NAME - -if [ ! -d $MAIN_DBC_DUMP_PATH ] -then - mkdir $MAIN_DBC_DUMP_PATH -fi -chown postgres:postgres $MAIN_DBC_DUMP_PATH -if [ ! -d $MAIN_DBC_WAL_ARCHIVE_PATH ] -then - mkdir $MAIN_DBC_WAL_ARCHIVE_PATH -fi -chown postgres:postgres $MAIN_DBC_WAL_ARCHIVE_PATH - -postgresql-new-systemd-unit \ - --unit postgresql@main \ - --datadir $MAIN_DBC_PATH - -if [ ! -d $MAIN_DBC_PATH ] -then - postgresql-setup \ - --initdb \ - --port=5432 \ - --unit=postgresql@main -fi - -# create the test & devel database cluster -TD_DBC_NAME=td-dbc -TD_DBC_PATH=$POSTGRESQL_PATH/$TD_DBC_NAME - -postgresql-new-systemd-unit \ - --unit postgresql@td \ - --datadir $TD_DBC_PATH - -if [ ! -d $TD_DBC_PATH ] -then - postgresql-setup \ - --initdb \ - --port=54321 \ - --unit=postgresql@td -fi diff --git a/sources/pgs.in/c3d/firstboot/scripts/90_setupservices.sh b/sources/pgs.in/c3d/firstboot/scripts/90_setupservices.sh index 4830d4e..10600f1 100755 --- a/sources/pgs.in/c3d/firstboot/scripts/90_setupservices.sh +++ b/sources/pgs.in/c3d/firstboot/scripts/90_setupservices.sh @@ -1,12 +1,22 @@ #!/bin/sh -systemctl enable postgresql@main.service -systemctl start postgresql@main.service -systemctl enable postgresql@td.service -systemctl start postgresql@td.service +SCRIPT_PATH=$(realpath $(dirname $0)) +DATA_PATH=$(realpath $SCRIPT_PATH/../data) + + systemctl enable NetworkManager-wait-online.service systemctl start NetworkManager-wait-online.service +systemctl enable crond.service +systemctl start crond.service +systemctl enable postfix.service +systemctl start postfix.service +cat $DATA_PATH/postgresql.clusters | while read DBC_NAME_PORT +do + DBC_NAME=$(echo $DBC_NAME_PORT | cut -f 1 -d ':') + systemctl enable postgresql@${DBC_NAME}.service + systemctl start postgresql@${DBC_NAME}.service +done systemctl enable logrotate.timer systemctl start logrotate.timer diff --git a/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/archive_command.sh b/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/archive_command.sh old mode 100644 new mode 100755 index 79ec5b8..326942a --- a/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/archive_command.sh +++ b/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/archive_command.sh @@ -11,18 +11,20 @@ FQ_WAL_FILE=$1 WAL_FILE=$2 -POSTGRESQL_PATH=/data/postgresql -WAL_ARCHIVE_PATH=$POSTGRESQL_PATH/wal-archive -MAIN_DBC_NAME=main-dbc -MAIN_DBC_PATH=$POSTGRESQL_PATH/$MAIN_DBC_NAME -MAIN_DBC_WAL_ARCHIVE_PATH=$WAL_ARCHIVE_PATH/$MAIN_DBC_NAME +FQ_POSTGRESQL_PATH=/data/postgresql +FQ_WAL_ARCHIVE_PATH=$FQ_POSTGRESQL_PATH/wal-archive +DBC_NAME=prod +DBC_PATH=${DBC_NAME}-dbc +FQ_DBC_PATH=$FQ_POSTGRESQL_PATH/$DBC_PATH +FQ_DBC_WAL_ARCHIVE_PATH=$FQ_WAL_ARCHIVE_PATH/$DBC_PATH -if [ -f $MAIN_DBC_WAL_ARCHIVE_PATH/${WAL_FILE}.gz ] + +if [ -f $FQ_DBC_WAL_ARCHIVE_PATH/${WAL_FILE}.gz ] then - ARCHIVED_CHECKSUM=$(md5sum $MAIN_DBC_WAL_ARCHIVE_PATH/${WAL_FILE}.gz \ + ARCHIVED_CHECKSUM=$(md5sum $FQ_DBC_WAL_ARCHIVE_PATH/${WAL_FILE}.gz \ | cut -f 1 -d ' ') - CURRENT_CHECKSUM=$(gzip --to-stdout $MAIN_DBC_PATH/$FQ_WAL_FILE \ + CURRENT_CHECKSUM=$(gzip --to-stdout $FQ_DBC_PATH/$FQ_WAL_FILE \ | md5sum | cut -f 1 -d ' ') if [ "$ARCHIVED_CHECKSUM" == "$CURRENT_CHECKSUM" ] then @@ -31,6 +33,6 @@ then exit 1 fi else - cp --archive $MAIN_DBC_PATH/$FQ_WAL_FILE $MAIN_DBC_WAL_ARCHIVE_PATH - gzip $MAIN_DBC_WAL_ARCHIVE_PATH/$WAL_FILE + cp --archive $FQ_DBC_PATH/$FQ_WAL_FILE $FQ_DBC_WAL_ARCHIVE_PATH + gzip $FQ_DBC_WAL_ARCHIVE_PATH/$WAL_FILE fi diff --git a/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/backup_postgresql.sh b/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/backup_postgresql.sh old mode 100644 new mode 100755 index 88fe675..b9338ef --- a/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/backup_postgresql.sh +++ b/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/backup_postgresql.sh @@ -2,51 +2,123 @@ CURRENT_DATE=$(date +%Y%m%d) -POSTGRESQL_PATH=/data/postgresql -DUMP_PATH=$POSTGRESQL_PATH/dumps -WAL_ARCHIVE_PATH=$POSTGRESQL_PATH/wal-archive -MAIN_DBC_NAME=main-dbc -MAIN_DBC_DUMP_PATH=$DUMP_PATH/$MAIN_DBC_NAME -MAIN_DBC_WAL_ARCHIVE_PATH=$WAL_ARCHIVE_PATH/$MAIN_DBC_NAME -MAIN_DBC_DUMP_FILE=$MAIN_DBC_DUMP_PATH/dumpall.$CURRENT_DATE +FQ_POSTGRESQL_PATH=/data/postgresql +FQ_BACKUP_PATH=$FQ_POSTGRESQL_PATH/backups +FQ_DUMP_PATH=$FQ_POSTGRESQL_PATH/dumps +FQ_WAL_ARCHIVE_PATH=$FQ_POSTGRESQL_PATH/wal-archive +PROD_DBC_NAME=prod +PROD_DBC_PATH=${PROD_DBC_NAME}-dbc +PROD_DBC_BACKUP_PATH=${PROD_DBC_PATH}-$CURRENT_DATE +FQ_PROD_DBC_BACKUP_PATH=$FQ_BACKUP_PATH/$PROD_DBC_BACKUP_PATH +PROD_DBC_DUMP_FILE=${PROD_DBC_PATH}-$CURRENT_DATE +FQ_PROD_DBC_DUMP_FILE=$FQ_DUMP_PATH/$PROD_DBC_DUMP_FILE +FQ_PROD_DBC_WAL_ARCHIVE_PATH=$FQ_WAL_ARCHIVE_PATH/$PROD_DBC_PATH -pg_dumpall --clean --if-exists --file=$MAIN_DBC_DUMP_FILE -gzip $MAIN_DBC_DUMP_FILE +#create backup +echo -n "Backing up $PROD_DBC_NAME database cluster to " +echo "$FQ_PROD_DBC_BACKUP_PATH (via pg_basebackup)" +pg_basebackup \ + --pgdata=$FQ_PROD_DBC_BACKUP_PATH \ + --format=tar \ + --gzip \ + --label="$CURRENT_DATE" +# delete old backup(s) # non-start-or-middle-of-months -NONSOMOMS=$(ls $MAIN_DBC_DUMP_PATH/dumpall.* \ +REGEXP="^${PROD_DBC_PATH}-[0-9]\{8\}$" +NONSOMOMS=$(ls $FQ_BACKUP_PATH \ + | grep --regexp="$REGEXP" \ | grep --invert-match \ - --regexp='01.gz$' \ - --regexp='15.gz$' | wc -l) + --regexp='\(01\|15\)$' | wc -l) while [ $NONSOMOMS -gt 5 ] do - FIRST_NONSOMOM=$(ls $MAIN_DBC_DUMP_PATH/dumpall.* \ + FIRST_NONSOMOM=$(ls $FQ_BACKUP_PATH \ + | grep --regexp="$REGEXP" \ | grep --invert-match \ - --regexp='01.gz$' \ - --regexp='15.gz$' | wc -l) - rm --force --recursive $FIRST_NONSOMOM - NONSOMOMS=$(ls $MAIN_DBC_DUMP_PATH/dumpall.* \ + --regexp='\(01\|15\)$' | head -n 1) + rm --force --recursive $FQ_BACKUP_PATH/$FIRST_NONSOMOM + NONSOMOMS=$(ls $FQ_BACKUP_PATH \ + | grep --regexp="$REGEXP" \ | grep --invert-match \ - --regexp='01.gz$' \ - --regexp='15.gz$' | wc -l) + --regexp='\(01\|15\)$' | wc -l) +done +# start-or-middle-of-months +SOMOMS=$(ls $FQ_BACKUP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --regexp='\(01\|15\)$' | wc -l) +while [ $SOMOMS -gt 5 ] +do + FIRST_SOMOM=$(ls $FQ_BACKUP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --regexp='\(01\|15\)$' | head -n 1) + rm --force --recursive $FQ_BACKUP_PATH/$FIRST_SOMOM + SOMOMS=$(ls $FQ_BACKUP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --regexp='\(01\|15\)$' | wc -l) done +# create dump +echo -n "Backing up $PROD_DBC_NAME database cluster to " +echo "${FQ_PROD_DBC_DUMP_FILE}.gz (via pg_dumpall)" +rm --force $FQ_PROD_DBC_DUMP_FILE ${FQ_PROD_DBC_DUMP_FILE}.gz +pg_dumpall --clean --if-exists --file=$FQ_PROD_DBC_DUMP_FILE +gzip $FQ_PROD_DBC_DUMP_FILE +chmod 600 ${FQ_PROD_DBC_DUMP_FILE}.gz + +# delete old dump(s) +# non-start-or-middle-of-months +REGEXP="^${PROD_DBC_PATH}-[0-9]\{8\}\.gz$" +NONSOMOMS=$(ls $FQ_DUMP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --invert-match \ + --regexp='\(01\|15\)\.gz$' | wc -l) +while [ $NONSOMOMS -gt 5 ] +do + FIRST_NONSOMOM=$(ls $FQ_DUMP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --invert-match \ + --regexp='\(01\|15\)\.gz$' | head -n 1) + rm --force $FQ_DUMP_PATH/$FIRST_NONSOMOM + NONSOMOMS=$(ls $FQ_DUMP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --invert-match \ + --regexp='\(01\|15\)\.gz$' | wc -l) +done # start-or-middle-of-months -SOMOMS=$(ls $MAIN_DBC_DUMP_PATH/dumpall.* \ - | grep --regexp='01.gz$' \ - --regexp='15.gz$' | wc -l) +SOMOMS=$(ls $FQ_DUMP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --regexp='\(01\|15\)\.gz$' | wc -l) while [ $SOMOMS -gt 5 ] do - FIRST_SOMOM=$(ls $MAIN_DBC_DUMP_PATH/dumpall.* \ - | grep --regexp='01.gz$' \ - --regexp='15.gz$' | wc -l) - rm --force --recursive $FIRST_SOMOM - SOMOMS=$(ls $MAIN_DBC_DUMP_PATH/dumpall.* \ - | grep --regexp='01.gz$' \ - --regexp='15.gz$' | wc -l) + FIRST_SOMOM=$(ls $FQ_DUMP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --regexp='\(01\|15\)\.gz$' | head -n 1) + rm --force $FQ_DUMP_PATH/$FIRST_SOMOM + SOMOMS=$(ls $FQ_DUMP_PATH \ + | grep --regexp="$REGEXP" \ + | grep --regexp='\(01\|15\)\.gz$' | wc -l) done -# WAL -OLDEST_DUMP_FILE=$(ls -t $MAIN_DBC_DUMP_PATH/dumpall.* | head -n 1) -find $MAIN_DBC_WAL_ARCHIVE_PATH ! -newer $OLDEST_DUMP_FILE | xargs rm --force +# delete old/unneeded WAL file(s) +REGEXP="^${PROD_DBC_PATH}-[0-9]\{8\}$" +OLDEST_BACKUP_PATH=$(ls $FQ_BACKUP_PATH \ + | grep --regexp="$REGEXP" \ + | head -n 1) +FQ_OLDEST_BACKUP_PATH=$FQ_BACKUP_PATH/$OLDEST_BACKUP_PATH +FQ_OLDEST_WAL_TAR=$FQ_OLDEST_BACKUP_PATH/pg_wal.tar.gz +# OWFN: oldest wal file needed +OWFN=$(tar --list --file $FQ_OLDEST_WAL_TAR --gunzip \ + | sort | head -n 1) +# OAWFN: oldest archived wal file needed +FQ_OAWFN=$FQ_PROD_DBC_WAL_ARCHIVE_PATH/${OWFN}.gz +# AWF: archived wal file +ls $FQ_PROD_DBC_WAL_ARCHIVE_PATH | while read AWF +do + FQ_AWF=$FQ_PROD_DBC_WAL_ARCHIVE_PATH/$AWF + if [ $FQ_AWF -ot $FQ_OAWFN ] + then + echo "removing $FQ_AWF" + rm --force $FQ_AWF + fi +done diff --git a/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/restore_command.sh b/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/restore_command.sh old mode 100644 new mode 100755 index 7e389c9..dd36354 --- a/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/restore_command.sh +++ b/sources/pgs.in/c3d/postinstall/install-data/usr/local/bin/restore_command.sh @@ -18,18 +18,20 @@ FQ_WAL_FILE=$1 WAL_FILE=$2 -POSTGRESQL_PATH=/data/postgresql -WAL_ARCHIVE_PATH=$POSTGRESQL_PATH/wal-archive -MAIN_DBC_NAME=main-dbc -MAIN_DBC_PATH=$POSTGRESQL_PATH/$MAIN_DBC_NAME -MAIN_DBC_WAL_ARCHIVE_PATH=$WAL_ARCHIVE_PATH/$MAIN_DBC_NAME +FQ_POSTGRESQL_PATH=/data/postgresql +FQ_WAL_ARCHIVE_PATH=$FQ_POSTGRESQL_PATH/wal-archive +DBC_NAME=prod +DBC_PATH=${DBC_NAME}-dbc +FQ_DBC_PATH=$FQ_POSTGRESQL_PATH/$DBC_PATH +FQ_DBC_WAL_ARCHIVE_PATH=$FQ_WAL_ARCHIVE_PATH/$DBC_PATH -if [ -f $MAIN_DBC_WAL_ARCHIVE_PATH/${WAL_FILE}.gz ] + +if [ -f $FQ_DBC_WAL_ARCHIVE_PATH/${WAL_FILE}.gz ] then - cp --archive $MAIN_DBC_WAL_ARCHIVE_PATH/${WAL_FILE}.gz \ - $MAIN_DBC_PATH/${FQ_WAL_FILE}.gz - gunzip $MAIN_DBC_PATH/${FQ_WAL_FILE}.gz + cp --archive $FQ_DBC_WAL_ARCHIVE_PATH/${WAL_FILE}.gz \ + $FQ_DBC_PATH/${FQ_WAL_FILE}.gz + gunzip $FQ_DBC_PATH/${FQ_WAL_FILE}.gz else exit 1 fi diff --git a/sources/pgs.in/c3d/postinstall/scripts/10_setupservices.sh b/sources/pgs.in/c3d/postinstall/scripts/10_setupservices.sh index 15d7944..0101e2c 100755 --- a/sources/pgs.in/c3d/postinstall/scripts/10_setupservices.sh +++ b/sources/pgs.in/c3d/postinstall/scripts/10_setupservices.sh @@ -2,5 +2,7 @@ systemctl disable NetworkManager-wait-online.service +systemctl disable crond.service +systemctl disable postfix.service systemctl disable logrotate.timer diff --git a/sources/pgs.in/c3d/postinstall/scripts/20_setupcrontab.sh b/sources/pgs.in/c3d/postinstall/scripts/20_setupcrontab.sh deleted file mode 100755 index 033b8b4..0000000 --- a/sources/pgs.in/c3d/postinstall/scripts/20_setupcrontab.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - - -echo '10 2 * * * postgresql /usr/local/bin/backup_postgresql.sh' >>/etc/crontab diff --git a/sources/pgs.in/envvars b/sources/pgs.in/envvars index ba7cce9..175cb90 100644 --- a/sources/pgs.in/envvars +++ b/sources/pgs.in/envvars @@ -5,6 +5,8 @@ SPEC_PACKAGES="cronie \ glibc-langpack-en \ glibc-langpack-hu \ glibc-locale-source \ - postgresql-server \ + man-db \ openssh-clients \ - openssh-server" + openssh-server \ + postfix \ + postgresql-server" -- 2.54.0