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.
192 lines
3.8 KiB
192 lines
3.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 -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/
|
|
chown sympa:sympa -R /etc/dkimkeys
|
|
}
|
|
|
|
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 import_certbot {
|
|
if [[ -f "$export_tmp/certbot.tar" ]]; then
|
|
echo -n "import certbot..."
|
|
rm -rf /etc/letsencrypt
|
|
tar -xf "$export_tmp/certbot.tar" -C /
|
|
echo OK
|
|
fi
|
|
|
|
# change nginx
|
|
if ! grep -Pq '^\s+listen 443' /etc/nginx/sites-enabled/sympa.conf; then
|
|
tee /etc/nginx/sites-available/sympa.conf <<EOF
|
|
server {
|
|
listen 80;
|
|
server_name _;
|
|
return 301 https://\$host\$request_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443;
|
|
server_name _;
|
|
|
|
ssl_certificate /etc/letsencrypt/live/\$host/cert.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/\$host/privkey.pem;
|
|
|
|
rewrite ^/$ /wws permanent;
|
|
|
|
location /wws {
|
|
include fastcgi_params;
|
|
fastcgi_param SERVER_NAME \$host;
|
|
fastcgi_pass unix:/run/sympa/wwsympa.socket;
|
|
}
|
|
|
|
location /static-sympa {
|
|
alias /usr/share/sympa/static_content;
|
|
}
|
|
|
|
location /css-sympa {
|
|
alias /var/lib/sympa/css;
|
|
}
|
|
|
|
location /pictures-sympa {
|
|
alias /var/lib/sympa/pictures;
|
|
}
|
|
}
|
|
EOF
|
|
nginx -t && systemctl reload nginx
|
|
echo host for nginx installed successfully!
|
|
else
|
|
echo host SSL nginx already activated!
|
|
fi
|
|
}
|
|
|
|
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
|
|
import_certbot
|
|
start_services
|
|
migrate_sympa
|
|
|
|
remove_temp
|
|
}
|
|
|
|
## main
|
|
|
|
set -Eeu
|
|
assert_file $*
|
|
import
|