Projet

Général

Profil

migration27.sh

Benjamin Bohard, 18/11/2020 15:33

Télécharger (54,8 ko)

 
1
#!/bin/bash
2

    
3
######################################################
4
# Script de migration EOLE 2.2 à 2.6 vers EOLE 2.7   #
5
# Les donnees sont lues depuis un support externe    #
6
# Le script est utilisable pour :                    #
7
# - sauvegarder sur EOLE 2.2, 2.3, 2.4, 2.5, 2.6     #
8
# - restaurer sur EOLE 2.7                           #
9
######################################################
10

    
11
VERSION="20201002"
12
LDIF=eole.ldif
13
SYMPA=/var/lib/sympa
14
MYSQLDB=mysql.sql
15
ACLS=acls.sauv
16
QUOTAS=quotas.sauv
17
SID=sid.txt
18
READER=reader.txt
19
DD=/media/migration
20
RSYNC_LOG=/tmp/rsync.log
21
ACLS_LOG=/tmp/aclserr.log
22
ACLS_FIXED=/tmp/acls.txt
23
ACLS_DIR=/tmp/acls_blocks
24
UMOUNT_NEEDED=0
25

    
26
LOG_FILE="/tmp/migration-$(date +'%d%m%Y-%H%M%S').log"
27

    
28
if [ -f /usr/lib/eole/ihm.sh ];then
29
# version 2.4/2.5
30
. /usr/lib/eole/ihm.sh
31
numero_etab=$(CreoleGet numero_etab)
32
interactive='True'
33
else
34
# version 2.2 ou 2.3
35
. /usr/share/eole/FonctionsEoleNg
36
. /usr/bin/ParseDico
37
[ -f /etc/eole/containers.conf ] && . /etc/eole/containers.conf
38
fi
39

    
40
Green(){
41
  local msg="${@}"
42
  echo "[INFO] ${msg}" >> ${LOG_FILE}
43
  EchoVert "${msg}"
44
}
45

    
46
Red(){
47
  local msg="${@}"
48
  echo "[ERROR] ${msg}" >> ${LOG_FILE}
49
  EchoRouge "${msg}"
50
}
51

    
52
Cyan(){
53
  local msg="${@}"
54
  echo "[INFO] ${msg}" >> ${LOG_FILE}
55
  EchoCyan "${msg}"
56
}
57

    
58
Orange(){
59
  local msg="${@}"
60
  echo "[WARN] ${msg}" >> ${LOG_FILE}
61
  EchoOrange "${msg}"
62
}
63

    
64
StdEcho(){
65
  local msg="${@}"
66
  echo "[INFO] ${msg} | tee -a ${LOG_FILE}"
67
}
68

    
69
if [ -z "$numero_etab" ]
70
then
71
    Red "Récupération du numéro d'établissement impossible !"
72
    exit 1
73
fi
74

    
75
Version(){
76
    echo "Script de migration version : $VERSION"
77
    echo
78
}
79

    
80
Title(){
81
    echo
82
    Cyan "  * $1"
83
}
84

    
85
testcmd(){
86
    if [ "$1" -ne 0 ];then
87
        msg="$2"
88
        [ -z "$msg" ] && msg="Erreur, Abandon."
89
        Red "$msg"
90
        echo
91
        [ -z "$3" ] && exit 1
92
    fi
93
}
94

    
95
testf(){
96
    if [ ! -e $1 ];    then
97
        Red "$1 introuvable, Abandon."
98
        echo
99
        exit 1
100
    fi
101
}
102

    
103
Alerte(){
104
    echo
105
    Question_ouinon "Attention ceci va détruire votre annuaire, voulez-vous continuer ?" $interactive "non" "warn"
106
    testcmd $? "Abandon"
107
}
108

    
109
Alerte2(){
110
    echo
111
    Question_ouinon "Attention ceci va écraser certaines données de votre serveur, voulez-vous continuer ?" $interactive "non" "warn"
112
    testcmd $? "Abandon"
113
}
114

    
115
montage(){
116
    # $1 : point de montage
117
    # $2 : version (exemple 25)
118
    /bin/mkdir -p "$1"
119
    /bin/umount "$1" 2>/dev/null
120
    echo
121
    echo "Quel est le support de sauvegarde ?"
122
    echo "* support distant  => ex : //machine/partage"
123
    echo "* disque USB       => ex : /dev/sd.."
124
    echo "* répertoire local => ex : /root/sauvegarde"
125
    echo
126
    read -p "Chemin : " peri
127
    if [ "${peri:0:2}" = "//" ]
128
    then
129
        echo -n "Entrez un nom d'utilisateur (sinon rien) : "
130
        read user
131
        echo Montage de $peri
132
        [ "$2" = "25" ] && fs="cifs" || fs="smbfs"
133
        [ "$user" != "" ] && mount -t $fs $peri "$1" -o username=$user,iocharset=utf8 || mount -t $fs $peri "$1" -o password='',iocharset=utf8
134
        testcmd $? "Montage $peri impossible, Abandon."
135
        UMOUNT_NEEDED=1
136
    elif [ "${peri:0:4}" = "/dev" ]
137
    then
138
        echo Disque local
139
        echo Montage de $peri
140
        /bin/mount $peri "$1"
141
        testcmd $? "Montage $peri impossible, Abandon."
142
        UMOUNT_NEEDED=1
143
    elif [ "${peri:0:1}" = "/" ]
144
    then
145
        testf $peri
146
        [ -L "$1" ] && rm -f "$1"
147
        if [ -d "$1" ];then
148
            rmdir "$1"
149
            testcmd $?
150
        fi
151
        ln -ns $peri "$1"
152
        UMOUNT_NEEDED=0
153
    else
154
        testcmd 1 "Le chemin doit être complet !"
155
    fi
156
}
157

    
158
demontage(){
159
    # $1 : point de montage
160
    if [ $UMOUNT_NEEDED -eq 1 ]
161
    then
162
        Title "Démontage du support"
163
        /bin/umount "$1"
164
        echo
165
    fi
166
    [ -L "$1" ] && rm -f "$1"
167
}
168

    
169
saveconfigeol(){
170
    # $1 : répertoire de sauvegarde
171
    Title "Test du support"
172
    /bin/mkdir -p "$1"
173
    testcmd $? "Ecriture impossible sur le support !"
174
    ln -s /tmp "$1/testln"
175
    if [ $? -ne 0 ];then
176
        Red "Le support ne supporte pas les liens symboliques !"
177
        Question "Voulez-vous continuer malgré tout ?"
178
        testcmd $? "Abandon"
179
    fi
180
    rm -f "$1/testln"
181
    Title "Copie du fichier config.eol"
182
    /bin/cp -f /etc/eole/config.eol "$1/$version.eol"
183
    testf "$1/$version.eol"
184
    if [ -d /etc/eole/extra ];then
185
        /bin/cp -rf /etc/eole/extra "$1/"
186
    fi
187
}
188

    
189
questionsave(){
190
    # $1 : emplacement des données (/home ou /data)
191
    echo
192
    Question "Voulez-vous sauvegarder automatiquement les données ?"
193
    if [ $? -ne 0 ];then
194
        Orange "La migration des données contenues dans $1 ne sera pas automatique !"
195
        return 1
196
    fi
197
    return 0
198
}
199

    
200
questionrestore(){
201
    # $1 : répertoire de sauvegarde
202
    # $2 : emplacement des données (/home ou /data)
203
    echo
204
    if [ ! -d "$1$2" ];then
205
        Orange "Les données de $2 ne sont pas présentes dans la sauvegarde"
206
        Question_ouinon "Voulez-vous restaurer les ACL malgré tout ?" "$interactive" "oui"
207
        return $?
208
    fi
209
    return 0
210
}
211

    
212
savebcdi(){
213
    # $1 : répertoire de sauvegarde
214
    if [ -d /home/bcdiserv ];then
215
        Question "Voulez-vous sauvegarder les fichiers liés à Bcdi Web ?"
216
        if [ $? -eq 0 ];then
217
            Title "Sauvegarde de Bcdi Web"
218
            mkdir -p "$1/bcdi"
219
            cp -R /home/bcdiserv "$1/home/"
220
            cp -R /var/www/html/bcdiweb "$1/bcdi/"
221
            cp -f /etc/apache2/sites-enabled/bcdiweb.conf "$1/bcdi/"
222
            cp -f /etc/default/rsync "$1/bcdi/"
223
            cp -f /etc/rsyncd.conf "$1/bcdi/"
224
            echo
225
        fi
226
    fi
227
}
228

    
229
restorebcdi(){
230
    # $1 : répertoire de sauvegarde
231
    if [ -d "$1/home/bcdiserv" ];then
232
        echo "Restauration des données liées à Bcdi Web"
233
        # /home/bcdiserv est restauré par restorescribedata()
234
        if [ -d "$1/bcdi/bcdiweb" ];then
235
            cp -R "$1/bcdi/bcdiweb" /var/www/html/bcdiweb
236
            chown -R www-data:www-data /var/www/html/bcdiweb
237
        fi
238
        cp -f "$1/bcdi/bcdiweb.conf" /etc/apache2/sites-enabled
239
        cp -f "$1/bcdi/rsync" /etc/default/rsync
240
        cp -f "$1/bcdi/rsyncd.conf" /etc/rsyncd.conf
241
        echo
242
    fi
243
}
244

    
245
savescribedata(){
246
    # $1 : répertoire de sauvegarde
247
    mkdir -p "$1/home"
248
    savebcdi "$1"
249
    Title "Copie des données"
250
    echo -n "."
251
    # ménage
252
    rm -f /home/netlogon/*.bat
253
    rm -f /home/netlogon/*.txt
254
    mkdir -p /home/options
255
    # FIXME : supprimer tous les .virus et .scanned avant ?
256
    for rep in "netlogon" "workgroups" "classes" "options";do
257
        echo -n "."
258
        cp --preserve=timestamps -rf /home/$rep "$1/home"
259
    done
260
    if [ -d /home/wpkg ];then
261
        echo -n "."
262
        mkdir -p "$1/home/wpkg"
263
        cp --preserve=timestamps -rf /home/wpkg/* "$1/home/wpkg"
264
        rm -rf "$1/home/wpkg/documents"
265
        rm -f  "$1/home/wpkg/wpkg.js"
266
    fi
267
    for abc in `find /home -maxdepth 1 -name '?' | sort`;do
268
        echo -n "."
269
        rsync -cav --log-file $RSYNC_LOG --exclude=MailDir \
270
              --exclude=IntegrDom --exclude=.scanned* ${abc} "$1/home" >/dev/null
271
        testcmd $? "Erreur lors de la sauvegarde des données $abc : consulter le fichier $RSYNC_LOG" 'noexit'
272
    done
273
    # scribe (controle-vnc-applis)
274
    rm -rf "$1/home/netlogon/blockinput"
275
    rm -f "$1/home/a/admin/perso/Alias.lnk"
276
    rm -f "$1/home/a/admin/perso/alias"
277
    rm -f "$1/home/a/admin/perso/Esu.lnk"
278
    rm -f "$1/home/a/admin/perso/Install_Client_Scribe.lnk"
279
    rm -rf "$1/home/workgroups/professeurs/gestion-postes"
280
    rm -f "$1/home/workgroups/professeurs/Gestion-postes.lnk"
281
    echo
282
    # scribe (controle-vnc-client)
283
    # scribe (divers)
284
    # les corbeilles ($smb_trash_dir)
285
    # horus ?
286
}
287

    
288
savehorusdata(){
289
    # $1 : répertoire de sauvegarde
290
    Title "Copie des données"
291
    echo "(cette opération peut prendre du temps)"
292
    echo -n "."
293
    # purge des fichiers de connexion
294
    rm -f /home/netlogon/*.bat
295
    # FIXME : on devrait supprimer tous les .virus et .scanned avant
296
    echo -n "."
297
    if [ -L /data ];then
298
        # spécifique Horus-2.3
299
        mkdir -p "$1/data/home"
300
        for dir in `find /home/* -maxdepth 0 -type d`;do
301
            if [ $dir != "/home/workgroups" ];then
302
                cp -rf --preserve=timestamps $dir "$1/data/home"
303
                echo -n "."
304
            fi
305
        done
306
        cp -rf /home/workgroups/* "$1/data"
307
    else
308
        # spécifique Horus-2.2
309
        cp -rf --preserve=timestamps /data "$1/"
310
    fi
311
    # suppression des fichiers spéciaux
312
    echo -n "."
313
    rm -f "$1/data/aquota.group"
314
    rm -f "$1/data/aquota.user"
315
    rm -rf "$1/data/home/horus"
316
    rm -rf "$1/data/home/ftp"
317
    echo -n "."
318
    for prof in `find "$1/data/home" -maxdepth 2 -name "profiles"`;do
319
        ls $prof/* &>/dev/null
320
        if [ $? -ne 0 ];then
321
            # suppression des répertoires vides
322
            rmdir $prof
323
        elif [ ! -d `dirname $prof`/profil ];then
324
            # renommage profiles -> profil
325
            mv "$prof" "`dirname $prof`/profil"
326
        fi
327
    done
328
    echo -n "."
329
    if [ ! -L /opt ];then
330
        # spécifique Horus-2.3
331
        cp -rf --preserve=timestamps /opt "$1/data"
332
    fi
333
    echo
334
}
335

    
336
restorescribedata(){
337
    # $1 : répertoire de sauvegarde
338
    Title "Restauration des données"
339
    if [ ! -d "$1/home" ];then
340
        echo "Aucune donnée à restaurer"
341
        return
342
    fi
343
    echo "(cette opération peut prendre du temps)"
344
    restorebcdi "$1"
345
    rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/home/" /home/ >/dev/null
346
    testcmd $? "Erreur lors de la restauration des données, consulter le fichier $RSYNC_LOG"
347
    [ -f "$1/home/wpkg/hosts.xml" ] && cp -f "$1/home/wpkg/hosts.xml" /home/wpkg/
348
    # liens morts (#30782)
349
    for link in "/home/a/admin/perso/esu" "/home/a/admin/perso/client"
350
    do
351
        [ -L "$link" ] && [ ! -e "$link" ] && rm -f "$link"
352
    done
353
}
354

    
355
genadhome(){
356
    Title "Génération des liens vers /home/adhomes"
357
    for dir in /home/?/*;do
358
        /usr/share/eole/sbin/create_adhome "$(basename $dir)" "/home/adhomes"
359
    done
360
}
361

    
362
restorehorusdata(){
363
    # $1 : répertoire de sauvegarde
364
    Title "Restauration des données"
365
    if [ ! -d "$1/data" ];then
366
        echo
367
        Orange "Les données de /data ne sont pas présentes dans la sauvegarde"
368
        return
369
    fi
370
    echo "(cette opération peut prendre du temps)"
371
    echo -n "."
372
    rsync -cav --log-file $RSYNC_LOG --ignore-existing --exclude=home --exclude=opt \
373
          --exclude=minedu/windata/mysql "$1/data/" /data/ >/dev/null
374
    testcmd $? "Erreur lors de la restauration des données (/data), consulter le fichier $RSYNC_LOG"
375
    echo -n "."
376
    rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/data/home/" /home/ >/dev/null
377
    testcmd $? "Erreur lors de la restauration des données (/home), consulter le fichier $RSYNC_LOG"
378
    echo -n "."
379
    [ -f "$1/data/home/wpkg/hosts.xml" ] && cp -f "$1/data/home/wpkg/hosts.xml" /home/wpkg/
380
    if [ ! -f "$1/data/opt/interbase/isc4.gdb" ];then
381
        Orange "Pas de fichier isc4.gdb"
382
    else
383
        cp -f "$1/data/opt/interbase/isc4.gdb" /opt/interbase/isc4.gdb
384
        cp -f "$1/data/opt/interbase/ib_license.dat" /opt/interbase/ib_license.dat 2>/dev/null
385
    fi
386
    echo
387
}
388

    
389
savequota(){
390
    # $1 : répertoire de sauvegarde
391
    Title "Sauvegardes des quotas utilisateurs"
392
    /usr/sbin/repquota -a |grep -v '^#' > "$1/$QUOTAS"
393
}
394

    
395
restorequota(){
396
    # $1 : répertoire de sauvegarde
397
    Title "Restauration des quotas utilisateurs"
398
    testf "$1/$QUOTAS"
399
    python -c """from fichier.quota import set_quota
400
from sys import stdout
401
fp = file('$1/$QUOTAS');started = False;num=0
402
for ligne in fp.readlines():
403
    if not started:
404
        if ligne.startswith('------------'):started = True
405
        continue
406
    # cas plusieurs partition
407
    if ligne.startswith('***'):
408
        started = False
409
        continue
410
    elts = ligne.strip().split()
411
    try:
412
        user  = elts[0]
413
        quota = elts[3]
414
    except:
415
        continue
416
    if quota != '0':
417
        num+=1
418
        if num % 20 == 0:
419
            stdout.write('.')
420
            stdout.flush()
421
        set_quota(user, int(quota)/1024)
422
print \"\\n%d quotas non nuls restaurés\" % num
423
fp.close()"""
424
}
425

    
426
savescribeacl(){
427
    # $1 : répertoire de sauvegarde
428
    Title "Sauvegarde des ACL"
429
    > "$1/$ACLS"
430
    for rep in "netlogon" "workgroups" "classes" "options";do
431
        echo -n "."
432
        /usr/bin/getfacl -R --absolute-names /home/$rep >> "$1/$ACLS"
433
    done
434
    for abc in `find /home -maxdepth 1 -name '?' | sort`
435
    do
436
        echo -n "."
437
        /usr/bin/getfacl -R --absolute-names $abc >> "$1/$ACLS"
438
    done
439
    echo
440
}
441

    
442
savehorusacl(){
443
    # $1 : répertoire de sauvegarde
444
    Title "Sauvegarde des ACL"
445
    if [ -L /data ];then
446
        HOME="/home"
447
    else
448
        HOME="/data"
449
    fi
450
    /usr/bin/getfacl -R --absolute-names $HOME > "$1/$ACLS"
451
}
452

    
453
restoreacl(){
454
    # $1 : répertoire de sauvegarde
455
    Title "Restauration des ACL"
456
    if [ ! -f "$1/$ACLS" ];then
457
        echo
458
        Orange "Les ACL ne sont pas présentes dans la sauvegarde"
459
        return
460
    else
461
	    sed -i -e "s;\(/home/workgroups/professeurs/gestion-postes/wx\(base\)\|\(msw\)\)28uh\(.*\?\)\(.dll\);\130u\490\5;g" "$1/$ACLS"
462
    fi
463
    [ -d /data ] && ln -nsf /home /data/home
464
    # Remplacement des anciens groupes "DomainAdmins" et "DomainUsers"
465
    sed "s/:DomainAdmins:/:10512:/ ; s/:DomainUsers:/:10513:/" "$1/$ACLS" > "$ACLS_FIXED"
466
    rm -f $ACLS_LOG
467
    [ -d "$ACLS_DIR" ] && rm -rf "$ACLS_DIR"
468
    mkdir "$ACLS_DIR"
469
    awk -v acl_dir=$ACLS_DIR -v RS= '{print > sprintf("%s/acl_block-%.10d.txt",acl_dir, NR)}' "$ACLS_FIXED"
470
    for acl_block in $ACLS_DIR/acl_block-*.txt
471
    do
472
        /usr/bin/setfacl --restore="$acl_block" 2>&1 |grep -Ev "MailDir|data/opt|aquota|horus|recyclage|netlogon|Alias\.lnk|\.scanned|profiles|/home/ftp|gestion-postes|IntegrDom|.lnk:" >>$ACLS_LOG
473
    done
474
    [ -L /data/home ] && rm -f /data/home
475
    ERR=`wc -l $ACLS_LOG|cut -d' ' -f1`
476
    if [ $ERR -gt 0 ];then
477
        Orange "ATTENTION : $ERR messages d'erreur dans $ACLS_LOG"
478
        for block in $(sed -e "s/^setfacl.*\?: \(.*\).:.* \([0-9]\+\)$/\1,\2/" -e "/setfacl/d" $ACLS_LOG)
479
        do
480
            sed -n "${block##*,}p" "${block%%,*}" | sed -e "s/\([^:]*\):\([^:]*\):.*/ACL non restaurée pour \1 \2/" > /tmp/aclserr_parsed.log
481
        done
482
        Orange "$(uniq /tmp/aclserr_parsed.log)"
483
        rm -f /tmp/aclserr_parsed_log
484
    fi
485
}
486

    
487
savemail(){
488
    # $1 : répertoire de sauvegarde
489
    Title "Sauvegarde des données liées à la messagerie"
490
    [ -x /usr/bin/CreoleGet ] && container_path_mail=$(CreoleGet container_path_mail)
491
    mkdir -p "$1/listes"
492
    echo -n "."
493
    if [ ! -e "$1/listes/sympa" ];then
494
        mkdir -p "$1/listes/sympa"
495
    fi
496
    if [ -f "$container_path_mail/etc/mail/sympa.aliases" ];then
497
        cp "$container_path_mail/etc/mail/sympa.aliases" "$1/listes/sympa/aliases"
498
    elif [ -f "$container_path_mail/etc/mail/sympa_aliases" ];then
499
        cp "$container_path_mail/etc/mail/sympa_aliases" "$1/listes/sympa/aliases"
500
    else
501
        cp "$container_path_mail/etc/mail/sympa/aliases" "$1/listes/sympa/aliases"
502
    fi
503
    cp -R $container_path_mail/$SYMPA/expl "$1/listes"
504
    echo -n "."
505
    cp -R $container_path_mail/$SYMPA/wwsarchive "$1/listes"
506
    mkdir -p "$1/courier"
507
    echo -n "."
508
    cp -f $container_path_mail/etc/courier/pop3d.* $container_path_mail/etc/courier/imapd.* "$1/courier"
509
    mkdir -p "$1/mail"
510
    echo -n "."
511
    for maildir in `find /home -maxdepth 3 -name MailDir`;do
512
        # 2.2 : mails dans /home/<l>/<login>/MailDir
513
        if [ -d "$maildir/cur" ];then
514
            user=`echo $maildir | awk -F "/" '{ print $(NF-1) }'`
515
            mkdir -p "$1/mail/$user"
516
            rsync -cav --log-file $RSYNC_LOG $maildir/ "$1/mail/$user" >/dev/null
517
        fi
518
    done
519
    if [ "$(ls -A /var/spool/mail)" ];then
520
        # 2.2 : mails responsables dans /var/spool/mail
521
        echo -n "."
522
        rsync -cav --log-file $RSYNC_LOG /var/spool/mail/* "$1/mail" >/dev/null
523
    fi
524
    if [ -d /home/mail ];then
525
        # 2.3/2.4 : toutes les boîtes dans /home/mail
526
        echo -n "."
527
        rsync -cav --log-file $RSYNC_LOG /home/mail/* "$1/mail" >/dev/null
528
    fi
529
    echo
530
}
531

    
532
restoremail(){
533
    # $1 : répertoire de sauvegarde
534
    Title "Restauration des données liées à la messagerie"
535
    container_path_mail=$(CreoleGet container_path_mail)
536
    # sympa_aliases => sympa.aliases => sympa/aliases (#5049 puis #17087)
537
    if [ ! -e "$container_path_mail/etc/mail/sympa/aliases" ];then
538
        mkdir -p "$container_path_mail/etc/mail/sympa/aliases"
539
    fi
540
    cp "$1/listes/sympa/aliases" "$container_path_mail/etc/mail/sympa/aliases"
541
    echo -n "."
542
    rsync --log-file $RSYNC_LOG --ignore-existing -cav "$1/listes/expl" "$container_path_mail/$SYMPA" >/dev/null
543
    echo -n "."
544
    rsync --log-file $RSYNC_LOG --ignore-existing -cav "$1/listes/wwsarchive" "$container_path_mail/$SYMPA" >/dev/null
545
    echo -n "."
546
    CreoleRun "chown -R sympa:sympa $SYMPA" mail
547
    echo -n "."
548
    # restauration des certificats SSL pour pop et imap
549
    cp -f "$1"/courier/*.* "$container_path_mail/etc/courier"
550
    echo -n "."
551
    rsync --log-file $RSYNC_LOG -cav "$1/mail" /home/ >/dev/null
552
    echo -n "."
553
    CreoleRun "chown -R mail:mail /home/mail" mail
554
    echo -n "."
555
    # re-génération des listes de diffusion (pour les responsables)
556
    python -c """from scribe.eolegroup import Group
557
g = Group()
558
g.ldap_admin.connect()
559
for classe in g._get_groups('Classe'):
560
    domain = g._get_maillist(classe).split('@')[1]
561
    g._delete_maillist(classe, domain)
562
    g._delete_maillist('profs-%s' % classe, domain)
563
    g._delete_maillist('resp-%s' % classe, domain)
564
    g._add_maillist('Classe', classe)
565
    g._add_maillist('Equipe', 'profs-%s' % classe)
566
    g._add_resp_maillist(classe)
567
g.ldap_admin.close()
568
"""
569
    echo -n "."
570
    # vérification de l'adresse IP du serveur ldap
571
    SEARCHPATH="$container_path_mail/$SYMPA/expl"
572
    adresse_ip_mysql=$(CreoleGet adresse_ip_mysql)
573
    for config in `grep -l "host localhost" $SEARCHPATH/*/config $SEARCHPATH/*/*/config 2>/dev/null`;do
574
        sed -i "s/^host localhost$/host $adresse_ip_mysql/g" $config
575
    done
576
    echo
577
    # re-génération des alias pour sympa
578
    /usr/share/eole/backend/regenalias.sh
579
}
580

    
581
saveldap(){
582
    # $1 : répertoire de sauvegarde
583
    Title "Sauvegarde de l'annuaire"
584
    [ -x /usr/bin/CreoleGet ] && container_path_annuaire=$(CreoleGet container_path_annuaire)
585
    [ -f /root/.reader ] && cp -f /root/.reader "$1/$READER"
586
    [ -x /usr/bin/CreoleService ] && CreoleService slapd stop || /etc/init.d/slapd stop
587
    chroot "/$container_path_annuaire" /usr/sbin/slapcat -f /etc/ldap/slapd.conf| grep -Ev "^sambaShareAdmin:|^sambaShareDep:|^location:|^server:|^sambaLogonScript:" > "$1/$LDIF"
588
    testcmd $?
589
    [ -x /usr/bin/CreoleService ] && CreoleService slapd start || /etc/init.d/slapd start
590
}
591

    
592
restoreldap(){
593
    # $1 : répertoire de sauvegarde
594
    Title "Restauration de l'annuaire"
595
    # Recherche de l'ancienne objectClass "sambaServer" (#3730)
596
    dn=$(grep "ou=ordinateurs,ou=ressource" "$1/$LDIF" | grep "dn: cn" | grep -v '\$')
597
    if [ -n "$dn" ];then
598
        Red "L'entrée ldap débutant par \"$dn\" est obsolète."
599
        echo "Veuillez la supprimer du fichier : $LDIF"
600
        echo
601
        exit 1
602
    fi
603
    # Recherche des chemins commençant par /partages (#5686)
604
    grep -q "^sambaFilePath: \/partages\/" "$1/$LDIF"
605
    if [ $? -eq 0 ];then
606
        Red "Des attributs \"sambaFilePath\" débutent par \"/partages\""
607
        echo "Les occurences de \"/partages\" doivent être remplacées par \"/home\" dans le fichier : $LDIF"
608
        echo
609
        exit 1
610
    fi
611
    [ -f "$1/$READER" ] && cp -f "$1/$READER" /root/.reader
612
    # code inspiré de posttemplate/02-annuaire
613
    container_path_annuaire=$(CreoleGet container_path_annuaire)
614
    CHROOT=''
615
    [ ! "$container_path_annuaire" = "" ] && CHROOT="chroot $container_path_annuaire"
616
    # le montage n'est pas accessible depuis le conteneur :)
617
    CreoleService slapd stop -c annuaire
618
    rm -f $container_path_annuaire/var/lib/ldap/*.*
619
    cp -f "$1/$LDIF" "$container_path_annuaire/tmp/$LDIF"
620
    $CHROOT slapadd -f /etc/ldap/slapd.conf -l "/tmp/$LDIF"
621
    testcmd $? "Erreur lors de la restauration de l'annuaire !"
622
    CreoleRun "chown openldap:openldap /var/lib/ldap/*" annuaire
623
    rm -f "$container_path_annuaire/tmp/$LDIF"
624
    CreoleService slapd start -c annuaire
625
    testcmd $? "Erreur lors du redémarrage d'OpenLDAP !"
626
}
627

    
628
saveldap2scribe(){
629
    # $1 : répertoire de sauvegarde
630
    Title "Mise à niveau de l'annuaire"
631
    python -c """ldif = '$1/$LDIF'
632
with open(ldif, 'r') as ldif_buffer:
633
    fic = ldif_buffer.readlines()
634
new = []
635
for line in fic:
636
    if line.startswith('mailDir: ') and '/MailDir/' in line:
637
        new.append('mailDir: /home/mail/%s/' % line.split('/')[3])
638
    else:
639
        new.append(line)
640
if new != fic:
641
    with open(ldif, 'w') as ldif_buffer:
642
        ldif_buffer.write(''.join(new))
643
"""
644
}
645

    
646
restoreldap2scribe(){
647
    # $1 : répertoire de sauvegarde
648
    Title "Mise à niveau de l'annuaire"
649
    python -c """from scribe.eoleshare import Share
650
s = Share()
651
s.ldap_admin.connect()
652
sh = s._get_shares_data()
653
for sha in sh:
654
    if not sha[1].has_key('sambaShareModel'):
655
        name = sha[1]['sambaShareName'][0]
656
        if name in ['icones\$', 'groupes', 'commun', 'devoirs']:
657
            s._set_attr(name, 'sambaShareModel', name)
658
        else:
659
            s._set_attr(name, 'sambaShareModel', 'standard')
660
s.ldap_admin.close()
661
"""
662
}
663

    
664
saveldap2horus(){
665
    # $1 : répertoire de sauvegarde
666
    Title "Mise à niveau de l'annuaire"
667
    sed -i 's/\\profiles$/\\profil/g' "$1/$LDIF"
668
}
669

    
670
restoreldap2horus(){
671
    # $1 : répertoire de sauvegarde
672
    Title "Mise à niveau de l'annuaire"
673
    python -c """from horus.backend import get_share_template, mod_share
674
if get_share_template('minedu') == 'standard':
675
    mod_share('minedu', model='minedu')
676
if get_share_template('groupes') == 'standard':
677
    mod_share('groupes', model='groupes')
678
"""
679
}
680

    
681
usersync(){
682
    Title "Synchronisation des comptes AD"
683
    lsc -f /etc/lsc -s all -t1 | grep -E "INFO|ERROR"
684
    service eole-lsc start
685
    Title "Nettoyage du cache winbind"
686
    /usr/bin/actualise_cache
687
    Title "Restauration des mots de passe"
688
    /usr/share/eole/postservice/10-eolead-inject-password instance force
689
}
690

    
691
savesmb(){
692
    # $1 : répertoire de sauvegarde
693
    Title "Sauvegarde des données liées à SAMBA et à CUPS"
694
    [ -x /usr/bin/CreoleGet ] && container_path_fichier=$(CreoleGet container_path_fichier)
695
    mkdir -p "$1/cups"
696
    cp -f $container_path_fichier/etc/cups/printers.conf "$1/cups" 2>/dev/null
697
    cp -f $container_path_fichier/etc/cups/ppds.dat "$1/cups" 2>/dev/null
698
    cp -rf $container_path_fichier/etc/cups/ppd "$1/cups"
699
    mkdir -p "$1/samba"
700
    #if [ -f $container_path_fichier/var/lib/samba/secrets.tdb ];then
701
    #    cp -f $container_path_fichier/var/lib/samba/secrets.tdb "$1/samba"
702
    #elif [ -f $container_path_fichier/var/lib/samba/private/secrets.tdb ];then
703
    #    cp -f $container_path_fichier/var/lib/samba/private/secrets.tdb "$1/samba"
704
    #else
705
    #    cp -f $container_path_fichier/etc/samba/secrets.tdb  "$1/samba" 2>/dev/null
706
    #fi
707
    cp -rf $container_path_fichier/var/lib/samba/printers "$1/samba"
708
    for f in "ntdrivers.tdb" "ntforms.tdb" "ntprinters.tdb";do
709
    cp -f "$container_path_fichier/var/lib/samba/$f" "$1/samba" 2>/dev/null
710
    done
711
    if [ -f /var/lib/eole/config/sid.sav ];then
712
        cp /var/lib/eole/config/sid.sav "$1/samba/$SID"
713
    else
714
        chroot "/$container_path_fichier" net getlocalsid | /usr/bin/awk '{print $6}' > "$1/samba/$SID"
715
    fi
716
}
717

    
718
restoresmb(){
719
    # $1 : répertoire de sauvegarde
720
    Title "Restauration des données liées à SAMBA et à CUPS"
721
    container_path_fichier=$(CreoleGet container_path_fichier)
722
    cp -f  "$1"/cups/printers.conf "$container_path_fichier/etc/cups/printers.conf" 2>/dev/null
723
    cp -f  "$1"/cups/ppds.dat "$container_path_fichier/etc/cups/ppds.dat" 2>/dev/null
724
    cp -rf "$1"/cups/ppd/* "$container_path_fichier/etc/cups/ppd/" 2>/dev/null
725
    cp -rf "$1"/samba/printers/* "$container_path_fichier/var/lib/samba/printers/" 2>/dev/null
726
    for f in "ntdrivers.tdb" "ntforms.tdb" "ntprinters.tdb";do
727
    cp -f "$1/samba/$f" "$container_path_fichier/var/lib/samba/$f" 2>/dev/null
728
    done
729
    NEWSID=`cat $1/samba/$SID`
730
    # overwrites new (ramdom) SID #25756
731
    cp -f $1/samba/$SID /var/lib/eole/config/sid.sav
732
    CHROOT=''
733
    [ ! "$container_path_fichier" = "" ] && CHROOT="chroot $container_path_fichier"
734
    $CHROOT net setlocalsid $NEWSID
735
    testcmd $? "Impossible de restaurer le SID du domaine"
736
}
737

    
738
savescribemysql(){
739
    # $1 : répertoire de sauvegarde
740
    # $2 : version (22 ou 23)
741
    Title "Sauvegarde des bases Mysql"
742
    if [ -x /usr/bin/CreoleGet ];then
743
        container_path_mysql=$(CreoleGet container_path_mysql)
744
        container_ip_mysql=$(CreoleGet container_ip_mysql)
745
    fi
746
    mkdir -p "$1/mysql"
747
    cp $container_path_mysql/etc/mysql/debian.cnf $1/mysql
748

    
749
    if [ $EOLE_VERSION = '2.6' ];then
750
        mysqlopts="--defaults-file=/etc/mysql/debian.cnf"
751
    else
752
        PASS=`/usr/bin/pwgen -1`
753
        if [ "$2"  = "24" ];then
754
            /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
755
        else
756
            /usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
757
        fi
758
        [ -n "$container_ip_mysql" ] && mysqlhost="-h $container_ip_mysql"
759
        mysqlopts="$mysqlhost -uroot -p$PASS"
760
    fi
761
    [ "$2"  != "22" ] && opt="--events" || opt=""
762
    [ $EOLE_VERSION = '2.6' ] && opt="$opt --single-transaction"
763
    [ "$2"  = "24" ]  && optdb="--databases" || optdb="--database"
764
    DATABASES=$(CreoleRun "mysql $mysqlopts -e \"show databases\"" "mysql" | grep -v "^Database$")
765
    for databasename in $DATABASES;do
766
        [ "$databasename" = "information_schema" ] && continue
767
        [ "$2"  = "24" ] && [ "$databasename" = "performance_schema" ] && continue
768
        echo -n "."
769
        CreoleRun "mysqldump $mysqlopts $optdb $databasename --flush-privileges --create-options -Q -c --lock-tables $opt" "mysql" > "$1/mysql/$databasename.sql"
770
        testcmd $? "Erreur lors de la sauvegarde de la base $databasename !"
771
    done
772
    echo
773
}
774

    
775
savehorusmysql(){
776
    # $1 : répertoire de sauvegarde
777
    # $2 : version (22 ou 23)
778
    Title "Sauvegarde des bases Mysql"
779
    mkdir -p "$1/mysql"
780
    cp /etc/mysql/debian.cnf "$1/mysql"
781
    PASS=`/usr/bin/pwgen -1`
782
    if [ "$2"  = "24" ];then
783
        /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
784
    else
785
        /usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
786
    fi
787
    [ "$2"  != "22" ] && opt="--events" || opt=""
788
    if [ "$2"  = "24" ];then
789
        all="--all-databases"
790
    else
791
        all="--all-database"
792
    fi
793
    mysqldump $all -uroot -p$PASS $opt > "$1/mysql/$MYSQLDB"
794
}
795

    
796
restorescribemysql(){
797
    # $1 : répertoire de sauvegarde
798
    Title "Restauration des bases Mysql"
799
    #testf $1/mysql/mysql.sql
800
    #PASS=`/usr/bin/pwgen -1`
801
    #/usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
802
    # FIXME : intérêt de restaurer la bdd mysql sur Scribe ?
803
    #echo -n "."
804
    #cp -f $1/mysql/debian.cnf /etc/mysql/debian.cnf
805
    #/usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
806
    #adresse_ip_mysql=$(CreoleGet adresse_ip_mysql)
807
    for database in 'sympa';do
808
        echo -n "."
809
        testf "$1/mysql/$database.sql"
810
        mysql --defaults-file=/etc/mysql/debian.cnf <"$1/mysql/$database.sql"
811
    done
812
    echo -n "."
813
    # mysql_upgrade n'est pas disponible sur le maître (fourni par mysql-server)
814
    CreoleRun "mysql_upgrade --defaults-file=/etc/mysql/debian.cnf --force" mysql >/dev/null
815
    echo
816
}
817

    
818
restorehorusmysql(){
819
    # $1 : répertoire de sauvegarde
820
    Title "Restauration des bases Mysql"
821
    echo -n "."
822
    PASS=`/usr/bin/pwgen -1`
823
    /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
824
    testf "$1/mysql/$MYSQLDB"
825
    echo -n "."
826
    mysql -uroot -p$PASS <"$1/mysql/$MYSQLDB"
827
    # synchro du mot de passe debian-sys-maint (#2418)
828
    echo -n "."
829
    /etc/init.d/mysql reload >/dev/null
830
    echo -n "."
831
    cp -f $1/mysql/debian.cnf /etc/mysql/debian.cnf
832
    /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
833
    echo -n "."
834
    mysql_upgrade -uroot -p$PASS --force >/dev/null
835
    echo "."
836
    if [ "$(CreoleGet bareos_db_type sqlite)" = "mysql" ];then
837
        /usr/lib/bareos/scripts/grant_bareos_privileges -uroot -p$PASS -h $(CreoleGet adresse_ip_mysql)
838
    fi
839
}
840

    
841
savebacula22(){
842
    # $1 : répertoire de sauvegarde
843
    Title "Sauvegarde de la configuration bacula"
844
    mkdir -p "$1/bacula"
845
    #cp -f /etc/bacula/typesupport.conf $1/bacula 2>/dev/null
846
    /usr/share/eole/bacula/baculasupport.py -l >"$1/bacula/support.conf"
847
    #cp -f /etc/bacula/eolemsgdefs.pic  $1/bacula 2>/dev/null
848
    #cp -f /etc/bacula/eolemessages.conf $1/bacula 2>/dev/null
849
    /usr/share/eole/bacula/baculamessage.py -l >"$1/bacula/mail.conf"
850
    cp -f /etc/bacula/listefichiers*.conf "$1/bacula"
851
    # chemins Scribe
852
    cp -f /var/www/ead/config/bacula-distant.txt "$1/bacula" 2>/dev/null
853
    cp -f /var/www/ead/config/bacula-usb.txt "$1/bacula" 2>/dev/null
854
    # chemins Horus
855
    cp -f /var/www/ead/tmp/bacula-distant.txt "$1/bacula" 2>/dev/null
856
    cp -f /var/www/ead/tmp/bacula-usb.txt "$1/bacula" 2>/dev/null
857
}
858

    
859
savebacula23(){
860
    # $1 : répertoire de sauvegarde
861
    Title "Sauvegarde de la configuration bacula"
862
    mkdir -p "$1/bacula"
863
    # EOLE 2.3
864
    python -c """from pyeole.bacula import load_bacula_support;
865
for k,v in load_bacula_support().items():print '{0}=\"{1}\"'.format(k,v)""" > $1/bacula/bacula23.conf
866
    python -c """from pyeole.bacula import load_bacula_mail;mail=load_bacula_mail();
867
if mail:
868
    for k,v in mail.items():print '{0}=\"{1}\"'.format(k,v)""" >> $1/bacula/bacula23.conf
869
    if [ -f /var/lib/eole/config/baculajobs.conf ];then
870
        cp -f /var/lib/eole/config/baculajobs.conf $1/bacula/baculajobs.conf
871
    fi
872
}
873

    
874
savebacula24(){
875
    # $1 : répertoire de sauvegarde
876
    Title "Sauvegarde de la configuration bacula"
877
    if [ -f $1/extra/bacula/config.eol ];then
878
        [ -d $1/extra/bareos ] && rm -rf $1/extra/bareos
879
        mv -f $1/extra/bacula $1/extra/bareos
880
        sed -i 's/bacula/bareos/g' $1/extra/bareos/config.eol
881
    fi
882
}
883

    
884
restorebacula(){
885
    # $1 : répertoire de sauvegarde
886
    Title "Restauration de la configuration des sauvegardes"
887
    if [ -f $1/extra/bareos/config.eol ];then
888
        # configuration "extra" en 2.4
889
        return
890
    fi
891
    script="/usr/share/eole/sbin/bareosconfig.py"
892
    if [ -f $1/bacula/bacula23.conf ];then
893
        . $1/bacula/bacula23.conf
894
    else
895
        support=`cat $1/bacula/support.conf`
896
        if [ "$support" = 'bande' ];then
897
            support='manual'
898
        elif [ "$support" = 'usb' ];then
899
            usb_path=`cat "$1/bacula/bacula-usb.txt" 2>/dev/null`
900
        elif [ "$support" = "distant" ];then
901
            support='smb'
902
            if [ -f "$1/bacula/bacula-distant.txt" ];then
903
                smb_machine=`awk -F ' ' '{print $1}' "$1/bacula/bacula-distant.txt"`
904
                if [ "${smb_machine:0:2}" = "//" ];then
905
                    # format Horus-2.2
906
                    smb_partage=`echo $smb_machine | awk -F '/' '{print $4}'`
907
                    smb_machine=`echo $smb_machine | awk -F '/' '{print $3}'`
908
                    smb_login=`awk -F ' ' '{print $3}' "$1/bacula/bacula-distant.txt"`
909
                    smb_password=`awk -F ' ' '{print $4}' "$1/bacula/bacula-distant.txt"`
910
                else
911
                    # format Scribe-2.2
912
                    smb_partage=`awk -F ' ' '{print $3}' "$1/bacula/bacula-distant.txt"`
913
                    smb_login=`awk -F ' ' '{print $4}' "$1/bacula/bacula-distant.txt"`
914
                    smb_password=`awk -F ' ' '{print $5}' "$1/bacula/bacula-distant.txt"`
915
                fi
916
                smb_ip=`awk -F ' ' '{print $2}' "$1/bacula/bacula-distant.txt"`
917
            fi
918
        fi
919
        mail_ok=`awk -F ';' '{print $2}' "$1/bacula/mail.conf"`
920
        mail_error=`awk -F ';' '{print $3}' "$1/bacula/mail.conf"`
921
    fi
922

    
923
    # restauration des adresses mail
924
    echo -n "."
925
    [ ! -z "$mail_ok" ] && $script -m --mail_ok=$mail_ok
926
    echo -n "."
927
    [ ! -z "$mail_error" ] && $script -m --mail_error=$mail_error
928
    echo "."
929
    # restaurtion du support "manual"
930
    if [ "$support" = 'manual' ];then
931
        $script -s manual
932
    # restauration du support "usb"
933
    elif [ "$support" = 'usb' ];then
934
        if [ -z "$usb_path" ];then
935
            Orange "Support USB non configuré"
936
        else
937
            $script -s usb --usb_path=$usb_path
938
        fi
939
    # restauration du support "smb"
940
    elif [ "$support" = 'smb' ];then
941
        if [ -z "$smb_machine" -o -z "$smb_ip" -o -z "$smb_partage" ];then
942
            Orange "Configuration smb incomplète"
943
        else
944
            smbopts="--smb_machine=$smb_machine --smb_ip=$smb_ip --smb_partage=$smb_partage"
945
            if [ ! -z "$smb_login" -a ! -z "$smb_password" ];then
946
                smbopts="$smbopts --smb_login=$smb_login --smb_password=$smb_password"
947
            fi
948
            $script -s smb $smbopts
949
        fi
950
    elif [ "$support" = 'none' ];then
951
        Orange "Aucun support de sauvegarde configuré"
952
    else
953
        Orange "Support de sauvegarde \"$support\" inconnu"
954
    fi
955
    if [ -f $1/bacula/baculajobs.conf ];then
956
        python -c """import sys
957
from pickle import load
958
from pyeole.bareos import add_job
959
for job in load(file('$1/bacula/baculajobs.conf', 'r')):
960
    job.update({'no_reload':True})
961
    try:
962
        add_job(**job)
963
        sys.stdout.write('.')
964
    except Exception, msg:
965
        print msg
966
"""
967
    fi
968
}
969

    
970
saveamon(){
971
    # $1 : répertoire de sauvegarde
972
    Title "Sauvegarde des personnalisations DansGuardian"
973
    [ -x /usr/bin/CreoleGet ] && container_path_proxy=$(CreoleGet container_path_proxy)
974
    mkdir -p "$1/dansguardian"
975
    dg=$container_path_proxy/var/lib/blacklists/dansguardian
976
    if [ -d "${dg}0" ];then
977
        mkdir -p "$1/dansguardian/dansguardian0"
978
        cp -rf "${dg}0/"* "$1/dansguardian/dansguardian0"
979
    fi
980
    if [ -d "${dg}1" ];then
981
        mkdir -p "$1/dansguardian/dansguardian1"
982
        cp -rf "${dg}1/"* "$1/dansguardian/dansguardian1"
983
    fi
984

    
985
    mkdir -p "$1/ead"
986
    ead=/usr/share/ead2/backend/tmp
987
    config=/var/lib/eole/config
988
    # Sites / Mode de filtrage
989
    cp -f $ead/filtrage-contenu* "$1/ead" 2>/dev/null
990
    # "Destinations interdites"
991
    cp -f $ead/dest_interdites*.txt "$1/ead" 2>/dev/null
992
    # "Sources interdites" (web)
993
    cp -f $ead/horaire_ip*.txt "$1/ead" 2>/dev/null
994
    # "Sources interdites" (réseau)
995
    cp -f $ead/poste_all*.txt "$1/ead" 2>/dev/null
996
    # Groupe de machine
997
    cp -f $ead/ipset_group*.txt "$1/ead" 2>/dev/null
998
    cp -f $ead/ipset_schedules*.pickle "$1/ead" 2>/dev/null
999
    # Règles du pare-feu
1000
    if [ -f $config/regles.csv ];then
1001
        cp -f $config/regles.csv "$1/ead" 2>/dev/null
1002
    else
1003
        cp -f $ead/regles.csv "$1/ead" 2>/dev/null
1004
    fi
1005
    oldead=/var/www/ead/tmp
1006
    cp -f $oldead/kill-p2p "$1/ead" 2>/dev/null
1007
    if [ -f $config/horaires.txt ];then
1008
        cp -f $config/horaires.txt "$1/ead" 2>/dev/null
1009
    else
1010
        cp -f $oldead/horaires.txt "$1/ead" 2>/dev/null
1011
    fi
1012

    
1013
    mkdir -p "$1/squid"
1014
    squid=$container_path_proxy/etc/squid
1015
    # /etc/squid3 sur EOLE 2.4
1016
    [ ! -d $squid ] && squid=${squid}3
1017

    
1018
    Title "Sauvegarde des personnalisations Squid"
1019
    cp -f $squid/domaines_nocache_* "$1/squid" 2>/dev/null
1020
    cp -f $squid/domaines_noauth_* "$1/squid" 2>/dev/null
1021
    cp -f $squid/src_noauth_* "$1/squid" 2>/dev/null
1022
    cp -f $squid/src_nocache_* "$1/squid" 2>/dev/null
1023
}
1024

    
1025
restoreamon(){
1026
    # $1 : répertoire de sauvegarde
1027
    Title "Restauration des personnalisations Eole-Guardian"
1028
    container_path_proxy=$(CreoleGet container_path_proxy)
1029
    dg=$container_path_proxy/var/lib/blacklists/dansguardian
1030
    if [ $(CreoleGet dans_instance_1_active "non") == "oui" ];then
1031
        if [ -d "$1/dansguardian/dansguardian0" ];then
1032
            cp -rf "$1/dansguardian/dansguardian0/"* "${dg}0"
1033
        fi
1034
    fi
1035
    if [ $(CreoleGet dans_instance_2_active "non") == "oui" ];then
1036
        if [ -d "$1/dansguardian/dansguardian1" ];then
1037
            cp -rf "$1/dansguardian/dansguardian1/"* "${dg}1"
1038
        fi
1039
    fi
1040

    
1041
    ead=/usr/share/ead2/backend/tmp
1042
    for f in "filtrage-contenu*" "dest_interdites*.txt" "horaire_ip*.txt"\
1043
             "poste_all*.txt" "ipset_group*.txt" "ipset_schedules*.pickle";do
1044
        cp -f "$1/ead/"$f $ead 2>/dev/null
1045
    done
1046

    
1047
    if [ ! -f "$1/ead/kill-p2p" ];then
1048
        # il est à "on" par défaut sur 2.3
1049
        echo "KILLP2P=off" > /var/lib/eole/config/killp2p.conf
1050
    fi
1051
    cp -f "$1/ead/horaires.txt" /var/lib/eole/config/horaires.txt 2>/dev/null
1052
    cp -f "$1/ead/regles.csv" /var/lib/eole/config/regles.csv 2>/dev/null
1053

    
1054
    squid=$container_path_proxy/etc/squid3
1055
    Title "Restauration des personnalisations Squid"
1056
    cp -f $1/squid/domaines_nocache_* "$squid" 2>/dev/null
1057
    cp -f $1/squid/domaines_noauth_* "$squid" 2>/dev/null
1058
    cp -f $1/squid/src_noauth_* "$squid" 2>/dev/null
1059
    cp -f $1/squid/src_nocache_* "$squid" 2>/dev/null
1060
}
1061

    
1062
saveenvole(){
1063
    # $1 : répertoire de sauvegarde
1064
    Title "Sauvegarde des applications web"
1065
    [ -x /usr/bin/CreoleGet ] && container_path_web=$(CreoleGet container_path_web)
1066
    mkdir -p $1/html
1067
    cp -rpf $container_path_web/var/www/html/ "$1"
1068

    
1069
    mkdir -p $1/www-data
1070
    if [ -d /home/www-data ];then
1071
        Title "Sauvegarde des données des applications web"
1072
        cp -rpf /home/www-data/ "$1"
1073
    fi
1074

    
1075
    mkdir -p $1/redis
1076
    if [ -d /var/lib/redis ];then
1077
        Title "Sauvegarde des bases Redis"
1078
        cp -rpf /var/lib/redis/ "$1"
1079
    fi
1080
}
1081

    
1082
savedivers(){
1083
    # $1 : répertoire de sauvegarde
1084
    Title "Sauvegarde des autres fichiers"
1085
    # sauvegarde des certificats SSL (#2475)
1086
    mkdir -p $1/ssl
1087
    cp -rf /etc/ssl/* "$1/ssl"
1088
    # suppression des liens symbolique
1089
    find "$1/ssl" -type l -delete
1090
    mkdir -p $1/config
1091
    ead_config=/usr/share/ead2/backend/config
1092
    [ -f "$ead_config/perm_local.ini" ] && cp -f "$ead_config/perm_local.ini" "$1/config"
1093
    [ -f "$ead_config/roles_local.ini" ] && cp -f "$ead_config/roles_local.ini" "$1/config"
1094
    ead_tmp=/usr/share/ead2/backend/tmp
1095
    eole_config=/var/lib/eole/config
1096
    [ -f "$ead_tmp/cron.txt" ] && cp -f "$ead_tmp/cron.txt" "$1/config/cron.txt"
1097
    if [ -f "$eole_config/bp_server.conf" ];then
1098
        cp -f "$eole_config/bp_server.conf" "$1/config/bp_server.conf"
1099
    else
1100
        cp -f "$ead_tmp/bp_server.txt" "$1/config/bp_server.conf"
1101
    fi
1102
    [ -d /usr/share/horus/models ] && cp -rf /usr/share/horus/models "$1/config"
1103
    [ -f /usr/share/eole/wpkg/wpkg_config.eol ] && cp /usr/share/eole/wpkg/wpkg_config.eol "$1"
1104
    cp -f $eole_config/dhcp.conf "$1/config/" 2>/dev/null
1105
    echo
1106
}
1107

    
1108
savesso(){
1109
    # $1 : répertoire de sauvegarde
1110
    sso_dir=/usr/share/sso
1111
    if [ -d $sso_dir ];then
1112
        Title "Sauvegarde des données du service SSO"
1113
        # filtres et fichiers de configuration SSO
1114
        backup_dir=$1/sso
1115
        mkdir -p $backup_dir
1116
        for sso_conf_dir in app_filters attribute_sets external_attrs user_infos metadata interface securid_users
1117
        do
1118
            [ -d ${sso_dir}/${sso_conf_dir} ] && /bin/cp -rf ${sso_dir}/${sso_conf_dir} $backup_dir
1119
        done
1120
    fi
1121
}
1122

    
1123
savecreole(){
1124
    # $1 : répertoire de sauvegarde
1125
    BACKUP_DIR="$1/creolelocal"
1126
    Title "Sauvegarde des personnalisations Creole locales (non restauré)"
1127
    mkdir -p ${BACKUP_DIR}/distrib
1128
    mkdir -p ${BACKUP_DIR}/dicos
1129
    mkdir -p ${BACKUP_DIR}/patch
1130
    if [ -d /usr/share/eole/creole ];then
1131
        CREOLE_DIR="/usr/share/eole/creole"
1132
    else
1133
        CREOLE_DIR="/etc/eole"
1134
    fi
1135
    # dictionnaires locaux
1136
    /bin/cp -rf $CREOLE_DIR/dicos/local/*.xml ${BACKUP_DIR}/dicos/ >/dev/null 2>&1
1137
    # patchs
1138
    /bin/cp -rf $CREOLE_DIR/patch/*.patch ${BACKUP_DIR}/patch/ >/dev/null 2>&1
1139
    # templates non installés par un paquet (variante et locaux)
1140
    for TMPL in `ls $CREOLE_DIR/distrib/*`
1141
    do
1142
        dpkg -S $TMPL >/dev/null 2>&1
1143
        if [ $? -ne 0 ];then
1144
            /bin/cp -rf $TMPL ${BACKUP_DIR}/distrib/
1145
        fi
1146
    done
1147
}
1148

    
1149
restoredivers(){
1150
    # $1 : répertoire de sauvegarde
1151
    Title "Restauration des autres fichiers"
1152
    # restauration des certificats SSL (#2475, #25538)
1153
    cp -rf "$1"/ssl/* /etc/ssl
1154
    mv -f /etc/ssl/certs/eole.key /etc/ssl/private/
1155
    chmod 600 /etc/ssl/private/eole.key
1156
    ead_config=/usr/share/ead2/backend/config/
1157
    [ -f "$1/config/perm_local.ini" ] && cp -f "$1/config/perm_local.ini" "$ead_config"
1158
    [ -f "$1/config/roles_local.ini" ] && cp -f "$1/config/roles_local.ini" "$ead_config"
1159
    cp -f "$1/config/bp_server.conf" /var/lib/eole/config 2>/dev/null
1160
    # restauration des configurations extra
1161
    [ -d $1/extra ] && cp -rf $1/extra/* /etc/eole/extra/
1162
    if [ -d "$1/config/models" ];then
1163
        rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/config/models" /usr/share/eole/fichier/models >/dev/null
1164
    fi
1165
    if [ -f "$1/wpkg_config.eol" ];then
1166
        mkdir -p /usr/share/eole/wpkg
1167
        cp -f "$1/wpkg_config.eol" /usr/share/eole/wpkg
1168
    fi
1169
    # désactivation de la maj hebdomadaire
1170
    if [ -f "$1/config/cron.txt" ] && [ $(cat "$1/config/cron.txt" | wc -w) -eq 0 ];then
1171
        /usr/share/eole/schedule/manage_schedule post majauto weekly del >/dev/null
1172
    fi
1173
    cp -f "$1/config/dhcp.conf" /var/lib/eole/config/dhcp.conf 2>/dev/null
1174
    echo
1175
}
1176

    
1177
restoresso(){
1178
    # $1 : répertoire de sauvegarde
1179
    sso_dir=/usr/share/sso
1180
    if [ -d $sso_dir ];then
1181
        Title "Restauration des données du service SSO"
1182
        restoresso_dir(){
1183
            # restauration des fichiers d'un répertoire (si non existants)
1184
            src_dir=$1
1185
            dest_dir=$2
1186
            extensions=*
1187
            # traite tout les fichier ou une extension particulière
1188
            [ -z "$3" ] || extensions=*.$3
1189
            mkdir -p ${dest_dir}
1190
            if [ -d $src_dir ];then
1191
                for data_file in `ls -d ${src_dir}/${extensions} 2>/dev/null`;do
1192
                    # on n'écrase pas les fichiers installés par les paquet
1193
                    filename=`basename $data_file`
1194
                    [ -e ${dest_dir}/${filename} ] || /bin/cp -r $data_file $dest_dir/
1195
                done
1196
            fi
1197
        }
1198
        ## répetoires de filtres, attributs calculés, metadata, ..
1199
        backup_dir=$1/sso
1200
        for sso_conf_dir in app_filters attribute_sets external_attrs user_infos metadata securid_users;do
1201
            restoresso_dir ${backup_dir}/${sso_conf_dir} ${sso_dir}/${sso_conf_dir}
1202
        done
1203
        interf_dir=${sso_dir}/interface
1204
        int_backup_dir=$1/sso/interface
1205
        ## presonnalisations de l'interface
1206
        # themes et infos homonymes
1207
        for data_dir in images themes theme/image theme/style info_homonymes;do
1208
            restoresso_dir ${int_backup_dir}/${data_dir} ${interf_dir}/${data_dir}
1209
        done
1210
        # fichiers divers de l'interface (avertissement.txt, fichiers .css et .tmpl)
1211
        restoresso_dir $int_backup_dir $interf_dir "tmpl"
1212
        restoresso_dir $int_backup_dir $interf_dir "css"
1213
        restoresso_dir $int_backup_dir $interf_dir "txt"
1214
    fi
1215
}
1216

    
1217
#scribedivers(){
1218
#    # $1 : répertoire de sauvegarde
1219
#    #Title "Sauvegarde des autres fichiers"
1220
#    mkdir -p $1/config
1221
#    else
1222
#        echo "simple" > $1/config/controlevnc.conf
1223
#    fi
1224
#    # FIXME : posh et applications => c'est mort ?
1225
#}
1226

    
1227
finsauve(){
1228
    echo
1229
    Green "Sauvegarde spéciale terminée"
1230
}
1231

    
1232
finresto(){
1233
    Green "Restauration spéciale terminée"
1234
}
1235

    
1236
scribe22(){
1237
    ## SAUVEGARDE SPECIALE POUR SCRIBE-2.2 ##
1238
    montage $DD
1239
    /etc/init.d/samba stop
1240
    /etc/init.d/nscd start
1241
    DDS="$DD/scribe-$numero_etab"
1242
    /bin/mkdir -p "$DDS"
1243
    saveconfigeol "$DDS"
1244
    savecreole "$DDS"
1245
    questionsave '/home'
1246
    savedata=$?
1247
    [ $savedata -eq 0 ] && savescribedata "$DDS"
1248
    savemail "$DDS"
1249
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1250
    /etc/init.d/slapd restart
1251
    savequota "$DDS"
1252
    savescribeacl "$DDS"
1253
    saveldap "$DDS"
1254
    saveldap2scribe "$DDS"
1255
    savesmb "$DDS"
1256
    savescribemysql "$DDS" '22'
1257
    savebacula22 "$DDS"
1258
    saveenvole "$DDS"
1259
    savesso "$DDS"
1260
    savedivers "$DDS"
1261
    demontage $DD
1262
    /etc/init.d/samba start
1263
    finsauve
1264
}
1265

    
1266
horus22(){
1267
    ## SAUVEGARDE SPECIALE POUR HORUS-2.2 ##
1268
    montage $DD
1269
    /etc/init.d/xinetd stop
1270
    /etc/init.d/samba stop
1271
    /etc/init.d/nscd start
1272
    DDS="$DD/horus-$numero_etab"
1273
    saveconfigeol "$DDS"
1274
    savecreole "$DDS"
1275
    questionsave '/data'
1276
    savedata=$?
1277
    [ $savedata -eq 0 ] && savehorusdata "$DDS"
1278
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1279
    /etc/init.d/slapd restart
1280
    savequota "$DDS"
1281
    [ $savedata -eq 0 ] && savehorusacl "$DDS"
1282
    saveldap "$DDS"
1283
    saveldap2horus "$DDS"
1284
    savesmb "$DDS"
1285
    savehorusmysql "$DDS" '22'
1286
    savebacula22 "$DDS"
1287
    savesso "$DDS"
1288
    savedivers "$DDS"
1289
    demontage $DD
1290
    /etc/init.d/samba start
1291
    [ "$xinet_interbase" != 'non' ] && /etc/init.d/xinetd start
1292
    finsauve
1293
}
1294

    
1295
amon22(){
1296
    ## SAUVEGARDE SPECIALE POUR AMON-2.2 ##
1297
    montage $DD
1298
    DDS="$DD/amon-$numero_etab"
1299
    saveconfigeol "$DDS"
1300
    savecreole "$DDS"
1301
    saveamon "$DDS"
1302
    savesso "$DDS"
1303
    savedivers "$DDS"
1304
    demontage $DD
1305
    finsauve
1306
}
1307

    
1308
scribe23(){
1309
    ## SAUVEGARDE SPECIALE POUR SCRIBE-2.3 et AmonEcole 2.3 ##
1310
    montage $DD
1311
    CreoleService smbd stop
1312
    CreoleService nscd start
1313
    DDS="$DD/scribe-$numero_etab"
1314
    /bin/mkdir -p "$DDS"
1315
    saveconfigeol "$DDS"
1316
    savecreole "$DDS"
1317
    questionsave '/home'
1318
    savedata=$?
1319
    [ $savedata -eq 0 ] && savescribedata "$DDS"
1320
    savemail "$DDS"
1321
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1322
    CreoleService slapd restart
1323
    savequota "$DDS"
1324
    savescribeacl "$DDS"
1325
    saveldap "$DDS"
1326
    saveldap2scribe "$DDS"
1327
    savesmb "$DDS"
1328
    savescribemysql "$DDS" '23'
1329
    savebacula23 "$DDS"
1330
    saveenvole "$DDS"
1331
    [ "$1" = "amonecole" ] && saveamon "$DDS"
1332
    savesso "$DDS"
1333
    savedivers "$DDS"
1334
    demontage $DD
1335
    CreoleService smbd start
1336
    finsauve
1337
}
1338

    
1339
horus23(){
1340
    ## SAUVEGARDE SPECIALE POUR HORUS-2.3 ##
1341
    montage $DD
1342
    CreoleService xinetd stop
1343
    CreoleService smbd stop
1344
    CreoleService nscd start
1345
    DDS="$DD/horus-$numero_etab"
1346
    saveconfigeol "$DDS"
1347
    savecreole "$DDS"
1348
    questionsave '/home'
1349
    savedata=$?
1350
    [ $savedata -eq 0 ] && savehorusdata "$DDS"
1351
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1352
    CreoleService slapd restart
1353
    savequota "$DDS"
1354
    [ $savedata -eq 0 ] && savehorusacl "$DDS"
1355
    saveldap "$DDS"
1356
    #saveldap2horus "$DDS"
1357
    savesmb "$DDS"
1358
    savehorusmysql "$DDS" '23'
1359
    savebacula23 "$DDS"
1360
    savesso "$DDS"
1361
    savedivers "$DDS"
1362
    demontage $DD
1363
    CreoleService smbd start
1364
    [ "$activer_interbase" != 'non' ] && CreoleService xinetd start
1365
    finsauve
1366
}
1367

    
1368
amon23(){
1369
    ## SAUVEGARDE SPECIALE POUR AMON >= 2.3 ##
1370
    # $1 : "25" ou rien
1371
    montage $DD "$1"
1372
    DDS="$DD/amon-$numero_etab"
1373
    saveconfigeol "$DDS"
1374
    savecreole "$DDS"
1375
    saveamon "$DDS"
1376
    savesso "$DDS"
1377
    savedivers "$DDS"
1378
    demontage $DD
1379
    finsauve
1380
}
1381

    
1382
scribe24(){
1383
    ## SAUVEGARDE SPECIALE POUR SCRIBE >= 2.4 et AmonEcole >= 2.4 ##
1384
    # $1 : "amonecole" ou rien
1385
    # $2 : "25" ou rien
1386
    montage $DD "$2"
1387
    CreoleService smbd stop
1388
    CreoleService nscd start
1389
    DDS="$DD/scribe-$numero_etab"
1390
    /bin/mkdir -p "$DDS"
1391
    saveconfigeol "$DDS"
1392
    savecreole "$DDS"
1393
    questionsave '/home'
1394
    savedata=$?
1395
    [ $savedata -eq 0 ] && savescribedata "$DDS"
1396
    savemail "$DDS"
1397
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1398
    CreoleService slapd restart
1399
    savequota "$DDS"
1400
    savescribeacl "$DDS"
1401
    saveldap "$DDS"
1402
    # saveldap2scribe "$DDS"
1403
    savesmb "$DDS"
1404
    savescribemysql "$DDS" '24'
1405
    savebacula24 "$DDS"
1406
    saveenvole "$DDS"
1407
    [ "$1" = "amonecole" ] && saveamon "$DDS"
1408
    savesso "$DDS"
1409
    savedivers "$DDS"
1410
    demontage $DD
1411
    CreoleService smbd start
1412
    finsauve
1413
}
1414

    
1415
horus24(){
1416
    ## SAUVEGARDE SPECIALE POUR HORUS >= 2.4 ##
1417
    # $1 : "25" ou rien
1418
    montage $DD "$1"
1419
    CreoleService xinetd stop
1420
    CreoleService smbd stop
1421
    CreoleService nscd start
1422
    DDS="$DD/horus-$numero_etab"
1423
    saveconfigeol "$DDS"
1424
    savecreole "$DDS"
1425
    questionsave '/home'
1426
    savedata=$?
1427
    [ $savedata -eq 0 ] && savehorusdata "$DDS"
1428
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1429
    CreoleService slapd restart
1430
    savequota "$DDS"
1431
    [ $savedata -eq 0 ] && savehorusacl "$DDS"
1432
    saveldap "$DDS"
1433
    #saveldap2horus "$DDS"
1434
    savesmb "$DDS"
1435
    savehorusmysql "$DDS" '24'
1436
    savebacula24 "$DDS"
1437
    savesso "$DDS"
1438
    savedivers "$DDS"
1439
    demontage $DD
1440
    CreoleService smbd start
1441
    [ "$activer_interbase" != 'non' ] && CreoleService xinetd start
1442
    finsauve
1443
}
1444

    
1445
scribe27(){
1446
    ## RESTAURATION SPECIALE POUR SCRIBE-2.7 ##
1447
    Alerte
1448
    montage $DD '25'
1449
    DDS="$DD/scribe-$numero_etab"
1450
    testf "$DDS"
1451
    questionrestore "$DDS" '/home'
1452
    restoacl=$?
1453
    CreoleService smbd stop -c fichier
1454
    CreoleService nmbd stop -c fichier
1455
    service eole-lsc stop
1456
    restoreldap "$DDS"
1457
    restoreldap2scribe "$DDS"
1458
    usersync
1459
    restoresmb "$DDS"
1460
    restorescribedata "$DDS"
1461
    restoremail "$DDS"
1462
    restorequota "$DDS"
1463
    [ $restoacl -eq 0 ] && restoreacl "$DDS"
1464
    genadhome
1465
    restorescribemysql "$DDS"
1466
    restorebacula "$DDS"
1467
    [ "$1" = "amonecole" ] && restoreamon "$DDS"
1468
    restoresso "$DDS"
1469
    restoredivers "$DDS"
1470
    demontage $DD
1471
    CreoleService smbd start -c fichier
1472
    CreoleService nmbd start -c fichier
1473
}
1474

    
1475
horus27(){
1476
    ## RESTAURATION SPECIALE POUR HORUS-2.7 ##
1477
    Alerte
1478
    montage $DD '25'
1479
    DDS="$DD/horus-$numero_etab"
1480
    testf "$DDS"
1481
    CreoleService smbd stop -c fichier
1482
    CreoleService nmbd stop -c fichier
1483
    CreoleService xinetd stop -c interbase 2>/dev/null
1484
    restoreldap "$DDS"
1485
    restoreldap2horus "$DDS"
1486
    restoresmb "$DDS"
1487
    restorehorusdata "$DDS"
1488
    restorequota "$DDS"
1489
    restoreacl "$DDS"
1490
    restorehorusmysql "$DDS"
1491
    restorebacula "$DDS"
1492
    restoresso "$DDS"
1493
    restoredivers "$DDS"
1494
    demontage $DD
1495
    CreoleService smbd start -c fichier
1496
    CreoleService nmbd start -c fichier
1497
    [ $(CreoleGet activer_interbase) != 'non' ] && CreoleService xinetd start -c interbase
1498
}
1499

    
1500
amon27(){
1501
    ## RESTAURATION SPECIALE POUR AMON-2.7 ##
1502
    Alerte2
1503
    montage $DD '25'
1504
    DDS="$DD/amon-$numero_etab"
1505
    testf "$DDS"
1506
    restoreamon "$DDS"
1507
    restoresso "$DDS"
1508
    restoredivers "$DDS"
1509
    demontage $DD
1510
}
1511

    
1512
savezephir(){
1513
    enregistrement_zephir --check > /dev/null
1514
    if [ $? -eq 0 ];then
1515
        Title "Sauvegarde des données locales sur Zéphir"
1516
        /usr/share/zephir/scripts/zephir_client save_files
1517
    fi
1518
}
1519

    
1520
# Sauvegarde
1521
if [ -f /etc/eole/version ]
1522
then
1523
    version=`cat /etc/eole/version`
1524
    if [ "$version" = "scribe-2.2" ];then
1525
        clear
1526
        Version
1527
        Green "Sauvegarde du module $version"
1528
        scribe22
1529
    elif [ "$version" = "horus-2.2" ];then
1530
        clear
1531
        Version
1532
        Green "Sauvegarde du module $version"
1533
        horus22
1534
    elif [ "$version" = "amon-2.2" -o "$version" = "amonecole-2.2" ];then
1535
        clear
1536
        Version
1537
        Green "Sauvegarde du module $version"
1538
        amon22
1539
    else
1540
        Version
1541
        Red "Détection du module 2.2 impossible !"
1542
        exit 1
1543
    fi
1544
elif [ -f /etc/eole/release ]
1545
then
1546
    . /etc/eole/release
1547
    version="$EOLE_MODULE-$EOLE_VERSION"
1548
    # Question => Question_ouinon
1549
    Question() {
1550
         Question_ouinon "$1"
1551
    }
1552
    if [ $EOLE_VERSION == '2.3' ];then
1553
        if [ "$version" = "scribe-2.3" ];then
1554
            clear
1555
            Version
1556
            Green "Sauvegarde du module $version"
1557
            scribe23
1558
        elif [ "$version" = "horus-2.3" ];then
1559
            clear
1560
            Version
1561
            Green "Sauvegarde du module $version"
1562
            horus23
1563
        elif [ "$version" = "amon-2.3" ];then
1564
            clear
1565
            Version
1566
            Green "Sauvegarde du module $version"
1567
            amon23
1568
        elif [ "$version" = "amonecole-2.3" -o "$version" = "amonecole+-2.3" ];then
1569
            clear
1570
            Version
1571
            Green "Sauvegarde du module $version"
1572
            scribe23 "amonecole"
1573
        else
1574
            Version
1575
            Red "Détection du module 2.3 impossible !"
1576
            exit 1
1577
        fi
1578
    elif [ $EOLE_VERSION == '2.4' ];then
1579
        if [ "$version" = "scribe-2.4" ];then
1580
            clear
1581
            Version
1582
            Green "Sauvegarde du module $version"
1583
            scribe24
1584
        elif [ "$version" = "horus-2.4" ];then
1585
            clear
1586
            Version
1587
            Green "Sauvegarde du module $version"
1588
            horus24
1589
        elif [ "$version" = "amon-2.4" ];then
1590
            clear
1591
            Version
1592
            Green "Sauvegarde du module $version"
1593
            amon23
1594
        elif [ "$version" = "amonecole-2.4" ];then
1595
            clear
1596
            Version
1597
            Green "Sauvegarde du module $version"
1598
            scribe24 "amonecole"
1599
        else
1600
            Version
1601
            Red "Détection du module 2.4 impossible !"
1602
            exit 1
1603
        fi
1604
    elif [ $EOLE_VERSION == '2.5' ];then
1605
        if [ "$version" = "scribe-2.5" ];then
1606
            clear
1607
            Version
1608
            Green "Sauvegarde du module $version"
1609
            scribe24 '' '25'
1610
        elif [ "$version" = "horus-2.5" ];then
1611
            clear
1612
            Version
1613
            Green "Sauvegarde du module $version"
1614
            horus24 '25'
1615
        elif [ "$version" = "amon-2.5" ];then
1616
            clear
1617
            Version
1618
            Green "Sauvegarde du module $version"
1619
            amon23 '25'
1620
        elif [ "$version" = "amonecole-2.5" ];then
1621
            clear
1622
            Version
1623
            Green "Sauvegarde du module $version"
1624
            scribe24 "amonecole" '25'
1625
        else
1626
            Version
1627
            Red "Détection du module 2.5 impossible !"
1628
            exit 1
1629
        fi
1630
    elif [ $EOLE_VERSION == '2.6' ];then
1631
        if [ "$version" = "scribe-2.6" ];then
1632
            clear
1633
            Version
1634
            Green "Sauvegarde du module $version"
1635
            scribe24 '' '25'
1636
        elif [ "$version" = "horus-2.6" ];then
1637
            clear
1638
            Version
1639
            Green "Sauvegarde du module $version"
1640
            horus24 '25'
1641
        elif [ "$version" = "amon-2.6" ];then
1642
            clear
1643
            Version
1644
            Green "Sauvegarde du module $version"
1645
            amon23 '25'
1646
        elif [ "$version" = "amonecole-2.6" ];then
1647
            clear
1648
            Version
1649
            Green "Sauvegarde du module $version"
1650
            scribe24 "amonecole" '25'
1651
        else
1652
            Version
1653
            Red "Détection du module 2.6 impossible !"
1654
            exit 1
1655
        fi
1656
    elif [ $EOLE_VERSION == '2.7' ];then
1657
        if [ "$version" = "scribe-2.7" ];then
1658
            clear
1659
            Version
1660
            Green "Restauration du module $version"
1661
            scribe27
1662
        elif [ "$version" = "horus-2.7" ];then
1663
            clear
1664
            Version
1665
            Green "Restauration du module $version"
1666
            horus27
1667
        elif [ "$version" = "amon-2.7" ];then
1668
            clear
1669
            Version
1670
            Green "Restauration du module $version"
1671
            amon27
1672
#        elif [ "$version" = "amonecole-2.7" ];then
1673
#            clear
1674
#            Version
1675
#            Green "Restauration du module $version"
1676
#            scribe27 "amonecole"
1677
        else
1678
            Version
1679
            Red "Détection du module 2.7 impossible !"
1680
            exit 1
1681
        fi
1682
        savezephir
1683
        echo
1684
        finresto
1685
    else
1686
        Version
1687
        Red "Détection du module impossible !"
1688
        exit 1
1689
    fi
1690
else
1691
    Version
1692
    Red "Détection du module impossible !"
1693
    exit 1
1694
fi
1695
echo
1696
exit 0