diff --git a/tools/restore_scodoc9_data.sh b/tools/restore_scodoc9_data.sh index 43624ba8a..ca81a2955 100755 --- a/tools/restore_scodoc9_data.sh +++ b/tools/restore_scodoc9_data.sh @@ -24,25 +24,37 @@ usage() { exit 1 } -if (($# < 1 || $# > 2)) -then - usage -elif [ $# -eq 2 -a $1 != '--keep-env' -a $2 != '--keep-env' ] ; then - usage -elif [ $# -eq 1 ] ; then - echo "restauration des données et de la configuration originale (production)" - SRC=$1 - DB_DEST="SCODOC" -else - echo "restauration des données dans la configuration actuelle" - DB_CURRENT=$(su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask scodoc-database -n)") - DB_DEST="$DB_CURRENT" - KEEP=1 - if [ $1 = '--keep-env' ]; then +# détection des options -> ($SRC, $KEEP_ENV) sinon usage +# 1 ou 2 parametres et si 2, l un des deux doit être -keep-env +if [ $# -eq 1 ]; then + KEEP="" + SRC="$1" +elif [ $# -eq 2 ]; then + if [ "$1" = "--keep-env" ]; then + KEEP=1 SRC=$2 + elif [ "$2" = "--keep-env" ]; then + KEEP=1 + SRC="$1" else - SRC=$1 + usage fi +else + usage +fi + +if [ ! -e $SRC ]; then + echo "le fichier de restauration ($SRC) n'existe pas: Abandon de la restauration" + exit 1 +fi + +if [ -z $KEEP ]; then + echo "restauration des données tout en conservant la configuration actuelle" + DB_CURRENT=$(su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask scodoc-database -n)" "$SCODOC_USER") + DB_DEST="$DB_CURRENT" +else + echo "restauration des données et de la configuration originale (de production)" + DB_DEST="SCODOC" fi DB_DUMP="${SCODOC_VAR_DIR}"/SCODOC.dump @@ -55,22 +67,27 @@ echo "Attention: TOUTES LES DONNEES DE CE SCODOC SERONT REMPLACEES !" echo "Notamment, tous les utilisateurs et departements existants seront effaces !" echo echo "La base SQL $DB_CURRENT sera effacée et remplacée !!!" +if [ ! -z $KEEP ]; then + echo -n "Assurez-vous d\'avoir arrété le serveur scodoc." +fi +SCODOC_VAR_DIR_OLD="${SCODOC_VAR_DIR}".old +if [ -e "$SCODOC_VAR_DIR" ] && [ -e "$SCODOC_VAR_DIR_OLD" ]; then + old_date=$(stat --printf %z $SCODOC_VAR_DIR_OLD) + echo "un ancien répertoire de sauvegarde $SCODOC_VAR_DIR_OLD du $old_date va être écrasé" +fi + echo -echo -n "Voulez vous poursuivre cette operation ? (y/n) [n]" +echo -n "Voulez vous poursuivre cette opération ? (y/n) [n]" read -r ans -if [ ! "$(norm_ans "$ans")" = 'Y' ] -then - echo "Annulation" - exit 1 +if [ ! "$(norm_ans "$ans")" = 'Y' ]; then + echo "Annulation par l\'utilisateur" + exit 1 fi # -- Stop ScoDoc if [ $KEEP -ne 1 ]; then echo "Arrêt de scodoc9..." systemctl stop scodoc9 -else - echo -n "Assurez-vous d'avoir arrété le serveur scodoc (validez pour continuer)" - read ans fi # Clear caches @@ -78,11 +95,15 @@ echo "Purge des caches..." su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask clear-cache)" "$SCODOC_USER" || die "Erreur purge cache scodoc9" # Déplace scodoc-data s'il existe -if [ -e "$SCODOC_VAR_DIR" ] -then - echo "$SCODOC_VAR_DIR existe: le renomme en .old" - mv "$SCODOC_VAR_DIR" "$SCODOC_VAR_DIR".old || die "Erreur renommage scodoc-data" +if [ -e "$SCODOC_VAR_DIR" ]; then + if [ -e "$SCODOC_VAR_DIR_OLD" ]; then + echo "$SCODOC_VAR_DIR_OLD existe: le supprime" + rm -rf $SCODCO_VAR_DIR_OLD || die "Erreur effacement d\'une ancienne sauvegarde" + fi + echo "$SCODOC_VAR_DIR existe: le renomme en $SCODOC_VAR_DIR_OLD" + mv "$SCODOC_VAR_DIR" "$SCODOC_VAR_DIR_OLD" || die "Erreur renommage scodoc-data" fi +mkdir "$SCODOC_VAR_DIR" # -- Ouverture archive echo "Ouverture archive $SRC..." @@ -92,25 +113,25 @@ echo "Ouverture archive $SRC..." echo "Vérification du propriétaire..." chown -R "${SCODOC_USER}:${SCODOC_GROUP}" "${SCODOC_VAR_DIR}" || die "Error chowning ${SCODOC_VAR_DIR}" -# --- La base SQL: nommée $(db_name).dump +# --- Reconstruction de la base cible ($DB_DEST) nb=$(su -c "psql -l" "$SCODOC_USER" | awk '{print $1}' | grep -c -x "$DB_DEST") -if [ "$nb" -gt 0 ] -then +if [ "$nb" -gt 0 ]; then echo "Suppression de la base $DB_DEST..." su -c "dropdb $DB_DEST" "$SCODOC_USER" || die "Erreur destruction db" fi su -c "createdb $DB_DEST" "$SCODOC_USER" || die "Erreur création db" -if [ ! -z $KEEP_ENV ] ; then +if [ ! -z $KEEP_ENV ]; then echo "conservation de la configuration actuelle" - cp "$SCODOC_VAR_DIR".old/.env "$SCODOC_VAR_DIR"/.env + mv "$SCODOC_VAR_DIR"/.env "$SCODOC_VAR_DIR"/.env.initial + cp "$SCODOC_VAR_DIR_OLD"/.env "$SCODOC_VAR_DIR"/.env echo "récupération des données..." su -c "pg_restore -f - $DB_DUMP | psql -q $DB_DEST" "$SCODOC_USER" >/dev/null || die "Erreur chargement/renommage de la base SQL" su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask db upgrade)" "$SCODOC_USER" echo "redémarrez scodoc selon votre configuration" else # -- Apply migrations if needed (only on "production" database, = SCODOC sauf config particulière) - echo "restauration environnement de production" + echo "restauration environnement de production (initial)" echo "Chargement de la base SQL..." su -c "pg_restore -d $DB_DEST $DB_DUMP" "$SCODOC_USER" || die "Erreur chargement de la base SQL" export FLASK_ENV="production" # peut-être pas utile? : .env a été recopié