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.

137 lines
2.6 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_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
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
# execute as root or use `sudo`
[[ $(id -u) != 0 ]] && exec sudo $(dirname "$0")/$(basename "$0")
set -Eeu
assert_file $*
import