Projet

Général

Profil

migration25.sh

Script modifié pour la sauvegarde AmonEcole+ - Joël Cuissinat, 18/07/2016 11:00

Télécharger (50,7 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 [ -f $container_path_mail/etc/mail/sympa.aliases ];then
452
        cp $container_path_mail/etc/mail/sympa.aliases "$1/listes/sympa_aliases"
453
    else
454
        cp $container_path_mail/etc/mail/sympa_aliases "$1/listes"
455
    fi
456
    cp -R $container_path_mail/$SYMPA/expl "$1/listes"
457
    echo -n "."
458
    cp -R $container_path_mail/$SYMPA/wwsarchive "$1/listes"
459
    mkdir -p "$1/courier"
460
    echo -n "."
461
    cp -f $container_path_mail/etc/courier/pop3d.* $container_path_mail/etc/courier/imapd.* "$1/courier"
462
    mkdir -p "$1/mail"
463
    echo -n "."
464
    for maildir in `find /home -maxdepth 3 -name MailDir`;do
465
        # 2.2 : mails dans /home/<l>/<login>/MailDir
466
        if [ -d "$maildir/cur" ];then
467
            user=`echo $maildir | awk -F "/" '{ print $(NF-1) }'`
468
            mkdir -p "$1/mail/$user"
469
            rsync -cav --log-file $RSYNC_LOG $maildir/ "$1/mail/$user" >/dev/null
470
        fi
471
    done
472
    if [ "$(ls -A /var/spool/mail)" ];then
473
        # 2.2 : mails responsables dans /var/spool/mail
474
        echo -n "."
475
        rsync -cav --log-file $RSYNC_LOG /var/spool/mail/* "$1/mail" >/dev/null
476
    fi
477
    if [ -d /home/mail ];then
478
        # 2.3/2.4 : toutes les boîtes dans /home/mail
479
        echo -n "."
480
        rsync -cav --log-file $RSYNC_LOG /home/mail/* "$1/mail" >/dev/null
481
    fi
482
    echo
483
}
484

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

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

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

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

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

    
611
saveldap2horus(){
612
    # $1 : répertoire de sauvegarde
613
    Title "Mise à niveau de l'annuaire"
614
    sed -i 's/\\profiles$/\\profil/g' "$1/$LDIF"
615
}
616

    
617
restoreldap2horus(){
618
    # $1 : répertoire de sauvegarde
619
    Title "Mise à niveau de l'annuaire"
620
    python -c """from horus.backend import get_share_template, mod_share
621
if get_share_template('minedu') == 'standard':
622
    mod_share('minedu', model='minedu')
623
if get_share_template('groupes') == 'standard':
624
    mod_share('groupes', model='groupes')
625
"""
626
}
627

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

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

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

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

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

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

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

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

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

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

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

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

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

    
937
    mkdir -p "$1/squid"
938
    squid=$container_path_proxy/etc/squid
939
    # /etc/squid3 sur EOLE 2.4
940
    [ ! -d $squid ] && squid=${squid}3
941

    
942
    Title "Sauvegarde des personnalisations Squid"
943
    cp -f $squid/domaines_nocache_* "$1/squid" 2>/dev/null
944
    cp -f $squid/domaines_noauth_* "$1/squid" 2>/dev/null
945
    cp -f $squid/src_noauth_* "$1/squid" 2>/dev/null
946
    cp -f $squid/src_nocache_* "$1/squid" 2>/dev/null
947
}
948

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

    
965
    ead=/usr/share/ead2/backend/tmp
966
    for f in "filtrage-contenu*" "dest_interdites*.txt" "horaire_ip*.txt"\
967
             "poste_all*.txt" "ipset_group*.txt" "ipset_schedules*.pickle";do
968
        cp -f "$1/ead/"$f $ead 2>/dev/null
969
    done
970

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

    
978
    squid=$container_path_proxy/etc/squid3
979
    Title "Restauration des personnalisations Squid"
980
    cp -f $1/squid/domaines_nocache_* "$squid" 2>/dev/null
981
    cp -f $1/squid/domaines_noauth_* "$squid" 2>/dev/null
982
    cp -f $1/squid/src_noauth_* "$squid" 2>/dev/null
983
    cp -f $1/squid/src_nocache_* "$squid" 2>/dev/null
984
}
985

    
986
saveenvole(){
987
    # $1 : répertoire de sauvegarde
988
    Title "Sauvegarde des applications web"
989
    [ -x /usr/bin/CreoleGet ] && container_path_web=$(CreoleGet container_path_web)
990
    mkdir -p $1/html
991
    cp -rpf $container_path_web/var/www/html/ "$1"
992

    
993
    mkdir -p $1/www-data
994
    if [ -d /home/www-data ];then
995
        Title "Sauvegarde des données des applications web"
996
        cp -rpf /home/www-data/ "$1"
997
    fi
998
}
999

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

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

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

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

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

    
1146
#scribedivers(){
1147
#    # $1 : répertoire de sauvegarde
1148
#    #Title "Sauvegarde des autres fichiers"
1149
#    mkdir -p $1/config
1150
#    else
1151
#        echo "simple" > $1/config/controlevnc.conf
1152
#    fi
1153
#    # FIXME : posh et applications => c'est mort ?
1154
#}
1155

    
1156
finsauve(){
1157
    echo
1158
    Green "Sauvegarde spéciale terminée"
1159
}
1160

    
1161
finresto(){
1162
    Green "Restauration spéciale terminée"
1163
}
1164

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

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

    
1224
amon22(){
1225
    ## SAUVEGARDE SPECIALE POUR AMON-2.2 ##
1226
    montage $DD
1227
    DDS="$DD/amon-$numero_etab"
1228
    saveconfigeol "$DDS"
1229
    savecreole "$DDS"
1230
    saveamon "$DDS"
1231
    savesso "$DDS"
1232
    savedivers "$DDS"
1233
    demontage $DD
1234
    finsauve
1235
}
1236

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

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

    
1297
amon23(){
1298
    ## SAUVEGARDE SPECIALE POUR AMON-2.3 et AMON-2.4 ##
1299
    montage $DD
1300
    DDS="$DD/amon-$numero_etab"
1301
    saveconfigeol "$DDS"
1302
    savecreole "$DDS"
1303
    saveamon "$DDS"
1304
    savesso "$DDS"
1305
    savedivers "$DDS"
1306
    demontage $DD
1307
    finsauve
1308
}
1309

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

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

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

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

    
1420
amon25(){
1421
    ## RESTAURATION SPECIALE POUR AMON-2.5 ##
1422
    Alerte2
1423
    montage $DD '25'
1424
    DDS="$DD/amon-$numero_etab"
1425
    testf "$DDS"
1426
    restoreamon "$DDS"
1427
    restoresso "$DDS"
1428
    restoredivers "$DDS"
1429
    demontage $DD
1430
}
1431

    
1432
savezephir(){
1433
    enregistrement_zephir --check > /dev/null
1434
    if [ $? -eq 0 ];then
1435
        Title "Sauvegarde des données locales sur Zéphir"
1436
        /usr/share/zephir/scripts/zephir_client save_files
1437
    fi
1438
}
1439

    
1440
# Sauvegarde
1441
if [ -f /etc/eole/version ]
1442
then
1443
    version=`cat /etc/eole/version`
1444
    if [ "$version" = "scribe-2.2" ];then
1445
        clear
1446
        Version
1447
        Green "Sauvegarde du module $version"
1448
        scribe22
1449
    elif [ "$version" = "horus-2.2" ];then
1450
        clear
1451
        Version
1452
        Green "Sauvegarde du module $version"
1453
        horus22
1454
    elif [ "$version" = "amon-2.2" -o "$version" = "amonecole-2.2" ];then
1455
        clear
1456
        Version
1457
        Green "Sauvegarde du module $version"
1458
        amon22
1459
    else
1460
        Version
1461
        Red "Détection du module 2.2 impossible !"
1462
        exit 1
1463
    fi
1464
elif [ -f /etc/eole/release ]
1465
then
1466
    . /etc/eole/release
1467
    version="$EOLE_MODULE-$EOLE_VERSION"
1468
    if [ $EOLE_VERSION == '2.3' ];then
1469
        # Question => Question_ouinon
1470
        Question() {
1471
             Question_ouinon "$1"
1472
        }
1473
        if [ "$version" = "scribe-2.3" ];then
1474
            clear
1475
            Version
1476
            Green "Sauvegarde du module $version"
1477
            scribe23
1478
        elif [ "$version" = "horus-2.3" ];then
1479
            clear
1480
            Version
1481
            Green "Sauvegarde du module $version"
1482
            horus23
1483
        elif [ "$version" = "amon-2.3" ];then
1484
            clear
1485
            Version
1486
            Green "Sauvegarde du module $version"
1487
            amon23
1488
        elif [ "$version" = "amonecole-2.3" || "$version" = "amonecole+-2.3" ];then
1489
            clear
1490
            Version
1491
            Green "Sauvegarde du module $version"
1492
            scribe23 "amonecole"
1493
        else
1494
            Version
1495
            Red "Détection du module 2.3 impossible !"
1496
            exit 1
1497
        fi
1498
    elif [ $EOLE_VERSION == '2.4' ];then
1499
        # Question => Question_ouinon
1500
        Question() {
1501
             Question_ouinon "$1"
1502
        }
1503
        if [ "$version" = "scribe-2.4" ];then
1504
            clear
1505
            Version
1506
            Green "Sauvegarde du module $version"
1507
            scribe24
1508
        elif [ "$version" = "horus-2.4" ];then
1509
            clear
1510
            Version
1511
            Green "Sauvegarde du module $version"
1512
            horus24
1513
        elif [ "$version" = "amon-2.4" ];then
1514
            clear
1515
            Version
1516
            Green "Sauvegarde du module $version"
1517
            amon23
1518
        elif [ "$version" = "amonecole-2.4" ];then
1519
            clear
1520
            Version
1521
            Green "Sauvegarde du module $version"
1522
            scribe24 "amonecole"
1523
        else
1524
            Version
1525
            Red "Détection du module 2.4 impossible !"
1526
            exit 1
1527
        fi
1528
    elif [ $EOLE_VERSION == '2.5' ];then
1529
        if [ "$version" = "scribe-2.5" ];then
1530
            clear
1531
            Version
1532
            Green "Restauration du module $version"
1533
            scribe25
1534
        elif [ "$version" = "horus-2.5" ];then
1535
            clear
1536
            Version
1537
            Green "Restauration du module $version"
1538
            horus25
1539
        elif [ "$version" = "amon-2.5" ];then
1540
            clear
1541
            Version
1542
            Green "Restauration du module $version"
1543
            amon25
1544
        elif [ "$version" = "amonecole-2.5" ];then
1545
            clear
1546
            Version
1547
            Green "Restauration du module $version"
1548
            scribe25 "amonecole"
1549
        else
1550
            Version
1551
            Red "Détection du module 2.5 impossible !"
1552
            exit 1
1553
        fi
1554
        savezephir
1555
        echo
1556
        finresto
1557
    else
1558
        Version
1559
        Red "Détection du module impossible !"
1560
        exit 1
1561
    fi
1562
else
1563
    Version
1564
    Red "Détection du module impossible !"
1565
    exit 1
1566
fi
1567
echo
1568
exit 0