ScoDoc/tools/restore_scodoc7_data.sh

112 lines
3.0 KiB
Bash
Raw Normal View History

2021-08-18 18:53:45 +02:00
#!/bin/bash
#
# ScoDoc: restore data (saved by save_scodoc7_data)
# into current server
#
# Utile pour migrer de ScoDoc 7 à ScoDoc 9, d'un serveur à un autre
# A executer en tant que root sur le nouveau serveur
# Ce script va créer les base postgresql "scodoc7" (SCOUSERS, SCODEPTs...)
# afin que ScoDoc 9 puisse les importer avec ses scripts de migration.
# Les données (photos, etc) sont pas touchées et seront importées par
# la migration.
#
# E. Viennet, Sept 2011, Nov 2013, Mar 2017, Aug 2020, Jul 2021, Août 21
#
# 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"
if [ "$(id -nu)" != "$SCODOC_USER" ]
then
echo "Erreur: le script $0 doit être lancé par l'utilisateur $SCODOC_USER"
fi
# Usage
if [ ! $# -eq 1 ]
then
echo "Usage: $0 directory_or_archive"
exit 1
fi
SRC=$1
if [ "${SRC:0:1}" != "/" ]
then
echo "Usage: $0 directory_or_archive"
echo "Erreur: utiliser un chemin absolu (commencant par /)"
exit 1
fi
# Safety check
echo "Ce script recharge les donnees de votre installation ScoDoc 7"
echo "sur ce serveur pour migration vers ScoDoc 9."
2021-08-26 14:24:25 +02:00
echo "Ce fichier doit avoir ete cree par le script save_scodoc_data.sh, sur une machine ScoDoc 7."
2021-08-18 18:53:45 +02:00
echo
echo -n "Voulez vous poursuivre cette operation ? (y/n) [n]"
read -r ans
if [ ! "$(norm_ans "$ans")" = 'Y' ]
then
echo "Annulation"
exit 1
fi
SCOBASES=$(psql -l | grep SCO | grep -v "$SCODOC_DB_PROD" | grep -v "$SCODOC_DB_DEV" | grep -v "$SCODOC_DB_TEST")
if [ -n "$SCOBASES" ]
then
echo "Attention: vous avez apparemment déjà des bases ScoDoc7 chargées"
echo "$SCOBASES"
echo
echo -n "poursuivre quand même ? (y/n) [n]"
read -r ans
if [ ! "$(norm_ans "$ans")" = 'Y' ]
then
echo "Annulation"
exit 1
fi
fi
# Source directory
if [ "${SRC##*.}" = 'tgz' ]
then
echo "Opening tgz archive..."
tmp=$(mktemp -d)
chmod a+rx "$tmp"
cd "$tmp" || terminate "directory error"
tar xfz "$SRC"
SRC=$(ls -1d "$tmp"/*)
fi
echo "Source is $SRC"
2021-08-26 14:24:25 +02:00
echo "Vous allez probablement voir s'afficher de nombreux messages : "
echo "pg_restore: attention : la restauration des tables avec WITH OIDS n'est plus supportée"
echo
echo "ce n'est pas grave !"
echo -n "valider pour continuer"
read -r ans
2021-08-18 18:53:45 +02:00
# Load postgresql dumps
for f in "$SRC"/SCO*.dump
do
echo "Loading postgres database from $f"
pg_restore --create -d SCODOC --no-owner "$f"
# le pg_restore a parfois des erreurs sans gravités...
# voir https://www.postgresql.org/message-id/20849.1541638465%40sss.pgh.pa.us
# donc on ne peut pas se fier au code de retour.
# Demander aux utilisateurs de vérifier eux meêm que les bases sont OK
# if [ ! "$?" -eq 0 ]
# then
# printf "Error restoring postgresql database\nPlease check that SQL server is running\nAborting."
# exit 1
# fi
2021-08-18 18:53:45 +02:00
done
2021-08-20 10:51:42 +02:00
echo
echo "Terminé. (vous pouvez ignorer les éventuels avertissements de pg_restore ci-dessus !)"
echo
2021-08-18 18:53:45 +02:00
#