#!/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 "$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 { 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 wwsympa_url replace_conf_entry_from_export lang } function import_files_sympa_lib { rm -rf /var/lib/sympa mv var/lib/sympa /var/lib } function import_files_sympa_spool { rm -rf /var/spool/sympa mv var/spool/sympa /var/spool } function import_files_postfix { mv etc/postfix/main.cf /etc/postfix/ mv etc/dkimkeys/mail.private /etc/dkimkeys/ rm -rf /etc/letsencrypt mv etc/letsencrypt /etc } 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 import_files_sympa_lib import_files_sympa_spool import_files_postfix 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 # execute as root or use `sudo` [[ $(id -u) != 0 ]] && exec sudo $(dirname "$0")/$(basename "$0") set -Eeu assert_file $* import