# Migration des données ScoDoc 7 vers ScoDoc 9

On peut installer à partir de zéro (cas 1), ou sur une machine ayant déjà un ScoDoc 7 
et migrer les données (cas 2). 

## Cas 1: Migration d'une installation ScoDoc 7 sur un nouveau serveur

C'est la voie recommandée, notamment si vous avez un parc de machines
virtuelles, car elle minimise la durée de coupure et permet de tester avant de
basculer d'une version à l'autre.

Dans ce cas, la migration va se faire en suivant les étapes, détaillées plus loin:

 1. installer le nouveau serveur Linux Debian 11 et ScoDoc 9;
 
 2. sauvegarder les données de ScoDoc7 depuis le serveur de production **et l'arrêter**;

 3. charger les données ScoDoc 7 sur le nouveau serveur;

 4. importer ces données dans ScoDoc 9.

Si vous venez d'installer ScoDoc 9, passez directement à l'**étape 3**.

### Étape 1: Installer le nouveau serveur

Installer le nouveau serveur avec Debian 11 et ScoDoc 9.

Voir [GuideInstallDebian11](GuideInstallDebian11.md).

Vérifier que tout fonctionne avant d'aller plus loin.

### Étape 2: Sauvegarder les données du serveur ScoDoc 7

Ouvrir un terminal en tant que `root`sur l'ancien serveur ScoDoc 7.

    cd /opt/scodoc/Products/ScoDoc/config
    # Mise à jour indispensable pour avoir le script de migration
    ./upgrade.sh
    # Arrêt du service en production
    systemctl stop scodoc
    # Export des données
    ./save_scodoc7_data.sh /tmp/sauvegarde-scodoc7

Attention à l'espace disque: au besoin, faire le ménage ou montez un disque supplémentaire. 

Notez que cette migration ne fonctionne qu'à partir de la dernière version de
ScoDoc 7. Si vous avez une version plus ancienne, mettez-la d'abord à jour.

Le script indique le nom du fichier à transférer, qui sera dans
l'exemple ci-dessus `/tmp/sauvegarde-scodoc7.tgz`

Copier ce fichier sur le nouveau serveur (scp, ...).


### Étape 3: Charger les données ScoDoc 7

Récupérez l'archive transférée sur le nouveau serveur et ouvrez-la (vous êtes
toujours `root`):

    cd /tmp
    tar xfz sauvegarde-scodoc7.tgz
    chown -R scodoc /tmp/sauvegarde-scodoc7

commande qui va créer `/tmp/sauvegarde-scodoc7`.

Chargement des bases SQL ScoDoc 7: en tant qu'utilisateur "`scodoc`":

    su scodoc
    /opt/scodoc/tools/restore_scodoc7_data.sh /tmp/sauvegarde-scodoc7

(adaptez l'argument si les données ont été copiées ailleurs)

Note: les messages d'erreur comme

    pg_restore: warning: restoring tables WITH OIDS is not supported anymore
    pg_restore: error: could not execute query: ERROR:  schema "public" already exists
    pg_restore: error: could not execute query: ERROR:  must be owner of extension plpgsql

sont normaux et a priori anodins.

A ce stade, vous avez rechargé les bases ScoDoc 7 mais il faut encore
les convertir vers la nouvelle structure ScoDoc 9, et importer les photos,
archives et autres fichiers: c'est l'objet de l'étape suivante.

### Étape 4: Importer les données dans ScoDoc 9

Les formats des bases ayant changé l'opération est complexe et peut durer
plusieurs minutes (ou dizaines de minutes). Attention: **Il faut lancer le script en tant
que `root`  **.

    su # passer root d'une façon ou d'une autre
    # lancer le script, avec le nom du répertoire:
    /opt/scodoc/tools/migrate_from_scodoc7.sh /tmp/sauvegarde-scodoc7

## Cas 2: Migration "en place" sur la même machine

Si vous n'avez pas la possibilité de changer de serveur (par exemple, vous ne
travaillez pas dans des machines virtuelles, ou qu'il est compliqué de créer une
nouvelle VM). Vous pouvez partir de ScoDoc 7 / Debian 10, faire l'upgrade Debian
en place, puis migrer ScoDoc 9.

Avant tout, sauvegardez évidemment votre serveur complet, vérifiez que la
sauvegarde est bonne et que plusieurs exemplaires sont stockés en lieux sûrs,
comme d'habitude.

Toutes les étapes sont importantes, prenez votre temps, lisez bien cette page.
Si vous venez d'installer ScoDoc 9, passez directement à l'**étape 4**.

### 1. Préparation et arrêt de ScoDoc 7

 1. **S'assurer que l'installation ScoDoc 7 est à jour**

        sudo su
        cd /opt/scodoc/Products/ScoDoc/config
        ./upgrade.sh

    Notez que cette migration ne fonctionne qu'à partir de la dernière version
    de ScoDoc 7. Si vous avez une version plus ancienne, mettez-la d'abord à
    jour.

 2. **Arrêter le service ScoDoc 7**

        systemctl stop scodoc

    S'assurer qu'il est bien stoppé (`ps auxw`, ...), sans quoi la migration va échouer.

 3. **Renommer le répertoire de ScoDoc 7**

        sudo su
        mv /opt/scodoc /opt/scodoc7

Les données seront  migrées après installation la nouvelle version, voir
plus loin. ScoDoc 9 sera installé dans `/opt/scodoc`, il est donc très important
de renommer le répertoire en `scodoc7`.

### 2. Upgrade Debian

Suivre la procédure standard. La [doc
officielle](https://www.debian.org/releases/bullseye/mips64el/release-notes/ch-upgrading.fr.html)
est longue, mais en réalité c'est très simple et prends moins de 10 minutes,
sauf si vous avez configuré votre système de façon exotique.
Nombreux tutos disponibles, voir [par exemple
celui-ci](https://www.cyberciti.biz/faq/update-upgrade-debian-10-to-debian-11-bullseye/). 

Attention, il faut désinstaller Apache (avant ou après upgrade Linux), car
ScoDoc 9 utilise un autre serveur web (nginx) qui serait en conflit:

    # peut être utile pour récuperer vos certificats SSL ?
    mv /etc/apache2 /etc/apache2.old 
    apt-get remove --purge apache2
    

### 3. Installer ScoDoc 9
Voir [la section 2 du guide d'installation](GuideInstallDebian11.md#2-installation-de-scodoc-sur-debian).

Vérifier que tout fonctionne avant d'aller plus loin.

### 4. Migrer vos données ScoDoc 7

Les données sont restées dans /opt/scodoc7.

Lancer le script suivant en tant que `root`:

    /opt/scodoc/tools/migrate_from_scodoc7.sh -m

(l'option `-m` indique qu'il s'agit d'une migration "en place").

La migration prends du temps, et il n'est pas inutile de consulter les messages
affichés, dont la plupart se retrouvent aussi dans le fichier

    /opt/scodoc/data/log/migration79.log

Prêtez attention aux éventuels changements de login des utilisateurs et
informez-les. ScoDoc 9 n'autorise pas de caractères spéciaux (apostrophes, ...)
ou accentués dans les logins.

### 5. Vérifier que tout fonctionne

Vos départements et utilisateurs devraient être accessibles.
L'utilisateur `admin` créé à l'installation de ScoDoc 9 doit avoir accès à tout.

Vérifiez que les semestres, étudiants, photos, archives et comptes utilisateurs
sont bien là.

Au besoin, réglez la fonction de calcul du **bonus sport&culture** via la page
"configuration" accessible depuis la page d'accueil en tant qu'admin uniquement.

Célébrez !