ScoDoc/tools/migrate_from_scodoc7.sh

119 lines
3.7 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
#
# 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 "Importer les 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)"
read -r ans
if [ "$(norm_ans "$ans")" != 'N' ]
then
(cd "$SCODOC_DIR" && flask user-db-import-scodoc7)
fi