Browse Source

import/export

main
pvincent 2 weeks ago
parent
commit
651f374a9d
  1. 3
      .vscode/settings.json
  2. 43
      sympa/bin/export.bash
  3. 133
      sympa/bin/import.bash
  4. 87
      sympa/bin/purge.bash
  5. 4
      sympa/doc/install.md
  6. 37
      sympa/doc/migration.md
  7. 27
      sympa/migration.md

3
.vscode/settings.json

@ -0,0 +1,3 @@
{
"editor.formatOnSave": true
}

43
sympa/bin/export.bash

@ -0,0 +1,43 @@
#!/usr/bin/env bash
### CONSTANTS
SYMPA_CONF=/etc/sympa/sympa/sympa.conf
SYMPA_DOMAIN=$(grep '^domain' "$SYMPA_CONF" | cut -f2)
### FUNCTIONS
function create_temp_dir {
temp_name="$SYMPA_DOMAIN-$(date '+%F')"
temp_dir="/tmp/$temp_name"
mkdir "$temp_dir"
}
function export_database {
db_name=sympa
db_user=sympa
db_passwd=$(grep '^db_passwd' /etc/sympa/sympa/sympa.conf | cut -f2)
PGPASSWORD=$db_passwd pg_dump -h localhost -U "$db_user" "$db_name" | gzip >"$temp_dir/database.psql.gz"
}
function export_files {
tar -C / -cf "$temp_dir/files.tar" etc/sympa/sympa/sympa.conf
tar -C / -uf "$temp_dir/files.tar" etc/sympa/data_structure.version
tar -C / -uf "$temp_dir/files.tar" etc/sympa/auth.conf
tar -C / -uf "$temp_dir/files.tar" var/lib/sympa
tar -C / -uf "$temp_dir/files.tar" var/spool/sympa
gzip "$temp_dir/files.tar"
}
function export {
create_temp_dir
export_database
export_files
tar -C "$temp_dir" -cf "$temp_name.sympa" .
rm "$temp_dir" -rf
}
### MAIN
set -Eeu
export

133
sympa/bin/import.bash

@ -0,0 +1,133 @@
#!/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
set -Eeu
assert_file $*
import

87
sympa/bin/purge.bash

@ -0,0 +1,87 @@
#!/usr/bin/env bash
### CONSTANTS
SYMPA_CONF=/etc/sympa/sympa/sympa.conf
SYMPA_DOMAIN=$(grep '^domain' "$SYMPA_CONF" | cut -f2)
### FUNCTIONS
function purge {
# LIB/ARCHIVE
for arc_entry in /var/lib/sympa/arc/*; do
arc_name=$(basename "$arc_entry")
if [[ $arc_name != '*' ]] && [[ $arc_name != *"@$SYMPA_DOMAIN" ]]; then
rm /var/lib/sympa/arc/"$arc_name" -rf
echo "archive [$arc_name] removed!"
fi
done
# LIB/BOUNCE
for bounce_entry in /var/lib/sympa/bounce/*; do
bounce_name=$(basename "$bounce_entry")
if [[ $bounce_name != '*' ]] && [[ $bounce_name != *"@$SYMPA_DOMAIN" ]]; then
rm /var/lib/sympa/bounce/"$bounce_name" -rf
echo "bounce [$bounce_name] removed!"
fi
done
# SPOOL/DIGEST
for digest_entry in /var/spool/sympa/digest/*; do
digest_name=$(basename "$digest_entry")
if [[ $digest_name != '*' ]] && [[ $digest_name != *"@$SYMPA_DOMAIN"* ]]; then
rm /var/spool/sympa/digest/"$digest_name" -rf
echo "digest [$digest_name] removed!"
fi
done
# SPOOL/VIEWMAIL/BOUNCE
for bounce_entry in /var/spool/sympa/viewmail/bounce/*; do
bounce_name=$(basename "$bounce_entry")
if [[ $bounce_name != '*' ]] && [[ $bounce_name != *"@$SYMPA_DOMAIN"* ]]; then
rm /var/spool/sympa/viewmail/bounce/"$bounce_name" -rf
echo "viewmail/bounce [$bounce_name] removed!"
fi
done
# SPOOL/VIEWMAIL/MOD
for mod_entry in /var/spool/sympa/viewmail/mod/*; do
mod_name=$(basename "$mod_entry")
if [[ $mod_name != '*' ]] && [[ $mod_name != *"@$SYMPA_DOMAIN"* ]]; then
rm /var/spool/sympa/viewmail/mod/"$mod_name" -rf
echo "viewmail/mod [$mod_name] removed!"
fi
done
}
function create_temp_dir {
temp_dir="$SYMPA_DOMAIN-$(date '+%F')"
mkdir "$temp_dir"
echo "$temp_dir"
}
function export {
echo "temp_dir=$temp_dir"
cd "$temp_dir"
db_name=sympa
db_user=sympa
db_passwd=$(grep '^db_passwd' /etc/sympa/sympa/sympa.conf | cut -f2)
PGPASSWORD=$db_passwd pg_dump -h localhost -U "$db_user" "$db_name" | gzip >"$db_name.psql.gz"
cp "$SYMPA_CONF" .
tar -czvf lib-sympa.tgz /var/lib/sympa
tar -czvf spool-sympa.tgz /var/spool/sympa
cd ..
tar -cf "$temp_dir.sympa" "$temp_dir"
rm "$temp_dir" -rf
}
### MAIN
set -Eeu
purge

4
sympa/install.md → sympa/doc/install.md

@ -46,7 +46,7 @@ LISTMASTER=pvincent@artcode.re
## Nginx + fastcgi
* apt install -y postfix postgresql nginx fcgiwrap
* apt install -y postfix postgresql nginx fcgiwrap perl-doc
* domain: {{PUBLIC_URL}}
* apt install -y sympa
* editor /etc/sympa/sympa/sympa.conf
@ -87,3 +87,5 @@ server {
## after any sympa change!
* systemctl restart wwsympa.socket

37
sympa/doc/migration.md

@ -0,0 +1,37 @@
Migration
=========
```
From: debian9, sympa 6.2.16
To: debian12, sympa 6.2.70
```
## Documentation
* https://www.sympa.community/manual/upgrade/in-place.html
* https://www.sympa.community/manual/upgrade/move.html
## export
1. temp dir
* sympa_domain=$(grep '^domain' /etc/sympa/sympa/sympa.conf | cut -f2)
* temp_dir="$sympa_domain-$(date '+%F')"
* mkdir $temp_dir && cd $temp_dir || echo 'already exist!' && false
2. database backup
* db_name=sympa
* db_user=sympa
* db_passwd=$(grep '^db_passwd' /etc/sympa/sympa/sympa.conf | cut -f2)
* PGPASSWORD=$db_passwd pg_dump -h localhost -U "$db_user" "$db_name" | gzip > "$db_name.psql.gz"
3. tar
1. /etc/sympa
* cp /etc/sympa/sympa/sympa.conf .
2. /var/lib/sympa
* tar -czvf lib-sympa.tgz /var/lib/sympa
3. /var/spool/sympa
* tar -czvf spool-sympa.tgz /var/spool/sympa
## import
1. database restore
2. tar
1. /etc/sympa/sympa/sympa.conf

27
sympa/migration.md

@ -1,27 +0,0 @@
Migration
=========
```
From: debian9, sympa 6.2.16
To: debian12, sympa 6.2.70
```
## Documentation
* https://www.sympa.community/manual/upgrade/in-place.html
* https://www.sympa.community/manual/upgrade/move.html
## export
1. database backup
2. tar
1. /etc/sympa
2. /var/lib/sympa
3. /var/spool/sympa
## import
1. database restore
2. tar
1. /etc/sympa/sympa/sympa.conf
Loading…
Cancel
Save