You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
2.8 KiB
145 lines
2.8 KiB
#!/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 <file.sympa>"
|
|
}
|
|
|
|
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
|