Projet

Général

Profil

migration26.sh

Benjamin Bohard, 21/10/2016 16:59

Télécharger (51,8 ko)

 
1
#!/bin/bash
2

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

    
11
VERSION="20160617"
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
UMOUNT_NEEDED=0
23

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

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

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

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

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

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

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

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

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

    
78
Title(){
79
    echo
80
    Cyan "  * $1"
81
}
82

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

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

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

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

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

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

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

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

    
196
savebcdi(){
197
    # $1 : répertoire de sauvegarde
198
    if [ -d /home/bcdiserv ];then
199
        Question "Voulez-vous sauvegarder les fichiers liés à Bcdi Web ?"
200
        if [ $? -eq 0 ];then
201
            Title "Sauvegarde de Bcdi Web"
202
            mkdir -p "$1/bcdi"
203
            cp -R /home/bcdiserv "$1/home/"
204
            cp -R /var/www/html/bcdiweb "$1/bcdi/"
205
            cp -f /etc/apache2/sites-enabled/bcdiweb.conf "$1/bcdi/"
206
            cp -f /etc/default/rsync "$1/bcdi/"
207
            cp -f /etc/rsyncd.conf "$1/bcdi/"
208
            echo
209
        fi
210
    fi
211
}
212

    
213
restorebcdi(){
214
    # $1 : répertoire de sauvegarde
215
    if [ -d "$1/home/bcdiserv" ];then
216
        echo "Restauration des données liées à Bcdi Web"
217
        # /home/bcdiserv est restauré par restorescribedata()
218
        if [ -d "$1/bcdi/bcdiweb" ];then
219
            cp -R "$1/bcdi/bcdiweb" /var/www/html/bcdiweb
220
            chown -R www-data:www-data /var/www/html/bcdiweb
221
        fi
222
        cp -f "$1/bcdi/bcdiweb.conf" /etc/apache2/sites-enabled
223
        cp -f "$1/bcdi/rsync" /etc/default/rsync
224
        cp -f "$1/bcdi/rsyncd.conf" /etc/rsyncd.conf
225
        echo
226
    fi
227
}
228

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

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

    
323
restorescribedata(){
324
    # $1 : répertoire de sauvegarde
325
    Title "Restauration des données"
326
    if [ ! -d "$1/home" ];then
327
        Orange "Les données de /home ne sont pas présentes dans la sauvegarde"
328
        return
329
    fi
330
    echo "(cette opération peut prendre du temps)"
331
    restorebcdi "$1"
332
    rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/home/" /home/ >/dev/null
333
    testcmd $? "Erreur lors de la restauration des données, consulter le fichier $RSYNC_LOG"
334
    [ -f "$1/home/wpkg/hosts.xml" ] && cp -f "$1/home/wpkg/hosts.xml" /home/wpkg/
335
}
336

    
337
restorehorusdata(){
338
    # $1 : répertoire de sauvegarde
339
    Title "Restauration des données"
340
    if [ ! -d "$1/data" ];then
341
        echo
342
        Orange "Les données de /data ne sont pas présentes dans la sauvegarde"
343
        return
344
    fi
345
    echo "(cette opération peut prendre du temps)"
346
    echo -n "."
347
    rsync -cav --log-file $RSYNC_LOG --ignore-existing --exclude=home --exclude=opt \
348
          --exclude=minedu/windata/mysql "$1/data/" /data/ >/dev/null
349
    testcmd $? "Erreur lors de la restauration des données (/data), consulter le fichier $RSYNC_LOG"
350
    echo -n "."
351
    rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/data/home/" /home/ >/dev/null
352
    testcmd $? "Erreur lors de la restauration des données (/home), consulter le fichier $RSYNC_LOG"
353
    echo -n "."
354
    [ -f "$1/data/home/wpkg/hosts.xml" ] && cp -f "$1/data/home/wpkg/hosts.xml" /home/wpkg/
355
    if [ ! -f "$1/data/opt/interbase/isc4.gdb" ];then
356
        Orange "Pas de fichier isc4.gdb"
357
    else
358
        cp -f "$1/data/opt/interbase/isc4.gdb" /opt/interbase/isc4.gdb
359
        cp -f "$1/data/opt/interbase/ib_license.dat" /opt/interbase/ib_license.dat 2>/dev/null
360
    fi
361
    echo
362
}
363

    
364
savequota(){
365
    # $1 : répertoire de sauvegarde
366
    Title "Sauvegardes des quotas utilisateurs"
367
    /usr/sbin/repquota -a |grep -v '^#' > "$1/$QUOTAS"
368
}
369

    
370
restorequota(){
371
    # $1 : répertoire de sauvegarde
372
    Title "Restauration des quotas utilisateurs"
373
    testf "$1/$QUOTAS"
374
    python -c """from fichier.quota import set_quota
375
from sys import stdout
376
fp = file('$1/$QUOTAS');started = False;num=0
377
for ligne in fp.readlines():
378
    if not started:
379
        if ligne.startswith('------------'):started = True
380
        continue
381
    # cas plusieurs partition
382
    if ligne.startswith('***'):
383
        started = False
384
        continue
385
    elts = ligne.strip().split()
386
    try:
387
        user  = elts[0]
388
        quota = elts[3]
389
    except:
390
        continue
391
    if quota != '0':
392
        num+=1
393
        if num % 20 == 0:
394
            stdout.write('.')
395
            stdout.flush()
396
        set_quota(user, int(quota)/1024)
397
print \"\\n%d quotas non nuls restaurés\" % num
398
fp.close()"""
399
}
400

    
401
savescribeacl(){
402
    # $1 : répertoire de sauvegarde
403
    Title "Sauvegarde des ACL"
404
    > "$1/$ACLS"
405
    for rep in "netlogon" "workgroups" "classes" "options";do
406
        echo -n "."
407
        /usr/bin/getfacl -R --absolute-names /home/$rep >> "$1/$ACLS"
408
    done
409
    for abc in `find /home -maxdepth 1 -name '?' | sort`
410
    do
411
        echo -n "."
412
        /usr/bin/getfacl -R --absolute-names $abc >> "$1/$ACLS"
413
    done
414
    echo
415
}
416

    
417
savehorusacl(){
418
    # $1 : répertoire de sauvegarde
419
    Title "Sauvegarde des ACL"
420
    if [ -L /data ];then
421
        HOME="/home"
422
    else
423
        HOME="/data"
424
    fi
425
    /usr/bin/getfacl -R --absolute-names $HOME > "$1/$ACLS"
426
}
427

    
428
restoreacl(){
429
    # $1 : répertoire de sauvegarde
430
    Title "Restauration des ACL"
431
    if [ ! -f "$1/$ACLS" ];then
432
        echo
433
        Orange "Les ACL ne sont pas présentes dans la sauvegarde"
434
        return
435
    fi
436
    [ -d /data ] && ln -nsf /home /data/home
437
    /usr/bin/setfacl --restore="$1/$ACLS" 2>&1 |grep -Ev "MailDir|data/opt|aquota|horus|recyclage|netlogon|Alias\.lnk|\.scanned|profiles|/home/ftp" >$ACLS_LOG
438
    [ -L /data/home ] && rm -f /data/home
439
    ERR=`wc -l $ACLS_LOG|cut -d' ' -f1`
440
    if [ $ERR -gt 0 ];then
441
        Orange "ATTENTION : $ERR messages d'erreur dans $ACLS_LOG"
442
    fi
443
}
444

    
445
savemail(){
446
    # $1 : répertoire de sauvegarde
447
    Title "Sauvegarde des données liées à la messagerie"
448
    [ -x /usr/bin/CreoleGet ] && container_path_mail=$(CreoleGet container_path_mail)
449
    mkdir -p "$1/listes"
450
    echo -n "."
451
    if [ ! -e "$1/listes/sympa" ];then
452
        mkdir -p "$1/listes/sympa"
453
    fi
454
    if [ -f $container_path_mail/etc/mail/sympa.aliases ];then
455
        cp $container_path_mail/etc/mail/sympa.aliases "$1/listes/sympa/aliases"
456
    else
457
        cp $container_path_mail/etc/mail/sympa_aliases "$1/listes/sympa/aliases"
458
    fi
459
    cp -R $container_path_mail/$SYMPA/expl "$1/listes"
460
    echo -n "."
461
    cp -R $container_path_mail/$SYMPA/wwsarchive "$1/listes"
462
    mkdir -p "$1/courier"
463
    echo -n "."
464
    cp -f $container_path_mail/etc/courier/pop3d.* $container_path_mail/etc/courier/imapd.* "$1/courier"
465
    mkdir -p "$1/mail"
466
    echo -n "."
467
    for maildir in `find /home -maxdepth 3 -name MailDir`;do
468
        # 2.2 : mails dans /home/<l>/<login>/MailDir
469
        if [ -d "$maildir/cur" ];then
470
            user=`echo $maildir | awk -F "/" '{ print $(NF-1) }'`
471
            mkdir -p "$1/mail/$user"
472
            rsync -cav --log-file $RSYNC_LOG $maildir/ "$1/mail/$user" >/dev/null
473
        fi
474
    done
475
    if [ "$(ls -A /var/spool/mail)" ];then
476
        # 2.2 : mails responsables dans /var/spool/mail
477
        echo -n "."
478
        rsync -cav --log-file $RSYNC_LOG /var/spool/mail/* "$1/mail" >/dev/null
479
    fi
480
    if [ -d /home/mail ];then
481
        # 2.3/2.4 : toutes les boîtes dans /home/mail
482
        echo -n "."
483
        rsync -cav --log-file $RSYNC_LOG /home/mail/* "$1/mail" >/dev/null
484
    fi
485
    echo
486
}
487

    
488
restoremail(){
489
    # $1 : répertoire de sauvegarde
490
    Title "Restauration des données liées à la messagerie"
491
    container_path_mail=$(CreoleGet container_path_mail)
492
    # sympa_aliases => sympa.aliases => sympa/aliases (#5049 puis #17087)
493
    if [ ! -e "$container_path_mail/etc/mail/sympa/aliases" ];then
494
        mkdir -p "$container_path_mail/etc/mail/sympa/aliases"
495
    fi
496
    cp "$1/listes/sympa/aliases" "$container_path_mail/etc/mail/sympa/aliases"
497
    echo -n "."
498
    rsync --log-file $RSYNC_LOG --ignore-existing -cav "$1/listes/expl" "$container_path_mail/$SYMPA" >/dev/null
499
    echo -n "."
500
    rsync --log-file $RSYNC_LOG --ignore-existing -cav "$1/listes/wwsarchive" "$container_path_mail/$SYMPA" >/dev/null
501
    echo -n "."
502
    CreoleRun "chown -R sympa:sympa $SYMPA" mail
503
    echo -n "."
504
    # restauration des certificats SSL pour pop et imap
505
    cp -f "$1"/courier/*.* "$container_path_mail/etc/courier"
506
    echo -n "."
507
    rsync --log-file $RSYNC_LOG -cav "$1/mail" /home/ >/dev/null
508
    echo -n "."
509
    CreoleRun "chown -R mail:mail /home/mail" mail
510
    echo -n "."
511
    # re-génération des listes de diffusion (pour les responsables)
512
    python -c """from scribe.eolegroup import Group
513
g = Group()
514
g.ldap_admin.connect()
515
for classe in g._get_groups('Classe'):
516
    g._delete_maillist(classe)
517
    g._delete_maillist('profs-%s' % classe)
518
    g._delete_maillist('resp-%s' % classe)
519
    g._add_maillist('Classe', classe)
520
    g._add_maillist('Equipe', 'profs-%s' % classe)
521
    g._add_resp_maillist(classe)
522
g.ldap_admin.close()
523
"""
524
    echo -n "."
525
    # vérification de l'adresse IP du serveur ldap
526
    SEARCHPATH="$container_path_mail/$SYMPA/expl"
527
    adresse_ip_mysql=$(CreoleGet adresse_ip_mysql)
528
    for config in `grep -l "host localhost" $SEARCHPATH/*/config $SEARCHPATH/*/*/config 2>/dev/null`;do
529
        sed -i "s/^host localhost$/host $adresse_ip_mysql/g" $config
530
    done
531
    echo
532
}
533

    
534
saveldap(){
535
    # $1 : répertoire de sauvegarde
536
    Title "Sauvegarde de l'annuaire"
537
    [ -x /usr/bin/CreoleGet ] && container_path_annuaire=$(CreoleGet container_path_annuaire)
538
    [ ! -f /root/.reader ] && cp -f /root/.reader "$1/$READER"
539
    [ -x /usr/bin/CreoleService ] && CreoleService slapd stop || /etc/init.d/slapd stop
540
    chroot "/$container_path_annuaire" /usr/sbin/slapcat -f /etc/ldap/slapd.conf| grep -Ev "^sambaShareAdmin:|^sambaShareDep:|^location:|^server:|^sambaLogonScript:" > "$1/$LDIF"
541
    testcmd $?
542
    [ -x /usr/bin/CreoleService ] && CreoleService slapd start || /etc/init.d/slapd start
543
}
544

    
545
restoreldap(){
546
    # $1 : répertoire de sauvegarde
547
    Title "Restauration de l'annuaire"
548
    # Recherche de l'ancienne objectClass "sambaServer" (#3730)
549
    dn=$(grep "ou=ordinateurs,ou=ressource" "$1/$LDIF" | grep "dn: cn" | grep -v '\$')
550
    if [ -n "$dn" ];then
551
        Red "L'entrée ldap débutant par \"$dn\" est obsolète."
552
        echo "Veuillez la supprimer du fichier : $LDIF"
553
        echo
554
        exit 1
555
    fi
556
    # Recherche des chemins commençant par /partages (#5686)
557
    grep -q "^sambaFilePath: \/partages\/" "$1/$LDIF"
558
    if [ $? -eq 0 ];then
559
        Red "Des attributs \"sambaFilePath\" débutent par \"/partages\""
560
        echo "Les occurences de \"/partages\" doivent être remplacées par \"/home\" dans le fichier : $LDIF"
561
        echo
562
        exit 1
563
    fi
564
    [ -f "$1/$READER" ] && cp -f "$1/$READER" /root/.reader
565
    # code inspiré de posttemplate/02-annuaire
566
    container_path_annuaire=$(CreoleGet container_path_annuaire)
567
    CHROOT=''
568
    [ ! "$container_path_annuaire" = "" ] && CHROOT="chroot $container_path_annuaire"
569
    # le montage n'est pas accessible depuis le conteneur :)
570
    CreoleService slapd stop -c annuaire
571
    rm -f $container_path_annuaire/var/lib/ldap/*.*
572
    cp -f "$1/$LDIF" "$container_path_annuaire/tmp/$LDIF"
573
    $CHROOT slapadd -f /etc/ldap/slapd.conf -l "/tmp/$LDIF"
574
    testcmd $? "Erreur lors de la restauration de l'annuaire !"
575
    CreoleRun "chown openldap:openldap /var/lib/ldap/*" annuaire
576
    rm -f "$container_path_annuaire/tmp/$LDIF"
577
    CreoleService slapd start -c annuaire
578
    testcmd $? "Erreur lors du redémarrage d'OpenLDAP !"
579
}
580

    
581
saveldap2scribe(){
582
    # $1 : répertoire de sauvegarde
583
    Title "Mise à niveau de l'annuaire"
584
    python -c """ldif = '$1/$LDIF'
585
fic = file(ldif).read().splitlines()
586
new = []
587
for line in fic:
588
    if line.startswith('mailDir: ') and '/MailDir/' in line:
589
        new.append('mailDir: /home/mail/%s/' % line.split('/')[3])
590
    else:
591
        new.append(line)
592
if new != fic:
593
    fic2 = file(ldif, 'w')
594
    fic2.write(\"\n\".join(new))
595
    fic2.close()
596
"""
597
}
598

    
599
restoreldap2scribe(){
600
    # $1 : répertoire de sauvegarde
601
    Title "Mise à niveau de l'annuaire"
602
    python -c """from scribe.eoleshare import Share
603
s = Share()
604
s.ldap_admin.connect()
605
sh = s._get_shares_data()
606
for sha in sh:
607
    if not sha[1].has_key('sambaShareModel'):
608
        name = sha[1]['sambaShareName'][0]
609
        if name in ['icones\$', 'groupes', 'commun', 'devoirs']:
610
            s._set_attr(name, 'sambaShareModel', name)
611
        else:
612
            s._set_attr(name, 'sambaShareModel', 'standard')
613
s.ldap_admin.close()
614
"""
615
}
616

    
617
saveldap2horus(){
618
    # $1 : répertoire de sauvegarde
619
    Title "Mise à niveau de l'annuaire"
620
    sed -i 's/\\profiles$/\\profil/g' "$1/$LDIF"
621
}
622

    
623
restoreldap2horus(){
624
    # $1 : répertoire de sauvegarde
625
    Title "Mise à niveau de l'annuaire"
626
    python -c """from horus.backend import get_share_template, mod_share
627
if get_share_template('minedu') == 'standard':
628
    mod_share('minedu', model='minedu')
629
if get_share_template('groupes') == 'standard':
630
    mod_share('groupes', model='groupes')
631
"""
632
}
633

    
634
savesmb(){
635
    # $1 : répertoire de sauvegarde
636
    Title "Sauvegarde des données liées à SAMBA et à CUPS"
637
    [ -x /usr/bin/CreoleGet ] && container_path_fichier=$(CreoleGet container_path_fichier)
638
    mkdir -p "$1/cups"
639
    cp -f $container_path_fichier/etc/cups/printers.conf "$1/cups" 2>/dev/null
640
    cp -f $container_path_fichier/etc/cups/ppds.dat "$1/cups" 2>/dev/null
641
    cp -rf $container_path_fichier/etc/cups/ppd "$1/cups"
642
    mkdir -p "$1/samba"
643
    if [ -f $container_path_fichier/var/lib/samba/secrets.tdb ];then
644
        cp -f $container_path_fichier/var/lib/samba/secrets.tdb "$1/samba"
645
    else
646
        cp -f $container_path_fichier/etc/samba/secrets.tdb  "$1/samba" 2>/dev/null
647
    fi
648
    cp -rf $container_path_fichier/var/lib/samba/printers "$1/samba"
649
    for f in "ntdrivers.tdb" "ntforms.tdb" "ntprinters.tdb";do
650
    cp -f "$container_path_fichier/var/lib/samba/$f" "$1/samba" 2>/dev/null
651
    done
652
    chroot "/$container_path_fichier" net getlocalsid | /usr/bin/awk '{print $6}' > "$1/samba/$SID"
653
    testcmd $?
654
}
655

    
656
restoresmb(){
657
    # $1 : répertoire de sauvegarde
658
    Title "Restauration des données liées à SAMBA et à CUPS"
659
    container_path_fichier=$(CreoleGet container_path_fichier)
660
    cp -f  "$1"/cups/printers.conf "$container_path_fichier/etc/cups/printers.conf" 2>/dev/null
661
    cp -f  "$1"/cups/ppds.dat "$container_path_fichier/etc/cups/ppds.dat" 2>/dev/null
662
    cp -rf "$1"/cups/ppd/* "$container_path_fichier/etc/cups/ppd/" 2>/dev/null
663
    cp -f  "$1"/samba/secrets.tdb "$container_path_fichier/var/lib/samba/secrets.tdb"
664
    cp -rf "$1"/samba/printers/* "$container_path_fichier/var/lib/samba/printers/" 2>/dev/null
665
    for f in "ntdrivers.tdb" "ntforms.tdb" "ntprinters.tdb";do
666
    cp -f "$1/samba/$f" "$container_path_fichier/var/lib/samba/$f" 2>/dev/null
667
    done
668
    NEWSID=`cat $1/samba/$SID`
669
    CHROOT=''
670
    [ ! "$container_path_fichier" = "" ] && CHROOT="chroot $container_path_fichier"
671
    $CHROOT net setlocalsid $NEWSID
672
    testcmd $? "Impossible de restaurer le SID du domaine"
673
}
674

    
675
savescribemysql(){
676
    # $1 : répertoire de sauvegarde
677
    # $2 : version (22 ou 23)
678
    Title "Sauvegarde des bases Mysql"
679
    if [ -x /usr/bin/CreoleGet ];then
680
        container_path_mysql=$(CreoleGet container_path_mysql)
681
        container_ip_mysql=$(CreoleGet container_ip_mysql)
682
    fi
683
    mkdir -p "$1/mysql"
684
    cp $container_path_mysql/etc/mysql/debian.cnf $1/mysql
685
    PASS=`/usr/bin/pwgen -1`
686
    if [ "$2"  = "24" ];then
687
        /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
688
    else
689
        /usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
690
    fi
691
    [ -n "$container_ip_mysql" ] && mysqlhost="-h $container_ip_mysql"
692
    [ "$2"  != "22" ] && opt="--events" || opt=""
693
    [ "$2"  = "24" ]  && optdb="--databases" || optdb="--database"
694
    mysql $mysqlhost -uroot -p$PASS -e "show databases" | grep -v "^Database$" | while read databasename; do
695
        [ "$databasename" = "information_schema" ] && continue
696
        [ "$2"  = "24" ] && [ "$databasename" = "performance_schema" ] && continue
697
        echo -n "."
698
        mysqldump $mysqlhost -uroot -p$PASS $optdb $databasename --flush-privileges \
699
                  --create-options -Q -c --lock-tables $opt > "$1/mysql/$databasename.sql"
700
        testcmd $? "Erreur lors de la sauvegarde de la base $databasename !"
701
    done
702
    echo
703
}
704

    
705
savehorusmysql(){
706
    # $1 : répertoire de sauvegarde
707
    # $2 : version (22 ou 23)
708
    Title "Sauvegarde des bases Mysql"
709
    mkdir -p "$1/mysql"
710
    cp /etc/mysql/debian.cnf "$1/mysql"
711
    PASS=`/usr/bin/pwgen -1`
712
    if [ "$2"  = "24" ];then
713
        /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
714
    else
715
        /usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
716
    fi
717
    [ "$2"  != "22" ] && opt="--events" || opt=""
718
    if [ "$2"  = "24" ];then
719
        all="--all-databases"
720
    else
721
        all="--all-database"
722
    fi
723
    mysqldump $all -uroot -p$PASS $opt > "$1/mysql/$MYSQLDB"
724
}
725

    
726
restorescribemysql(){
727
    # $1 : répertoire de sauvegarde
728
    Title "Restauration des bases Mysql"
729
    #testf $1/mysql/mysql.sql
730
    PASS=`/usr/bin/pwgen -1`
731
    /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
732
    # FIXME : intérêt de restaurer la bdd mysql sur Scribe ?
733
    #echo -n "."
734
    #cp -f $1/mysql/debian.cnf /etc/mysql/debian.cnf
735
    #/usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
736
    adresse_ip_mysql=$(CreoleGet adresse_ip_mysql)
737
    for database in 'sympa';do
738
        echo -n "."
739
        testf "$1/mysql/$database.sql"
740
        mysql -uroot -h$adresse_ip_mysql -p$PASS <"$1/mysql/$database.sql"
741
    done
742
    echo -n "."
743
    # mysql_upgrade n'est pas disponible sur le maître (fourni par mysql-server)
744
    CreoleRun "mysql_upgrade -uroot -p$PASS --force" mysql >/dev/null
745
    echo
746
}
747

    
748
restorehorusmysql(){
749
    # $1 : répertoire de sauvegarde
750
    Title "Restauration des bases Mysql"
751
    echo -n "."
752
    PASS=`/usr/bin/pwgen -1`
753
    /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
754
    testf "$1/mysql/$MYSQLDB"
755
    echo -n "."
756
    mysql -uroot -p$PASS <"$1/mysql/$MYSQLDB"
757
    # synchro du mot de passe debian-sys-maint (#2418)
758
    echo -n "."
759
    /etc/init.d/mysql reload >/dev/null
760
    echo -n "."
761
    cp -f $1/mysql/debian.cnf /etc/mysql/debian.cnf
762
    /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
763
    echo -n "."
764
    mysql_upgrade -uroot -p$PASS --force >/dev/null
765
    echo "."
766
    if [ "$(CreoleGet bareos_db_type sqlite)" = "mysql" ];then
767
        /usr/lib/bareos/scripts/grant_bareos_privileges -uroot -p$PASS -h $(CreoleGet adresse_ip_mysql)
768
    fi
769
}
770

    
771
savebacula22(){
772
    # $1 : répertoire de sauvegarde
773
    Title "Sauvegarde de la configuration bacula"
774
    mkdir -p "$1/bacula"
775
    #cp -f /etc/bacula/typesupport.conf $1/bacula 2>/dev/null
776
    /usr/share/eole/bacula/baculasupport.py -l >"$1/bacula/support.conf"
777
    #cp -f /etc/bacula/eolemsgdefs.pic  $1/bacula 2>/dev/null
778
    #cp -f /etc/bacula/eolemessages.conf $1/bacula 2>/dev/null
779
    /usr/share/eole/bacula/baculamessage.py -l >"$1/bacula/mail.conf"
780
    cp -f /etc/bacula/listefichiers*.conf "$1/bacula"
781
    # chemins Scribe
782
    cp -f /var/www/ead/config/bacula-distant.txt "$1/bacula" 2>/dev/null
783
    cp -f /var/www/ead/config/bacula-usb.txt "$1/bacula" 2>/dev/null
784
    # chemins Horus
785
    cp -f /var/www/ead/tmp/bacula-distant.txt "$1/bacula" 2>/dev/null
786
    cp -f /var/www/ead/tmp/bacula-usb.txt "$1/bacula" 2>/dev/null
787
}
788

    
789
savebacula23(){
790
    # $1 : répertoire de sauvegarde
791
    Title "Sauvegarde de la configuration bacula"
792
    mkdir -p "$1/bacula"
793
    # EOLE 2.3
794
    python -c """from pyeole.bacula import load_bacula_support;
795
for k,v in load_bacula_support().items():print '{0}=\"{1}\"'.format(k,v)""" > $1/bacula/bacula23.conf
796
    python -c """from pyeole.bacula import load_bacula_mail;mail=load_bacula_mail();
797
if mail:
798
    for k,v in mail.items():print '{0}=\"{1}\"'.format(k,v)""" >> $1/bacula/bacula23.conf
799
    if [ -f /var/lib/eole/config/baculajobs.conf ];then
800
        cp -f /var/lib/eole/config/baculajobs.conf $1/bacula/baculajobs.conf
801
    fi
802
}
803

    
804
savebacula24(){
805
    # $1 : répertoire de sauvegarde
806
    Title "Sauvegarde de la configuration bacula"
807
    if [ -f $1/extra/bacula/config.eol ];then
808
        [ -d $1/extra/bareos ] && rm -rf $1/extra/bareos
809
        mv -f $1/extra/bacula $1/extra/bareos
810
        sed -i 's/bacula/bareos/g' $1/extra/bareos/config.eol
811
    fi
812
}
813

    
814
restorebacula(){
815
    # $1 : répertoire de sauvegarde
816
    Title "Restauration de la configuration des sauvegardes"
817
    if [ -f $1/extra/bareos/config.eol ];then
818
        # configuration "extra" en 2.4
819
        return
820
    fi
821
    script="/usr/share/eole/sbin/bareosconfig.py"
822
    if [ -f $1/bacula/bacula23.conf ];then
823
        . $1/bacula/bacula23.conf
824
    else
825
        support=`cat $1/bacula/support.conf`
826
        if [ "$support" = 'bande' ];then
827
            support='manual'
828
        elif [ "$support" = 'usb' ];then
829
            usb_path=`cat "$1/bacula/bacula-usb.txt" 2>/dev/null`
830
        elif [ "$support" = "distant" ];then
831
            support='smb'
832
            if [ -f "$1/bacula/bacula-distant.txt" ];then
833
                smb_machine=`awk -F ' ' '{print $1}' "$1/bacula/bacula-distant.txt"`
834
                if [ "${smb_machine:0:2}" = "//" ];then
835
                    # format Horus-2.2
836
                    smb_partage=`echo $smb_machine | awk -F '/' '{print $4}'`
837
                    smb_machine=`echo $smb_machine | awk -F '/' '{print $3}'`
838
                    smb_login=`awk -F ' ' '{print $3}' "$1/bacula/bacula-distant.txt"`
839
                    smb_password=`awk -F ' ' '{print $4}' "$1/bacula/bacula-distant.txt"`
840
                else
841
                    # format Scribe-2.2
842
                    smb_partage=`awk -F ' ' '{print $3}' "$1/bacula/bacula-distant.txt"`
843
                    smb_login=`awk -F ' ' '{print $4}' "$1/bacula/bacula-distant.txt"`
844
                    smb_password=`awk -F ' ' '{print $5}' "$1/bacula/bacula-distant.txt"`
845
                fi
846
                smb_ip=`awk -F ' ' '{print $2}' "$1/bacula/bacula-distant.txt"`
847
            fi
848
        fi
849
        mail_ok=`awk -F ';' '{print $2}' "$1/bacula/mail.conf"`
850
        mail_error=`awk -F ';' '{print $3}' "$1/bacula/mail.conf"`
851
    fi
852

    
853
    # restauration des adresses mail
854
    echo -n "."
855
    [ ! -z "$mail_ok" ] && $script -m --mail_ok=$mail_ok
856
    echo -n "."
857
    [ ! -z "$mail_error" ] && $script -m --mail_error=$mail_error
858
    echo "."
859
    # restaurtion du support "manual"
860
    if [ "$support" = 'manual' ];then
861
        $script -s manual
862
    # restauration du support "usb"
863
    elif [ "$support" = 'usb' ];then
864
        if [ -z "$usb_path" ];then
865
            Orange "Support USB non configuré"
866
        else
867
            $script -s usb --usb_path=$usb_path
868
        fi
869
    # restauration du support "smb"
870
    elif [ "$support" = 'smb' ];then
871
        if [ -z "$smb_machine" -o -z "$smb_ip" -o -z "$smb_partage" ];then
872
            Orange "Configuration smb incomplète"
873
        else
874
            smbopts="--smb_machine=$smb_machine --smb_ip=$smb_ip --smb_partage=$smb_partage"
875
            if [ ! -z "$smb_login" -a ! -z "$smb_password" ];then
876
                smbopts="$smbopts --smb_login=$smb_login --smb_password=$smb_password"
877
            fi
878
            $script -s smb $smbopts
879
        fi
880
    elif [ "$support" = 'none' ];then
881
        Orange "Aucun support de sauvegarde configuré"
882
    else
883
        Orange "Support de sauvegarde \"$support\" inconnu"
884
    fi
885
    if [ -f $1/bacula/baculajobs.conf ];then
886
        python -c """import sys
887
from pickle import load
888
from pyeole.bareos import add_job
889
for job in load(file('$1/bacula/baculajobs.conf', 'r')):
890
    job.update({'no_reload':True})
891
    try:
892
        add_job(**job)
893
        sys.stdout.write('.')
894
    except Exception, msg:
895
        print msg
896
"""
897
    fi
898
}
899

    
900
saveamon(){
901
    # $1 : répertoire de sauvegarde
902
    Title "Sauvegarde des personnalisations DansGuardian"
903
    [ -x /usr/bin/CreoleGet ] && container_path_proxy=$(CreoleGet container_path_proxy)
904
    mkdir -p "$1/dansguardian"
905
    dg=$container_path_proxy/var/lib/blacklists/dansguardian
906
    if [ -d "${dg}0" ];then
907
        mkdir -p "$1/dansguardian/dansguardian0"
908
        cp -rf "${dg}0/"* "$1/dansguardian/dansguardian0"
909
    fi
910
    if [ -d "${dg}1" ];then
911
        mkdir -p "$1/dansguardian/dansguardian1"
912
        cp -rf "${dg}1/"* "$1/dansguardian/dansguardian1"
913
    fi
914

    
915
    mkdir -p "$1/ead"
916
    ead=/usr/share/ead2/backend/tmp
917
    config=/var/lib/eole/config
918
    # Sites / Mode de filtrage
919
    cp -f $ead/filtrage-contenu* "$1/ead" 2>/dev/null
920
    # "Destinations interdites"
921
    cp -f $ead/dest_interdites*.txt "$1/ead" 2>/dev/null
922
    # "Sources interdites" (web)
923
    cp -f $ead/horaire_ip*.txt "$1/ead" 2>/dev/null
924
    # "Sources interdites" (réseau)
925
    cp -f $ead/poste_all*.txt "$1/ead" 2>/dev/null
926
    # Groupe de machine
927
    cp -f $ead/ipset_group*.txt "$1/ead" 2>/dev/null
928
    cp -f $ead/ipset_schedules*.pickle "$1/ead" 2>/dev/null
929
    # Règles du pare-feu
930
    if [ -f $config/regles.csv ];then
931
        cp -f $config/regles.csv "$1/ead" 2>/dev/null
932
    else
933
        cp -f $ead/regles.csv "$1/ead" 2>/dev/null
934
    fi
935
    oldead=/var/www/ead/tmp
936
    cp -f $oldead/kill-p2p "$1/ead" 2>/dev/null
937
    if [ -f $config/horaires.txt ];then
938
        cp -f $config/horaires.txt "$1/ead" 2>/dev/null
939
    else
940
        cp -f $oldead/horaires.txt "$1/ead" 2>/dev/null
941
    fi
942

    
943
    mkdir -p "$1/squid"
944
    squid=$container_path_proxy/etc/squid
945
    # /etc/squid3 sur EOLE 2.4
946
    [ ! -d $squid ] && squid=${squid}3
947

    
948
    Title "Sauvegarde des personnalisations Squid"
949
    cp -f $squid/domaines_nocache_* "$1/squid" 2>/dev/null
950
    cp -f $squid/domaines_noauth_* "$1/squid" 2>/dev/null
951
    cp -f $squid/src_noauth_* "$1/squid" 2>/dev/null
952
    cp -f $squid/src_nocache_* "$1/squid" 2>/dev/null
953
}
954

    
955
restoreamon(){
956
    # $1 : répertoire de sauvegarde
957
    Title "Restauration des personnalisations Eole-Guardian"
958
    container_path_proxy=$(CreoleGet container_path_proxy)
959
    dg=$container_path_proxy/var/lib/blacklists/dansguardian
960
    if [ $(CreoleGet dans_instance_1_active "non") == "oui" ];then
961
        if [ -d "$1/dansguardian/dansguardian0" ];then
962
            cp -rf "$1/dansguardian/dansguardian0/"* "${dg}0"
963
        fi
964
    fi
965
    if [ $(CreoleGet dans_instance_2_active "non") == "oui" ];then
966
        if [ -d "$1/dansguardian/dansguardian1" ];then
967
            cp -rf "$1/dansguardian/dansguardian1/"* "${dg}1"
968
        fi
969
    fi
970

    
971
    ead=/usr/share/ead2/backend/tmp
972
    for f in "filtrage-contenu*" "dest_interdites*.txt" "horaire_ip*.txt"\
973
             "poste_all*.txt" "ipset_group*.txt" "ipset_schedules*.pickle";do
974
        cp -f "$1/ead/"$f $ead 2>/dev/null
975
    done
976

    
977
    if [ ! -f "$1/ead/kill-p2p" ];then
978
        # il est à "on" par défaut sur 2.3
979
        echo "KILLP2P=off" > /var/lib/eole/config/killp2p.conf
980
    fi
981
    cp -f "$1/ead/horaires.txt" /var/lib/eole/config/horaires.txt 2>/dev/null
982
    cp -f "$1/ead/regles.csv" /var/lib/eole/config/regles.csv 2>/dev/null
983

    
984
    squid=$container_path_proxy/etc/squid3
985
    Title "Restauration des personnalisations Squid"
986
    cp -f $1/squid/domaines_nocache_* "$squid" 2>/dev/null
987
    cp -f $1/squid/domaines_noauth_* "$squid" 2>/dev/null
988
    cp -f $1/squid/src_noauth_* "$squid" 2>/dev/null
989
    cp -f $1/squid/src_nocache_* "$squid" 2>/dev/null
990
}
991

    
992
saveenvole(){
993
    # $1 : répertoire de sauvegarde
994
    Title "Sauvegarde des applications web"
995
    [ -x /usr/bin/CreoleGet ] && container_path_web=$(CreoleGet container_path_web)
996
    mkdir -p $1/html
997
    cp -rpf $container_path_web/var/www/html/ "$1"
998

    
999
    mkdir -p $1/www-data
1000
    if [ -d /home/www-data ];then
1001
        Title "Sauvegarde des données des applications web"
1002
        cp -rpf /home/www-data/ "$1"
1003
    fi
1004
}
1005

    
1006
savedivers(){
1007
    # $1 : répertoire de sauvegarde
1008
    Title "Sauvegarde des autres fichiers"
1009
    # sauvegarde des certificats SSL (#2475)
1010
    mkdir -p $1/ssl
1011
    cp -rf /etc/ssl/* "$1/ssl"
1012
    # suppression des liens symbolique
1013
    find "$1/ssl" -type l -delete
1014
    mkdir -p $1/config
1015
    ead_config=/usr/share/ead2/backend/config
1016
    [ -f "$ead_config/perm_local.ini" ] && cp -f "$ead_config/perm_local.ini" "$1/config"
1017
    [ -f "$ead_config/roles_local.ini" ] && cp -f "$ead_config/roles_local.ini" "$1/config"
1018
    ead_tmp=/usr/share/ead2/backend/tmp
1019
    eole_config=/var/lib/eole/config
1020
    [ -f "$ead_tmp/cron.txt" ] && cp -f "$ead_tmp/cron.txt" "$1/config/cron.txt"
1021
    if [ -f "$eole_config/bp_server.conf" ];then
1022
        cp -f "$eole_config/bp_server.conf" "$1/config/bp_server.conf"
1023
    else
1024
        cp -f "$ead_tmp/bp_server.txt" "$1/config/bp_server.conf"
1025
    fi
1026
    [ -x /usr/bin/CreoleGet ] && container_path_fichier=$(CreoleGet container_path_fichier /)
1027
    if [ -f /var/www/ead/config/controle ];then
1028
        cp -f /var/www/ead/config/controle "$1/config/controlevnc.conf"
1029
    else
1030
        cp -f "$container_path_fichier/$eole_config/controlevnc.conf" "$1/config/controlevnc.conf" 2>/dev/null
1031
    fi
1032
    machines="$container_path_fichier/usr/share/eole/controlevnc/machines.db"
1033
    [ -f $machines ] && cp -f $machines "$1/config"
1034
    [ -d /usr/share/horus/models ] && cp -rf /usr/share/horus/models "$1/config"
1035
    [ -f /usr/share/eole/wpkg/wpkg_config.eol ] && cp /usr/share/eole/wpkg/wpkg_config.eol "$1"
1036
    cp -f $eole_config/dhcp.conf "$1/config/" 2>/dev/null
1037
}
1038

    
1039
savesso(){
1040
    # $1 : répertoire de sauvegarde
1041
    sso_dir=/usr/share/sso
1042
    if [ -d $sso_dir ];then
1043
        Title "Sauvegarde des données du service SSO"
1044
        # filtres et fichiers de configuration SSO
1045
        backup_dir=$1/sso
1046
        mkdir -p $backup_dir
1047
        for sso_conf_dir in app_filters attribute_sets external_attrs user_infos metadata interface securid_users
1048
        do
1049
            [ -d ${sso_dir}/${sso_conf_dir} ] && /bin/cp -rf ${sso_dir}/${sso_conf_dir} $backup_dir
1050
        done
1051
    fi
1052
}
1053

    
1054
savecreole(){
1055
    # $1 : répertoire de sauvegarde
1056
    BACKUP_DIR="$1/creolelocal"
1057
    Title "Sauvegarde des personnalisations Creole locales (non restauré)"
1058
    mkdir -p ${BACKUP_DIR}/distrib
1059
    mkdir -p ${BACKUP_DIR}/dicos
1060
    mkdir -p ${BACKUP_DIR}/patch
1061
    if [ -d /usr/share/eole/creole ];then
1062
        CREOLE_DIR="/usr/share/eole/creole"
1063
    else
1064
        CREOLE_DIR="/etc/eole"
1065
    fi
1066
    # dictionnaires locaux
1067
    /bin/cp -rf $CREOLE_DIR/dicos/local/*.xml ${BACKUP_DIR}/dicos/ >/dev/null 2>&1
1068
    # patchs
1069
    /bin/cp -rf $CREOLE_DIR/patch/*.patch ${BACKUP_DIR}/patch/ >/dev/null 2>&1
1070
    # templates non installés par un paquet (variante et locaux)
1071
    for TMPL in `ls $CREOLE_DIR/distrib/*`
1072
    do
1073
        dpkg -S $TMPL >/dev/null 2>&1
1074
        if [ $? -ne 0 ];then
1075
            /bin/cp -rf $TMPL ${BACKUP_DIR}/distrib/
1076
        fi
1077
    done
1078
}
1079

    
1080
restoredivers(){
1081
    # $1 : répertoire de sauvegarde
1082
    Title "Restauration des autres fichiers"
1083
    # restauration des certificats SSL (#2475)
1084
    cp -rf "$1"/ssl/* /etc/ssl
1085
    ead_config=/usr/share/ead2/backend/config/
1086
    [ -f "$1/config/perm_local.ini" ] && cp -f "$1/config/perm_local.ini" "$ead_config"
1087
    [ -f "$1/config/roles_local.ini" ] && cp -f "$1/config/roles_local.ini" "$ead_config"
1088
    cp -f "$1/config/bp_server.conf" /var/lib/eole/config 2>/dev/null
1089
    # restauration des configurations extra
1090
    [ -d $1/extra ] && cp -rf $1/extra/* /etc/eole/extra/
1091
    container_path_fichier=$(CreoleGet container_path_fichier /)
1092
    # normalement c'est un lien symbolique sur 2.3
1093
    cp -f "$1/config/controlevnc.conf" "$container_path_fichier/var/lib/eole/config" 2>/dev/null
1094
    cp -f "$1/config/machines.db" "$container_path_fichier/usr/share/eole/controlevnc/machines.db" 2>/dev/null
1095
    if [ -d "$1/config/models" ];then
1096
        rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/config/models" /usr/share/eole/fichier/models >/dev/null
1097
    fi
1098
    # restauration forcée pour Esu (#2746)
1099
    esufile="/home/esu/Base/ListeGM.xml"
1100
    [ -f "$1$esufile" ] && cp -f "$1$esufile" "$esufile"
1101
    if [ -f "$1/wpkg_config.eol" ];then
1102
        mkdir -p /usr/share/eole/wpkg
1103
        cp -f "$1/wpkg_config.eol" /usr/share/eole/wpkg
1104
    fi
1105
    # désactivation de la maj hebdomadaire
1106
    if [ -f "$1/config/cron.txt" ] && [ $(cat "$1/config/cron.txt" | wc -w) -eq 0 ];then
1107
        /usr/share/eole/schedule/manage_schedule post majauto weekly del >/dev/null
1108
    fi
1109
    cp -f "$1/config/dhcp.conf" /var/lib/eole/config/dhcp.conf 2>/dev/null
1110
}
1111

    
1112
restoresso(){
1113
    # $1 : répertoire de sauvegarde
1114
    sso_dir=/usr/share/sso
1115
    if [ -d $sso_dir ];then
1116
        Title "Restauration des données du service SSO"
1117
        restoresso_dir(){
1118
            # restauration des fichiers d'un répertoire (si non existants)
1119
            src_dir=$1
1120
            dest_dir=$2
1121
            extensions=*
1122
            # traite tout les fichier ou une extension particulière
1123
            [ -z "$3" ] || extensions=*.$3
1124
            mkdir -p ${dest_dir}
1125
            if [ -d $src_dir ];then
1126
                for data_file in `ls -d ${src_dir}/${extensions} 2>/dev/null`;do
1127
                    # on n'écrase pas les fichiers installés par les paquet
1128
                    filename=`basename $data_file`
1129
                    [ -e ${dest_dir}/${filename} ] || /bin/cp -r $data_file $dest_dir/
1130
                done
1131
            fi
1132
        }
1133
        ## répetoires de filtres, attributs calculés, metadata, ..
1134
        backup_dir=$1/sso
1135
        for sso_conf_dir in app_filters attribute_sets external_attrs user_infos metadata securid_users;do
1136
            restoresso_dir ${backup_dir}/${sso_conf_dir} ${sso_dir}/${sso_conf_dir}
1137
        done
1138
        interf_dir=${sso_dir}/interface
1139
        int_backup_dir=$1/sso/interface
1140
        ## presonnalisations de l'interface
1141
        # themes et infos homonymes
1142
        for data_dir in images themes theme/image theme/style info_homonymes;do
1143
            restoresso_dir ${int_backup_dir}/${data_dir} ${interf_dir}/${data_dir}
1144
        done
1145
        # fichiers divers de l'interface (avertissement.txt, fichiers .css et .tmpl)
1146
        restoresso_dir $int_backup_dir $interf_dir "tmpl"
1147
        restoresso_dir $int_backup_dir $interf_dir "css"
1148
        restoresso_dir $int_backup_dir $interf_dir "txt"
1149
    fi
1150
}
1151

    
1152
#scribedivers(){
1153
#    # $1 : répertoire de sauvegarde
1154
#    #Title "Sauvegarde des autres fichiers"
1155
#    mkdir -p $1/config
1156
#    else
1157
#        echo "simple" > $1/config/controlevnc.conf
1158
#    fi
1159
#    # FIXME : posh et applications => c'est mort ?
1160
#}
1161

    
1162
finsauve(){
1163
    echo
1164
    Green "Sauvegarde spéciale terminée"
1165
}
1166

    
1167
finresto(){
1168
    Green "Restauration spéciale terminée"
1169
}
1170

    
1171
scribe22(){
1172
    ## SAUVEGARDE SPECIALE POUR SCRIBE-2.2 ##
1173
    montage $DD
1174
    /etc/init.d/samba stop
1175
    /etc/init.d/nscd start
1176
    DDS="$DD/scribe-$numero_etab"
1177
    /bin/mkdir -p "$DDS"
1178
    saveconfigeol "$DDS"
1179
    savecreole "$DDS"
1180
    questionsave '/home'
1181
    savedata=$?
1182
    [ $savedata -eq 0 ] && savescribedata "$DDS"
1183
    savemail "$DDS"
1184
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1185
    /etc/init.d/slapd restart
1186
    savequota "$DDS"
1187
    [ $savedata -eq 0 ] && savescribeacl "$DDS"
1188
    saveldap "$DDS"
1189
    saveldap2scribe "$DDS"
1190
    savesmb "$DDS"
1191
    savescribemysql "$DDS" '22'
1192
    savebacula22 "$DDS"
1193
    saveenvole "$DDS"
1194
    savesso "$DDS"
1195
    savedivers "$DDS"
1196
    demontage $DD
1197
    /etc/init.d/samba start
1198
    finsauve
1199
}
1200

    
1201
horus22(){
1202
    ## SAUVEGARDE SPECIALE POUR HORUS-2.2 ##
1203
    montage $DD
1204
    /etc/init.d/xinetd stop
1205
    /etc/init.d/samba stop
1206
    /etc/init.d/nscd start
1207
    DDS="$DD/horus-$numero_etab"
1208
    saveconfigeol "$DDS"
1209
    savecreole "$DDS"
1210
    questionsave '/data'
1211
    savedata=$?
1212
    [ $savedata -eq 0 ] && savehorusdata "$DDS"
1213
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1214
    /etc/init.d/slapd restart
1215
    savequota "$DDS"
1216
    [ $savedata -eq 0 ] && savehorusacl "$DDS"
1217
    saveldap "$DDS"
1218
    saveldap2horus "$DDS"
1219
    savesmb "$DDS"
1220
    savehorusmysql "$DDS" '22'
1221
    savebacula22 "$DDS"
1222
    savesso "$DDS"
1223
    savedivers "$DDS"
1224
    demontage $DD
1225
    /etc/init.d/samba start
1226
    [ "$xinet_interbase" != 'non' ] && /etc/init.d/xinetd start
1227
    finsauve
1228
}
1229

    
1230
amon22(){
1231
    ## SAUVEGARDE SPECIALE POUR AMON-2.2 ##
1232
    montage $DD
1233
    DDS="$DD/amon-$numero_etab"
1234
    saveconfigeol "$DDS"
1235
    savecreole "$DDS"
1236
    saveamon "$DDS"
1237
    savesso "$DDS"
1238
    savedivers "$DDS"
1239
    demontage $DD
1240
    finsauve
1241
}
1242

    
1243
scribe23(){
1244
    ## SAUVEGARDE SPECIALE POUR SCRIBE-2.3 et AmonEcole 2.3 ##
1245
    montage $DD
1246
    CreoleService smbd stop
1247
    CreoleService nscd start
1248
    DDS="$DD/scribe-$numero_etab"
1249
    /bin/mkdir -p "$DDS"
1250
    saveconfigeol "$DDS"
1251
    savecreole "$DDS"
1252
    questionsave '/home'
1253
    savedata=$?
1254
    [ $savedata -eq 0 ] && savescribedata "$DDS"
1255
    savemail "$DDS"
1256
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1257
    CreoleService slapd restart
1258
    savequota "$DDS"
1259
    [ $savedata -eq 0 ] && savescribeacl "$DDS"
1260
    saveldap "$DDS"
1261
    saveldap2scribe "$DDS"
1262
    savesmb "$DDS"
1263
    savescribemysql "$DDS" '23'
1264
    savebacula23 "$DDS"
1265
    saveenvole "$DDS"
1266
    [ "$1" = "amonecole" ] && saveamon "$DDS"
1267
    savesso "$DDS"
1268
    savedivers "$DDS"
1269
    demontage $DD
1270
    CreoleService smbd start
1271
    finsauve
1272
}
1273

    
1274
horus23(){
1275
    ## SAUVEGARDE SPECIALE POUR HORUS-2.3 ##
1276
    montage $DD
1277
    CreoleService xinetd stop
1278
    CreoleService smbd stop
1279
    CreoleService nscd start
1280
    DDS="$DD/horus-$numero_etab"
1281
    saveconfigeol "$DDS"
1282
    savecreole "$DDS"
1283
    questionsave '/home'
1284
    savedata=$?
1285
    [ $savedata -eq 0 ] && savehorusdata "$DDS"
1286
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1287
    CreoleService slapd restart
1288
    savequota "$DDS"
1289
    [ $savedata -eq 0 ] && savehorusacl "$DDS"
1290
    saveldap "$DDS"
1291
    #saveldap2horus "$DDS"
1292
    savesmb "$DDS"
1293
    savehorusmysql "$DDS" '23'
1294
    savebacula23 "$DDS"
1295
    savesso "$DDS"
1296
    savedivers "$DDS"
1297
    demontage $DD
1298
    CreoleService smbd start
1299
    [ "$activer_interbase" != 'non' ] && CreoleService xinetd start
1300
    finsauve
1301
}
1302

    
1303
amon23(){
1304
    ## SAUVEGARDE SPECIALE POUR AMON-2.3 et AMON-2.4 et AMON-2.5##
1305
    montage $DD
1306
    DDS="$DD/amon-$numero_etab"
1307
    saveconfigeol "$DDS"
1308
    savecreole "$DDS"
1309
    saveamon "$DDS"
1310
    savesso "$DDS"
1311
    savedivers "$DDS"
1312
    demontage $DD
1313
    finsauve
1314
}
1315

    
1316
scribe24(){
1317
    ## SAUVEGARDE SPECIALE POUR SCRIBE-2.4 et AmonEcole 2.4 ##
1318
    montage $DD
1319
    CreoleService smbd stop
1320
    CreoleService nscd start
1321
    DDS="$DD/scribe-$numero_etab"
1322
    /bin/mkdir -p "$DDS"
1323
    saveconfigeol "$DDS"
1324
    savecreole "$DDS"
1325
    questionsave '/home'
1326
    savedata=$?
1327
    [ $savedata -eq 0 ] && savescribedata "$DDS"
1328
    savemail "$DDS"
1329
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1330
    CreoleService slapd restart
1331
    savequota "$DDS"
1332
    [ $savedata -eq 0 ] && savescribeacl "$DDS"
1333
    saveldap "$DDS"
1334
    # saveldap2scribe "$DDS"
1335
    savesmb "$DDS"
1336
    savescribemysql "$DDS" '24'
1337
    savebacula24 "$DDS"
1338
    saveenvole "$DDS"
1339
    [ "$1" = "amonecole" ] && saveamon "$DDS"
1340
    savesso "$DDS"
1341
    savedivers "$DDS"
1342
    demontage $DD
1343
    CreoleService smbd start
1344
    finsauve
1345
}
1346

    
1347
horus24(){
1348
    ## SAUVEGARDE SPECIALE POUR HORUS-2.4 ##
1349
    montage $DD
1350
    CreoleService xinetd stop
1351
    CreoleService smbd stop
1352
    CreoleService nscd start
1353
    DDS="$DD/horus-$numero_etab"
1354
    saveconfigeol "$DDS"
1355
    savecreole "$DDS"
1356
    questionsave '/home'
1357
    savedata=$?
1358
    [ $savedata -eq 0 ] && savehorusdata "$DDS"
1359
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1360
    CreoleService slapd restart
1361
    savequota "$DDS"
1362
    [ $savedata -eq 0 ] && savehorusacl "$DDS"
1363
    saveldap "$DDS"
1364
    #saveldap2horus "$DDS"
1365
    savesmb "$DDS"
1366
    savehorusmysql "$DDS" '24'
1367
    savebacula24 "$DDS"
1368
    savesso "$DDS"
1369
    savedivers "$DDS"
1370
    demontage $DD
1371
    CreoleService smbd start
1372
    [ "$activer_interbase" != 'non' ] && CreoleService xinetd start
1373
    finsauve
1374
}
1375

    
1376
scribe26(){
1377
    ## RESTAURATION SPECIALE POUR SCRIBE-2.6 et AmonEcole 2.5 ##
1378
    Alerte
1379
    montage $DD '25'
1380
    DDS="$DD/scribe-$numero_etab"
1381
    testf "$DDS"
1382
    CreoleService smbd stop -c fichier
1383
    CreoleService nmbd stop -c fichier
1384
    restoreldap "$DDS"
1385
    restoreldap2scribe "$DDS"
1386
    restoresmb "$DDS"
1387
    restorescribedata "$DDS"
1388
    restoremail "$DDS"
1389
    restorequota "$DDS"
1390
    restoreacl "$DDS"
1391
    restorescribemysql "$DDS"
1392
    restorebacula "$DDS"
1393
    [ "$1" = "amonecole" ] && restoreamon "$DDS"
1394
    restoresso "$DDS"
1395
    restoredivers "$DDS"
1396
    demontage $DD
1397
    CreoleService smbd start -c fichier
1398
    CreoleService nmbd start -c fichier
1399
}
1400

    
1401
horus26(){
1402
    ## RESTAURATION SPECIALE POUR HORUS-2.6 ##
1403
    Alerte
1404
    montage $DD '25'
1405
    DDS="$DD/horus-$numero_etab"
1406
    testf "$DDS"
1407
    CreoleService smbd stop -c fichier
1408
    CreoleService nmbd stop -c fichier
1409
    CreoleService xinetd stop -c interbase 2>/dev/null
1410
    restoreldap "$DDS"
1411
    restoreldap2horus "$DDS"
1412
    restoresmb "$DDS"
1413
    restorehorusdata "$DDS"
1414
    restorequota "$DDS"
1415
    restoreacl "$DDS"
1416
    restorehorusmysql "$DDS"
1417
    restorebacula "$DDS"
1418
    restoresso "$DDS"
1419
    restoredivers "$DDS"
1420
    demontage $DD
1421
    CreoleService smbd start -c fichier
1422
    CreoleService nmbd start -c fichier
1423
    [ $(CreoleGet activer_interbase) != 'non' ] && CreoleService xinetd start -c interbase
1424
}
1425

    
1426
amon26(){
1427
    ## RESTAURATION SPECIALE POUR AMON-2.6 ##
1428
    Alerte2
1429
    montage $DD '25'
1430
    DDS="$DD/amon-$numero_etab"
1431
    testf "$DDS"
1432
    restoreamon "$DDS"
1433
    restoresso "$DDS"
1434
    restoredivers "$DDS"
1435
    demontage $DD
1436
}
1437

    
1438
savezephir(){
1439
    enregistrement_zephir --check > /dev/null
1440
    if [ $? -eq 0 ];then
1441
        Title "Sauvegarde des données locales sur Zéphir"
1442
        /usr/share/zephir/scripts/zephir_client save_files
1443
    fi
1444
}
1445

    
1446
# Sauvegarde
1447
if [ -f /etc/eole/version ]
1448
then
1449
    version=`cat /etc/eole/version`
1450
    if [ "$version" = "scribe-2.2" ];then
1451
        clear
1452
        Version
1453
        Green "Sauvegarde du module $version"
1454
        scribe22
1455
    elif [ "$version" = "horus-2.2" ];then
1456
        clear
1457
        Version
1458
        Green "Sauvegarde du module $version"
1459
        horus22
1460
    elif [ "$version" = "amon-2.2" -o "$version" = "amonecole-2.2" ];then
1461
        clear
1462
        Version
1463
        Green "Sauvegarde du module $version"
1464
        amon22
1465
    else
1466
        Version
1467
        Red "Détection du module 2.2 impossible !"
1468
        exit 1
1469
    fi
1470
elif [ -f /etc/eole/release ]
1471
then
1472
    . /etc/eole/release
1473
    version="$EOLE_MODULE-$EOLE_VERSION"
1474
    if [ $EOLE_VERSION == '2.3' ];then
1475
        # Question => Question_ouinon
1476
        Question() {
1477
             Question_ouinon "$1"
1478
        }
1479
        if [ "$version" = "scribe-2.3" ];then
1480
            clear
1481
            Version
1482
            Green "Sauvegarde du module $version"
1483
            scribe23
1484
        elif [ "$version" = "horus-2.3" ];then
1485
            clear
1486
            Version
1487
            Green "Sauvegarde du module $version"
1488
            horus23
1489
        elif [ "$version" = "amon-2.3" ];then
1490
            clear
1491
            Version
1492
            Green "Sauvegarde du module $version"
1493
            amon23
1494
        elif [ "$version" = "amonecole-2.3" ];then
1495
            clear
1496
            Version
1497
            Green "Restauration du module $version"
1498
            scribe23 "amonecole"
1499
        else
1500
            Version
1501
            Red "Détection du module 2.3 impossible !"
1502
            exit 1
1503
        fi
1504
    elif [ $EOLE_VERSION == '2.4' ];then
1505
        # Question => Question_ouinon
1506
        Question() {
1507
             Question_ouinon "$1"
1508
        }
1509
        if [ "$version" = "scribe-2.4" ];then
1510
            clear
1511
            Version
1512
            Green "Sauvegarde du module $version"
1513
            scribe24
1514
        elif [ "$version" = "horus-2.4" ];then
1515
            clear
1516
            Version
1517
            Green "Sauvegarde du module $version"
1518
            horus24
1519
        elif [ "$version" = "amon-2.4" ];then
1520
            clear
1521
            Version
1522
            Green "Sauvegarde du module $version"
1523
            amon23
1524
        elif [ "$version" = "amonecole-2.4" ];then
1525
            clear
1526
            Version
1527
            Green "Sauvegarde du module $version"
1528
            scribe24 "amonecole"
1529
        else
1530
            Version
1531
            Red "Détection du module 2.4 impossible !"
1532
            exit 1
1533
        fi
1534
    elif [ $EOLE_VERSION == '2.5' ];then
1535
        # Question => Question_ouinon
1536
        Question() {
1537
             Question_ouinon "$1"
1538
        }
1539
        if [ "$version" = "scribe-2.5" ];then
1540
            clear
1541
            Version
1542
            Green "Restauration du module $version"
1543
            scribe24
1544
        elif [ "$version" = "horus-2.5" ];then
1545
            clear
1546
            Version
1547
            Green "Restauration du module $version"
1548
            horus24
1549
        elif [ "$version" = "amon-2.5" ];then
1550
            clear
1551
            Version
1552
            Green "Restauration du module $version"
1553
            amon23
1554
        elif [ "$version" = "amonecole-2.5" ];then
1555
            clear
1556
            Version
1557
            Green "Restauration du module $version"
1558
            scribe24 "amonecole"
1559
        else
1560
            Version
1561
            Red "Détection du module 2.5 impossible !"
1562
            exit 1
1563
        fi
1564
    elif [ $EOLE_VERSION == '2.6' ];then
1565
        if [ "$version" = "scribe-2.6" ];then
1566
            clear
1567
            Version
1568
            Green "Restauration du module $version"
1569
            scribe26
1570
        elif [ "$version" = "horus-2.6" ];then
1571
            clear
1572
            Version
1573
            Green "Restauration du module $version"
1574
            horus26
1575
        elif [ "$version" = "amon-2.6" ];then
1576
            clear
1577
            Version
1578
            Green "Restauration du module $version"
1579
            amon26
1580
        elif [ "$version" = "amonecole-2.6" ];then
1581
            clear
1582
            Version
1583
            Green "Restauration du module $version"
1584
            scribe26 "amonecole"
1585
        else
1586
            Version
1587
            Red "Détection du module 2.6 impossible !"
1588
            exit 1
1589
        fi
1590
        savezephir
1591
        echo
1592
        finresto
1593
    else
1594
        Version
1595
        Red "Détection du module impossible !"
1596
        exit 1
1597
    fi
1598
else
1599
    Version
1600
    Red "Détection du module impossible !"
1601
    exit 1
1602
fi
1603
echo
1604
exit 0