7 changed files with 306 additions and 28 deletions
			
			
		- 
					3.vscode/settings.json
 - 
					43sympa/bin/export.bash
 - 
					133sympa/bin/import.bash
 - 
					87sympa/bin/purge.bash
 - 
					4sympa/doc/install.md
 - 
					37sympa/doc/migration.md
 - 
					27sympa/migration.md
 
@ -0,0 +1,3 @@ | 
				
			|||
{ | 
				
			|||
    "editor.formatOnSave": true | 
				
			|||
} | 
				
			|||
@ -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 | 
				
			|||
@ -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 | 
				
			|||
@ -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 | 
				
			|||
@ -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 | 
				
			|||
@ -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 | 
				
			|||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue