ScoDoc/tools/migrate_from_scodoc7.sh

143 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# Migre une install ScoDoc 7 vers ScoDoc 8
# Le ScoDoc7 est supposé être dans /opt/scodoc7/Products/ScoDoc
# Le nouveau est /opt/scodoc/
#
# L'install ScoDoc7 de départ doit impérativement être à jour (upgrade.sh).
#
# 1- Utilisateur Unix:
# scodoc7 tournait comme www-data
# scodoc >= 8 tourne sous l'utilisateur unix scodoc
#
# 2- Utilisateur postgresql (bases de données)
# scodoc7 les bases appartenaient à "www-data"
# s'assure que les bases de département (trouvées dans config/dept/*.cfg)
# appartiennent à "scodoc"
# idem pour la base SCOUSERS (avant sa migration vers SCO8USERS)
#
# 3- Fichiers de données et config locale:
# archives, photos: /opt/scodoc/var/ => /opt/scodoc-data
#
# 4- TODO migrer de Apache à nginx, scripts service systemd
#
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"
check_uid_root
SCODOC7_HOME="/opt/scodoc7"
SCODOC7_DIR="${SCODOC7_HOME}/Products/ScoDoc"
# --- 2. Propriétaire des bases de données
# Bases appartenant à www-data:
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() {
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
mv "${SCODOC7_HOME}"/var/scodoc/* "$SCODOC_VAR_DIR" || die "migrate_local_files failed"
# Templates locaux poursuites etudes
if [ -e "${SCODOC7_DIR}"/config/doc_poursuites_etudes/local ]
then
mv "${SCODOC7_DIR}"/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
check_create_scodoc_user
echo
echo -n "Changer si nécessaire le propriétaire des fichiers de $SCODOC_DIR ? (y/n) [y] "
read -r ans
if [ "$(norm_ans "$ans")" != 'N' ]
then
change_scodoc_file_ownership
fi
echo
echo -n "Changer si nécessaire le propriétaire des bases de données SQL ? (y/n) [y] "
read -r ans
if [ "$(norm_ans "$ans")" != 'N' ]
then
migrate_database_ownership
fi
echo
echo "Les fichiers locaux de ScoDoc (configuration, photos, procès-verbaux...)"
echo "sont maintenant stockées dans $SCODOC_VAR_DIR"
echo -n "Copier les fichiers locaux de ScoDoc7 ? (y/n) [y] "
read -r ans
if [ "$(norm_ans "$ans")" != 'N' ]
then
migrate_local_files
else
echo -n "Vérifier et créer si besoin le répertoire local /opt/scodoc-data ?"
read -r ans
if [ "$(norm_ans "$ans")" != 'N' ]
then
set_scodoc_var_dir
fi
fi
# ----- Migration base utilisateurs
echo
echo "-------------------------------------------------------------"
echo "Importation des utilisateurs de ScoDoc7 dans ScoDoc8 "
echo "(la base SCOUSERS de ScoDoc7 sera laissée inchangée)"
echo "(les utilisateurs ScoDoc8 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%.*}")
echo
echo "----------------------------------------------"
echo "| MIGRATION DU DEPARTEMENT $dept"
echo "----------------------------------------------"
su -c "(cd $SCODOC_DIR && flask import-scodoc7-dept)" "$dept"
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);}')