diff --git a/tools/migrate_from_scodoc7.sh b/tools/migrate_from_scodoc7.sh new file mode 100755 index 0000000000..655614dfa6 --- /dev/null +++ b/tools/migrate_from_scodoc7.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +# Migre une install ScoDoc 7 vers ScoDoc 8 +# Le ScoDoc7 est supposé être dans /opt/scodoc/Products/ScoDoc +# Le nouveau est /opt/scodoc8/ +# +# L'install ScoDoc7 de départ doit impérativement être à jour (upgrade.sh). +# +# 1- Utilisateur Unix: +# scodoc7 tournait comme www-data +# scodoc8 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/scodoc8/var +# +# 4- TODO migrer de Apache à nginx, installer memcached, scripts service systemd +# + +source config.sh +source utils.sh +check_uid_root + +SCODOC7_HOME="/opt/scodoc" +SCODOC7_DIR="${SCODOC7_HOME}/Products/ScoDoc" + +# --- 1. Utilisateur UNIX +migrate_unix_user() { + if [ $(id -u "${SCODOC_USER}" &> /dev/null) ] + then + echo "Unix user ${SCODOC_USER} exists" + else + echo "Creating unix user ${SCODOC_USER}" + adduser --no-create-home --shell /bin/bash --gecos "ScoDoc service" ${SCODOC_USER} || die "failed to create user" + fi +} + +migrate_file_ownership() { + echo "Changing owner of $SCODOC_DIR to ${SCODOC_USER}" + chown -R "${SCODOC_USER}:${SCODOC_GROUP}" "$SCODOC_DIR" +} + +# --- 2. Propriétaire des bases de données +# Bases appartenant à www-data: +migrate_databse_ownsership() { + 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/scodoc8/var +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_VAR_DIR" || die "migrate_local_files failed" +} + + +# ------ MAIN + +migrate_unix_user + +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 + migrate_file_ownership +fi + +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_databse_ownsership +fi + +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 +fi +