#!/usr/bin/env bash ## constants BASEDIR=$(dirname "$0") BASECMD=$(basename "$0") DB_NAME=sympa DB_USER="$DB_NAME" DB_PASS="$DB_NAME" ## functions function usage { echo "$BASECMD " } function assert_file { [[ $# != 1 ]] && usage && exit 1 file="$1" [[ ! -f $file ]] && echo "file not found: $file" && exit 2 true } function create_temp { echo -n "create_temp..." export_name=$(basename $file) export_tmp="/tmp/$export_name" mkdir "$export_tmp" echo OK } function uncompress_export_file { echo -n "uncompress export file..." tar -xf $file -C "$export_tmp" echo OK } function import_database { echo -n "import database $DB_NAME..." sudo -u postgres dropdb "$DB_NAME" 2>/dev/null sudo -u postgres createdb -O "$DB_USER" "$DB_NAME" 2>/dev/null gunzip -c "$export_tmp"/database.psql.gz | PGPASSWORD="$DB_PASS" psql -h localhost -U "$DB_USER" "$DB_NAME" echo OK } function replace_conf_entry_from_export { local export_conf=etc/sympa/sympa/sympa.conf local final_conf="/$export_conf" local key="$1" local pattern="^$key.*" local replacement=$(grep $pattern $export_conf) local ksh93=${replacement//\//\\/} sed -i "s/$pattern/$ksh93/" "$final_conf" } function import_files_etc_sympa { mv etc/sympa/auth.conf /etc/sympa/ mv etc/sympa/data_structure.version /etc/sympa/ replace_conf_entry_from_export domain replace_conf_entry_from_export listmaster replace_conf_entry_from_export lang } function import_files_etc_dkimkeys { mkdir -p /etc/dkimkeys mv etc/dkimkeys/* /etc/dkimkeys/ /opt/miaou-bash/tools/append_or_replace "^Domain\t.*" "Domain\t\t\t\t$(hostname -f)" /etc/opendkim.conf /opt/miaou-bash/tools/append_or_replace "^KeyFile\t.*" "KeyFile\t\t\t\t/etc/dkimkeys/mail.private" /etc/opendkim.conf /opt/miaou-bash/tools/append_or_replace "^Selector\t.*" "Selector\t\t\tmail" /etc/opendkim.conf /opt/miaou-bash/tools/append_or_replace "^Socket\t.*" "Socket\t\t\tinet:12345@localhost" /etc/opendkim.conf systemctl restart opendkim.service } function import_files_lib { rm -rf /var/lib/sympa mv var/lib/sympa /var/lib } function import_files_spool { rm -rf /var/spool/sympa mv var/spool/sympa /var/spool } function import_files { echo -n "import files..." files_temp="$export_tmp/files" mkdir "$files_temp" cd "$files_temp" tar -xf "$export_tmp/files.tar.gz" import_files_etc_sympa [[ -d etc/dkimkeys ]] && import_files_etc_dkimkeys import_files_lib import_files_spool echo OK } function migrate_sympa { echo -n "migrate sympa..." /usr/lib/sympa/bin/sympa.pl upgrade 2>&1 echo OK } function stop_services { echo -n "stop services..." sudo systemctl stop sympa.service sudo systemctl stop wwsympa.socket echo OK } function start_services { echo -n "start services..." sudo systemctl start sympa.service sudo systemctl start wwsympa.socket echo OK } function remove_temp { echo -n "remove temp..." rm -rf "$export_tmp" echo OK } function import { create_temp uncompress_export_file stop_services import_database import_files start_services migrate_sympa remove_temp } ## main set -Eeu assert_file $* import