From 64c72764b5b064524f6bb6b0b4ed94d4ddced055 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Thu, 26 Aug 2021 15:35:08 +0200 Subject: [PATCH] fix migration script --- README.md | 7 ++-- tools/debian/postinst | 21 ++++++----- tools/migrate_from_scodoc7.sh | 24 +++++++----- tools/save_scodoc7_data.sh | 70 ----------------------------------- 4 files changed, 31 insertions(+), 91 deletions(-) delete mode 100755 tools/save_scodoc7_data.sh diff --git a/README.md b/README.md index 87d6c9f0c..cce52bd8e 100644 --- a/README.md +++ b/README.md @@ -70,13 +70,14 @@ Principaux contenus: Installer ScoDoc 9 normalement ([voir la doc](https://scodoc.org/GuideInstallDebian11)). -Puis remplacer `/otp/scodoc` par un clone du git. +Puis remplacer `/opt/scodoc` par un clone du git. sudo su mv /opt/scodoc /opt/scodoc-distrib # ou ce que vous voulez + apt-get install git # si besoin cd /opt git clone https://scodoc.org/git/viennet/ScoDoc.git - # (ou bien utiliser votre clone gitea so vous l'avez déjà créé !) + # (ou bien utiliser votre clone gitea si vous l'avez déjà créé !) mv ScoDoc scodoc # important ! cd /opt/scodoc # et voilà. @@ -104,7 +105,7 @@ de données de développement dans un état connu, par exemple pour éviter de r Il suffit de positionner une variable d'environnement indiquant la BD utilisée par les tests: - export SCODOC_TEST_DATABASE_URI=postgresql:///SCODOC_DEV" + export SCODOC_TEST_DATABASE_URI=postgresql:///SCODOC_DEV puis de les lancer normalement, par exemple: diff --git a/tools/debian/postinst b/tools/debian/postinst index 6bdf4d6fc..e07b06e84 100644 --- a/tools/debian/postinst +++ b/tools/debian/postinst @@ -18,15 +18,18 @@ change_scodoc_file_ownership # --- Création au bseoin de /opt/scodoc-data set_scodoc_var_dir -# ------------ LOCALES (pour compat bad ScoDoc 7) -locname="en_US.UTF-8" -outname=$(echo ${locname//-/} | tr '[A-Z]' '[a-z]') -if [ "$(locale -a | grep -E -i ^${outname}$ | wc -l)" -lt 1 ] -then - echo adding $locname - echo "$locname ${locname##*.}" >> /etc/locale.gen - /usr/sbin/locale-gen --keep-existing -fi +# ------------ LOCALES (pour compat bases ScoDoc 7 et plus anciennes) +for locname in "en_US.UTF-8" +do + outname=$(echo ${locname//-/} | tr '[A-Z]' '[a-z]') + if [ "$(locale -a | grep -E -i ^${outname}$ | wc -l)" -lt 1 ] + then + echo adding $locname + echo "$locname ${locname##*.}" >> /etc/locale.gen + /usr/sbin/locale-gen --keep-existing + systemctl restart postgresql + fi +done # Le numero de version complet, genre 9.0.0 SCODOC_RELEASE=$(grep SCOVERSION $SCODOC_DIR/sco_version.py | awk '{ print substr($3, 2, length($3)-2) }') diff --git a/tools/migrate_from_scodoc7.sh b/tools/migrate_from_scodoc7.sh index e7bed49b2..a3bf02559 100755 --- a/tools/migrate_from_scodoc7.sh +++ b/tools/migrate_from_scodoc7.sh @@ -10,8 +10,6 @@ # # -set -euo pipefail - # Le répertoire de ce script: SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" @@ -24,7 +22,7 @@ cd "$SCODOC_DIR" || die "ScoDoc 9 non installe" check_uid_root "$0" # ScoDoc 9 doit être bien installé -[ -e .env ] && die "ScoDoc 9 mal configuré: manque .env" +[ -e .env ] || die "ScoDoc 9 mal configuré: manque .env" # Usage usage() { @@ -71,12 +69,19 @@ fi # Inutile si on importe via pg_restore (voir restore-scodoc7_data.sh) # migrate_database_ownership() { + echo "Changing databases ownerships" 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" + if [ -z "$SCO7_BASES" ] + then + echo "Aucune base ScoDoc 7 appartenant à www-data. OK." + else + for base in $SCO7_BASES + do + echo modifying $base owner + 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" + fi } # --- 3. Fichiers locaux: /opt/scodoc7/var => /opt/scodoc-data @@ -99,7 +104,8 @@ migrate_local_files() { fi mkdir "$SCODOC_VAR_DIR" || die "erreur creation repertoire" mv "${SCODOC7_HOME}"/var/scodoc/* "$SCODOC_VAR_DIR" || die "migrate_local_files failed" - + # mais récupère notre .env ! + cp "$SCODOC_VAR_DIR_BACKUP"/.env "$SCODOC_VAR_DIR" || die "fichier .env manquant dans l'ancien "$SCODOC_VAR_DIR !" # Anciens logs ScoDoc7 old_logs_dest="$SCODOC_VAR_DIR/log/scodoc7" echo "Copie des anciens logs ScoDoc 7 dans $old_logs_dest" diff --git a/tools/save_scodoc7_data.sh b/tools/save_scodoc7_data.sh deleted file mode 100755 index 9dc7e6c1f..000000000 --- a/tools/save_scodoc7_data.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/bash - -# -# ScoDoc: save all user data (database, configs, images, archives...) in separate directory -# -# Utile pour migrer ScoDoc d'un serveur a un autre -# Executer en tant que root sur le serveur d'origine -# -# E. Viennet, Sept 2011, Aug 2020, Jul 2021 -# -# 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 "$0" - -# Destination directory -if [ ! $# -eq 1 ] -then - echo "Usage: $0 destination_directory" - exit 1 -fi -DEST=$1 -# remove trailing slashs if needed: -shopt -s extglob -DEST="${DEST%%+(/)}" - -if [ ! -e "$DEST" ] -then - echo Creating directory "$DEST" - mkdir "$DEST" -else - echo "Error: Directory " "$DEST" " exists" - echo "remove it or specify another destination !" - exit 2 -fi - -echo "Stopping ScoDoc..." -scodocctl stop - -# Dump all postgres databases -echo "Dumping SQL database..." -chown postgres "$DEST" -su -c "pg_dumpall > \"$DEST\"/scodoc.dump.txt" postgres -if [ ! "$?" -eq 0 ] -then - printf "Error dumping postgresql database\nPlease check that SQL server is running\nAborting.\n" - exit 1 -fi -chown root "$DEST" - -# ScoDoc archives, configuration, photos, etc. -echo "Copying var/ ..." -cp -rp "$SCODOC_DIR/var" "$DEST" - - -echo "Copying server logs..." -cp -rp "$SCODOC_DIR/log" "$DEST" - - -# --- Archive all files in a tarball to ease transfer -echo -echo "Archiving backup files in a $DEST.tgz..." -base=$(basename "$DEST") -(cd "$DEST"/.. || terminate "directory error"; tar cfz "$DEST".tgz "$base") - -echo "Done (you can copy " "$DEST"".tgz to destination machine)."