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