#!/bin/bash # Migre une install ScoDoc 7 vers ScoDoc 9 # Les données ScoDoc7 sauvegardées par save_scodoc7_data.sh # sont copiés au bon endroit # puis les bases SQL ScoDoc 7 sont traduites dans la base ScoDoc 9 # # Fichiers de données et config locale: # archives, photos: /opt/scodoc/var/ => /opt/scodoc-data # # set -euo pipefail # Le répertoire de ce script: SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" source "$SCRIPT_DIR/config.sh" source "$SCRIPT_DIR/utils.sh" cd "$SCODOC_DIR" || die "ScoDoc 9 non installe" source "venv/bin/activate" # Ce script doit tourner comme "root" check_uid_root "$0" # En principe, l'utilisateur "scodoc" existe déjà, mais au cas où on vérifie: check_create_scodoc_user # Usage if [ ! $# -eq 1 ] then echo "Usage: $0 directory" exit 1 fi SCODOC7_HOME="$1" # racine de l'archive importée #SCODOC7_HOME="/opt/scodoc7" #SCODOC7_DIR="${SCODOC7_HOME}/Products/ScoDoc" # if [ "${SRC##*.}" == "tgz" ] # then # if [ -e ${SRC%%.*} ] # then # echo "Error: ${SRC} is an archive but ${SRC%%.*} already exists" # exit 2 # fi # echo "extracting archive ${SRC}..." # tar xvfz ... # --- 2. Propriétaire des bases de données # Bases appartenant à www-data: # inutile si on importe via pg_restore (voir restore-scodoc7_data.sh) migrate_database_ownership() { SCO7_BASES=$(su -c "psql -l -t | grep www-data" "$POSTGRES_SUPERUSER" | awk -F '|' '{print $1}') for base in $SCO7_BASES do su -c "psql -c 'REASSIGN OWNED BY \"www-data\" TO scodoc;' $base" "$POSTGRES_SUPERUSER" done su -c "psql -c 'REASSIGN OWNED BY \"www-data\" TO scodoc;'" "$POSTGRES_SUPERUSER" } # --- 3. Fichiers locaux: /opt/scodoc/var => /opt/scodoc-data migrate_local_files() { echo "Déplacement des fichiers de configuration et des archives" SCODOC_VAR_DIR_BACKUP="$SCODOC_VAR_DIR".bak if [ -e "$SCODOC_VAR_DIR_BACKUP" ] then die "supprimer ou déplacer $SCODOC_VAR_DIR_BACKUP avant de continuer" fi if [ -e "$SCODOC_VAR_DIR" ] then echo "renomme $SCODOC_VAR_DIR en $SCODOC_VAR_DIR_BACKUP" mv "$SCODOC_VAR_DIR" "$SCODOC_VAR_DIR_BACKUP" fi mkdir "$SCODOC_VAR_DIR" || die "erreur creation repertoire" mv "${SCODOC7_HOME}"/var/scodoc/* "$SCODOC_VAR_DIR" || die "migrate_local_files failed" # Anciens logs ScoDoc7 old_logs_dest="$SCODOC_VAR_DIR/log/scodoc7" echo "Copie des anciens logs ScoDoc 7 dans $old_logs_dest" mkdir -p "$old_logs_dest" || die "erreur creation $old_logs_dest" mv "${SCODOC7_HOME}"/log/* "$old_logs_dest" || die "erreur mv" # Templates locaux poursuites etudes if [ -e "${SCODOC7_HOME}"/config/doc_poursuites_etudes/local ] then mv "${SCODOC7_HOME}"/config/doc_poursuites_etudes/local "$SCODOC_VAR_DIR"/config/doc_poursuites_etudes || die "migrate_local_files failed to migrate doc_poursuites_etudes/local" fi # S'assure que le propriétaire est "scodoc": chown -R "${SCODOC_USER}:${SCODOC_GROUP}" "${SCODOC_VAR_DIR}" || die "change_scodoc_file_ownership failed on ${SCODOC_VAR_DIR}" } # ------ MAIN change_scodoc_file_ownership migrate_local_files set_scodoc_var_dir echo echo "Les fichiers locaux de ScoDoc: configuration, photos, procès-verbaux..." echo "sont maintenant stockées dans $SCODOC_VAR_DIR" echo # ----- Migration base utilisateurs echo echo "-------------------------------------------------------------" echo "Importation des utilisateurs de ScoDoc7 dans ScoDoc 9 " echo "(la base SCOUSERS de ScoDoc7 sera laissée inchangée)" echo "(les utilisateurs ScoDoc 9 existants seront laissés inchangés)" echo "-------------------------------------------------------------" echo su -c "(cd $SCODOC_DIR && flask import-scodoc7-users)" "$SCODOC_USER" # ----- Migration bases départements # les départements ScoDoc7 ont été déplacés dans /opt/scodoc-data/config/dept for f in "$SCODOC_VAR_DIR"/config/depts/*.cfg do dept=$(basename "${f%.*}") db_name=$(echo "SCO$dept" | tr "[:lower:]" "[:upper:]") echo echo "----------------------------------------------" echo "| MIGRATION DU DEPARTEMENT $dept" echo "----------------------------------------------" su -c "(cd $SCODOC_DIR && flask import-scodoc7-dept $dept $db_name)" "$SCODOC_USER" echo "restarting postgresql server..." systemctl restart postgresql done # Précaution a priori inutile (import-scodoc7-dept efface les caches) systemctl restart redis # Commande listant les nom des departement en DB: # Liste des bases de données de département: # dept_db=$(psql -l | awk '{print $1;}' | grep ^SCO | grep -v SCOUSERS | grep -v SCO8USERS | awk '{print substr($1,4);}')