Projet

Général

Profil

migration24_dev.sh

david parra, 16/07/2015 15:46

Télécharger (45,9 ko)

 
1
#!/bin/bash
2

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

    
11
VERSION="20150224"
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
# Debut de la creation du log dans /var/log/migration24.log
25
(
26
echo "----- DEBUT -----"
27
if [ -f /usr/lib/eole/ihm.sh ];then
28
# version 2.4
29
. /usr/lib/eole/ihm.sh
30
numero_etab=$(CreoleGet numero_etab)
31
interactive='True'
32
else
33
# version 2.2 ou 2.3
34
. /usr/share/eole/FonctionsEoleNg
35
. /usr/bin/ParseDico
36
[ -f /etc/eole/containers.conf ] && . /etc/eole/containers.conf
37
fi
38

    
39
if [ -z "$numero_etab" ]
40
then
41
    EchoRouge "Récupération du numéro d'établissement impossible !"
42
    exit 1
43
fi
44

    
45
Version(){
46
    echo "Script de migration version : $VERSION"
47
    echo
48
}
49

    
50
Title(){
51
    echo
52
    EchoCyan "  * $1"
53
}
54

    
55
testcmd(){
56
    if [ "$1" -ne 0 ];then
57
        msg="$2"
58
        [ -z "$msg" ] && msg="Erreur, Abandon."
59
        EchoRouge "$msg"
60
        echo
61
        [ -z "$3" ] && exit 1
62
    fi
63
}
64

    
65
testf(){
66
    if [ ! -e $1 ];    then
67
        EchoRouge "$1 introuvable, Abandon."
68
        echo
69
        exit 1
70
    fi
71
}
72

    
73
Alerte(){
74
    echo
75
    Question_ouinon "Attention ceci va détruire votre annuaire, voulez-vous continuer ?" $interactive "non" "warn"
76
    testcmd $? "Abandon"
77
}
78

    
79
Alerte2(){
80
    echo
81
    Question_ouinon "Attention ceci va écraser certaines données de votre serveur, voulez-vous continuer ?" $interactive "non" "warn"
82
    testcmd $? "Abandon"
83
}
84

    
85
montage(){
86
    # $1 : point de montage
87
    /bin/mkdir -p "$1"
88
    /bin/umount "$1" 2>/dev/null
89
    echo
90
    echo "Quel est le support de sauvegarde ?"
91
    echo "* support distant  => ex : //machine/partage"
92
    echo "* disque USB       => ex : /dev/sd.."
93
    echo "* répertoire local => ex : /root/sauvegarde"
94
    echo
95
    read -p "Chemin : " peri
96
    if [ "${peri:0:2}" = "//" ]
97
    then
98
        echo -n "Entrez un nom d'utilisateur (sinon rien) : "
99
        read user
100
        echo Montage de $peri
101
        [ "$user" != "" ] && mount -t smbfs $peri "$1" -o username=$user || mount -t smbfs $peri "$1" -o password=''
102
        UMOUNT_NEEDED=1
103
    elif [ "${peri:0:4}" = "/dev" ]
104
    then
105
        echo Disque local
106
        echo Montage de $peri
107
        /bin/mount $peri "$1"
108
        UMOUNT_NEEDED=1
109
    elif [ "${peri:0:1}" = "/" ]
110
    then
111
        testf $peri
112
        [ -L "$1" ] && rm -f "$1"
113
        if [ -d "$1" ];then
114
            rmdir "$1"
115
            testcmd $?
116
        fi
117
        ln -ns $peri "$1"
118
        UMOUNT_NEEDED=0
119
    else
120
        testcmd 1 "Le chemin doit être complet !"
121
    fi
122
    testcmd $? "Montage $peri impossible, Abandon."
123
}
124

    
125
demontage(){
126
    # $1 : point de montage
127
    if [ $UMOUNT_NEEDED -eq 1 ]
128
    then
129
        Title "Démontage du support"
130
        /bin/umount "$1"
131
        echo
132
    fi
133
    [ -L "$1" ] && rm -f "$1"
134
}
135

    
136
saveconfigeol(){
137
    # $1 : répertoire de sauvegarde
138
    Title "Test du support"
139
    /bin/mkdir -p "$1"
140
    testcmd $? "Ecriture impossible sur le support !"
141
    ln -s /tmp "$1/testln"
142
    if [ $? -ne 0 ];then
143
        EchoRouge "Le support ne supporte pas les liens symboliques !"
144
        Question "Voulez-vous continuer malgré tout ?"
145
        testcmd $? "Abandon"
146
    fi
147
    rm -f "$1/testln"
148
    Title "Copie du fichier config.eol"
149
    /bin/cp -f /etc/eole/config.eol "$1/$version.eol"
150
    testf "$1/$version.eol"
151
}
152

    
153
questionsave(){
154
    # $1 : emplacement des données (/home ou /data)
155
    Question "Voulez-vous sauvegarder automatiquement les données et les ACL ($1) ?"
156
    if [ $? -ne 0 ];then
157
        EchoOrange "La migration des données et des ACL contenues dans $1 ne sera pas automatique !"
158
        return 1
159
    fi
160
    return 0
161
}
162

    
163
savebcdi(){
164
    # $1 : répertoire de sauvegarde
165
    if [ -d /home/bcdiserv ];then
166
        Question "Voulez-vous sauvegarder les fichiers liés à Bcdi Web ?"
167
        if [ $? -eq 0 ];then
168
            Title "Sauvegarde de Bcdi Web"
169
            mkdir -p "$1/bcdi"
170
            cp -R /home/bcdiserv "$1/home/"
171
            cp -R /var/www/html/bcdiweb "$1/bcdi/"
172
            cp -f /etc/apache2/sites-enabled/bcdiweb.conf "$1/bcdi/"
173
            cp -f /etc/default/rsync "$1/bcdi/"
174
            cp -f /etc/rsyncd.conf "$1/bcdi/"
175
            echo
176
        fi
177
    fi
178
}
179

    
180
restorebcdi(){
181
    # $1 : répertoire de sauvegarde
182
    if [ -d "$1/home/bcdiserv" ];then
183
        echo "Restauration des données liées à Bcdi Web"
184
        # /home/bcdiserv est restauré par restorescribedata()
185
        if [ -d "$1/bcdi/bcdiweb" ];then
186
            cp -R "$1/bcdi/bcdiweb" /var/www/html/bcdiweb
187
            chown -R www-data:www-data /var/www/html/bcdiweb
188
        fi
189
        cp -f "$1/bcdi/bcdiweb.conf" /etc/apache2/sites-enabled
190
        cp -f "$1/bcdi/rsync" /etc/default/rsync
191
        cp -f "$1/bcdi/rsyncd.conf" /etc/rsyncd.conf
192
        echo
193
    fi
194
}
195

    
196
savescribedata(){
197
    # $1 : répertoire de sauvegarde
198
    mkdir -p "$1/home"
199
    savebcdi "$1"
200
    Title "Copie des données"
201
    echo -n "."
202
    # ménage
203
    rm -f /home/netlogon/*.bat
204
    rm -f /home/netlogon/*.txt
205
    mkdir -p /home/options
206
    # FIXME : supprimer tous les .virus et .scanned avant ?
207
    for rep in "netlogon" "workgroups" "classes" "options";do
208
        echo -n "."
209
        cp --preserve=timestamps -rf /home/$rep "$1/home"
210
    done
211
    echo -n "."
212
    mkdir -p "$1/home/esu"
213
    cp --preserve=timestamps -rf /home/esu/Base "$1/home/esu"
214
    if [ -d /home/wpkg ];then
215
        echo -n "."
216
        mkdir -p "$1/home/wpkg"
217
        cp --preserve=timestamps -rf /home/wpkg/* "$1/home/wpkg"
218
        rm -rf "$1/home/wpkg/documents"
219
        rm -f  "$1/home/wpkg/wpkg.js"
220
    fi
221
    for abc in `find /home -maxdepth 1 -name '?' | sort`;do
222
        echo -n "."
223
        rsync -cav --log-file $RSYNC_LOG --exclude=MailDir \
224
              --exclude=IntegrDom --exclude=.scanned* ${abc} "$1/home" >/dev/null
225
        testcmd $? "Erreur lors de la sauvegarde des données $abc : consulter le fichier $RSYNC_LOG" 'noexit'
226
    done
227
    # scribe (controle-vnc-applis)
228
    rm -rf "$1/home/netlogon/blockinput"
229
    rm -f "$1/home/a/admin/perso/Alias.lnk"
230
    rm -f "$1/home/a/admin/perso/alias"
231
    rm -f "$1/home/a/admin/perso/Esu.lnk"
232
    rm -f "$1/home/a/admin/perso/Install_Client_Scribe.lnk"
233
    rm -rf "$1/home/workgroups/professeurs/gestion-postes"
234
    rm -f "$1/home/workgroups/professeurs/Gestion-postes.lnk"
235
    echo
236
    # scribe (controle-vnc-client)
237
    # scribe (divers)
238
    # les corbeilles ($smb_trash_dir)
239
    # horus ?
240
}
241

    
242
savehorusdata(){
243
    # $1 : répertoire de sauvegarde
244
    Title "Copie des données"
245
    echo "(cette operation peut prendre du temps)"
246
    echo -n "."
247
    # purge des fichiers de connexion
248
    rm -f /home/netlogon/*.bat
249
    # FIXME : on devrait supprimer tous les .virus et .scanned avant
250
    echo -n "."
251
    if [ -L /data ];then
252
        # spécifique Horus-2.3
253
        mkdir -p "$1/data/home"
254
        for dir in `find /home/* -maxdepth 0 -type d`;do
255
            if [ $dir != "/home/workgroups" ];then
256
                cp -rf --preserve=timestamps $dir "$1/data/home"
257
                echo -n "."
258
            fi
259
        done
260
        cp -rf /home/workgroups/* "$1/data"
261
    else
262
        # spécifique Horus-2.2
263
        cp -rf --preserve=timestamps /data "$1/"
264
    fi
265
    # suppression des fichiers spéciaux
266
    echo -n "."
267
    rm -f "$1/data/aquota.group"
268
    rm -f "$1/data/aquota.user"
269
    rm -rf "$1/data/home/horus"
270
    rm -rf "$1/data/home/ftp"
271
    echo -n "."
272
    for prof in `find "$1/data/home" -maxdepth 2 -name "profiles"`;do
273
        ls $prof/* &>/dev/null
274
        if [ $? -ne 0 ];then
275
            # suppression des répertoires vides
276
            rmdir $prof
277
        elif [ ! -d `dirname $prof`/profil ];then
278
            # renommage profiles -> profil
279
            mv "$prof" "`dirname $prof`/profil"
280
        fi
281
    done
282
    echo -n "."
283
    if [ ! -L /opt ];then
284
        # spécifique Horus-2.3
285
        cp -rf --preserve=timestamps /opt "$1/data"
286
    fi
287
    echo
288
}
289

    
290
restorescribedata(){
291
    # $1 : répertoire de sauvegarde
292
    Title "Restauration des données"
293
    if [ ! -d "$1/home" ];then
294
        EchoOrange "Les données de /home ne sont pas présentes dans la sauvegarde"
295
        return
296
    fi
297
    echo "(cette operation peut prendre du temps)"
298
    restorebcdi "$1"
299
    rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/home/" /home/ >/dev/null
300
    testcmd $? "Erreur lors de la restauration des données, consulter le fichier $RSYNC_LOG"
301
    [ -f "$1/home/wpkg/hosts.xml" ] && cp -f "$1/home/wpkg/hosts.xml" /home/wpkg/
302
}
303

    
304
restorehorusdata(){
305
    # $1 : répertoire de sauvegarde
306
    Title "Restauration des données"
307
    if [ ! -d "$1/data" ];then
308
        echo
309
        EchoOrange "Les données de /data ne sont pas présentes dans la sauvegarde"
310
        return
311
    fi
312
    echo "(cette operation peut prendre du temps)"
313
    echo -n "."
314
    rsync -cav --log-file $RSYNC_LOG --ignore-existing --exclude=home --exclude=opt \
315
          --exclude=minedu/windata/mysql "$1/data/" /data/ >/dev/null
316
    testcmd $? "Erreur lors de la restauration des données (/data), consulter le fichier $RSYNC_LOG"
317
    echo -n "."
318
    rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/data/home/" /home/ >/dev/null
319
    testcmd $? "Erreur lors de la restauration des données (/home), consulter le fichier $RSYNC_LOG"
320
    echo -n "."
321
    [ -f "$1/data/home/wpkg/hosts.xml" ] && cp -f "$1/data/home/wpkg/hosts.xml" /home/wpkg/
322
    if [ ! -f "$1/data/opt/interbase/isc4.gdb" ];then
323
        EchoOrange "Pas de fichier isc4.gdb"
324
    else
325
        cp -f "$1/data/opt/interbase/isc4.gdb" /opt/interbase/isc4.gdb
326
        cp -f "$1/data/opt/interbase/ib_license.dat" /opt/interbase/ib_license.dat 2>/dev/null
327
    fi
328
    echo
329
}
330

    
331
savequota(){
332
    # $1 : répertoire de sauvegarde
333
    Title "Sauvegardes des quotas utilisateurs"
334
    /usr/sbin/repquota -a |grep -v '^#' > "$1/$QUOTAS"
335
}
336

    
337
restorequota(){
338
    # $1 : répertoire de sauvegarde
339
    Title "Restauration des quotas utilisateurs"
340
    testf "$1/$QUOTAS"
341
    python -c """from fichier.quota import set_quota
342
from sys import stdout
343
fp = file('$1/$QUOTAS');started = False;num=0
344
for ligne in fp.readlines():
345
    if not started:
346
        if ligne.startswith('------------'):started = True
347
        continue
348
    # cas plusieurs partition
349
    if ligne.startswith('***'):
350
        started = False
351
        continue
352
    elts = ligne.strip().split()
353
    try:
354
        user  = elts[0]
355
        quota = elts[3]
356
    except:
357
        continue
358
    if quota != '0':
359
        num+=1
360
        if num % 20 == 0:
361
            stdout.write('.')
362
            stdout.flush()
363
        set_quota(user, int(quota)/1000)
364
print \"\\n%d quotas non nuls restaurés\" % num
365
fp.close()"""
366
}
367

    
368
savescribeacl(){
369
    # $1 : répertoire de sauvegarde
370
    Title "Sauvegarde des ACL"
371
    > "$1/$ACLS"
372
    for rep in "netlogon" "workgroups" "classes" "options";do
373
        echo -n "."
374
        /usr/bin/getfacl -R --absolute-names /home/$rep >> "$1/$ACLS"
375
    done
376
    for abc in `find /home -maxdepth 1 -name '?' | sort`
377
    do
378
        echo -n "."
379
        /usr/bin/getfacl -R --absolute-names $abc >> "$1/$ACLS"
380
    done
381
    echo
382
}
383

    
384
savehorusacl(){
385
    # $1 : répertoire de sauvegarde
386
    Title "Sauvegarde des ACL"
387
    /usr/bin/getfacl -R --absolute-names /data > "$1/$ACLS"
388
}
389

    
390
restoreacl(){
391
    # $1 : répertoire de sauvegarde
392
    Title "Restauration des ACL"
393
    if [ ! -f "$1/$ACLS" ];then
394
        echo
395
        EchoOrange "Les ACL ne sont pas présentes dans la sauvegarde"
396
        return
397
    fi
398
    [ -d /data ] && ln -nsf /home /data/home
399
    /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
400
    [ -L /data/home ] && rm -f /data/home
401
    ERR=`wc -l $ACLS_LOG|cut -d' ' -f1`
402
    if [ $ERR -gt 0 ];then
403
        EchoOrange "ATTENTION : $ERR messages d'erreur dans $ACLS_LOG"
404
    fi
405
}
406

    
407
savemail(){
408
    # $1 : répertoire de sauvegarde
409
    Title "Sauvegarde des données liées à la messagerie"
410
    mkdir -p "$1/listes"
411
    echo -n "."
412
    if [ -f $container_path_mail/etc/mail/sympa.aliases ];then
413
        cp $container_path_mail/etc/mail/sympa.aliases "$1/listes/sympa_aliases"
414
    else
415
        cp $container_path_mail/etc/mail/sympa_aliases "$1/listes"
416
    fi
417
    cp -R $container_path_mail/$SYMPA/expl "$1/listes"
418
    echo -n "."
419
    cp -R $container_path_mail/$SYMPA/wwsarchive "$1/listes"
420
    mkdir -p "$1/courier"
421
    echo -n "."
422
    cp -f $container_path_mail/etc/courier/pop3d.* $container_path_mail/etc/courier/imapd.* "$1/courier"
423
    mkdir -p "$1/mail"
424
    echo -n "."
425
    for maildir in `find /home -maxdepth 3 -name MailDir`;do
426
        # 2.2 : mails dans /home/<l>/<login>/MailDir
427
        if [ -d "$maildir/cur" ];then
428
            user=`echo $maildir | awk -F "/" '{ print $(NF-1) }'`
429
            mkdir -p "$1/mail/$user"
430
            rsync -cav --log-file $RSYNC_LOG $maildir/ "$1/mail/$user" >/dev/null
431
        fi
432
    done
433
    if [ "$(ls -A /var/spool/mail)" ];then
434
        # 2.2 : mails responsables dans /var/spool/mail
435
        echo -n "."
436
        rsync -cav --log-file $RSYNC_LOG /var/spool/mail/* "$1/mail" >/dev/null
437
    fi
438
    if [ -d /home/mail ];then
439
        # 2.3 : toutes les boîtes dans /home/mail
440
        echo -n "."
441
        rsync -cav --log-file $RSYNC_LOG /home/mail/* "$1/mail" >/dev/null
442
    fi
443
    echo
444
}
445

    
446
restoremail(){
447
    # $1 : répertoire de sauvegarde
448
    Title "Restauration des données liées à la messagerie"
449
    container_path_mail=$(CreoleGet container_path_mail)
450
    # sympa_aliases => sympa.aliases (#5049)
451
    cp "$1/listes/sympa_aliases" "$container_path_mail/etc/mail/sympa.aliases"
452
    echo -n "."
453
    rsync --log-file $RSYNC_LOG --ignore-existing -cav "$1/listes/expl" "$container_path_mail/$SYMPA" >/dev/null
454
    echo -n "."
455
    rsync --log-file $RSYNC_LOG --ignore-existing -cav "$1/listes/wwsarchive" "$container_path_mail/$SYMPA" >/dev/null
456
    echo -n "."
457
    CreoleRun "chown -R sympa:sympa $SYMPA" mail
458
    echo -n "."
459
    # restauration des certificats SSL pour pop et imap
460
    cp -f "$1"/courier/*.* "$container_path_mail/etc/courier"
461
    echo -n "."
462
    rsync --log-file $RSYNC_LOG -cav "$1/mail" /home/ >/dev/null
463
    echo -n "."
464
    CreoleRun "chown -R mail:mail /home/mail" mail
465
    echo -n "."
466
    # re-génération des listes de diffusion (pour les responsables)
467
    python -c """from scribe.eolegroup import Group
468
g = Group()
469
g.ldap_admin.connect()
470
for classe in g._get_groups('Classe'):
471
    g._delete_maillist(classe)
472
    g._delete_maillist('profs-%s' % classe)
473
    g._delete_maillist('resp-%s' % classe)
474
    g._add_maillist('Classe', classe)
475
    g._add_maillist('Equipe', 'profs-%s' % classe)
476
    g._add_resp_maillist(classe)
477
g.ldap_admin.close()
478
"""
479
    echo -n "."
480
    # vérification de l'adresse IP du serveur ldap
481
    SEARCHPATH="$container_path_mail/$SYMPA/expl"
482
    adresse_ip_mysql=$(CreoleGet adresse_ip_mysql)
483
    for config in `grep -l "host localhost" $SEARCHPATH/*/config $SEARCHPATH/*/*/config 2>/dev/null`;do
484
        sed -i "s/^host localhost$/host $adresse_ip_mysql/g" $config
485
    done
486
    echo
487
}
488

    
489
saveldap(){
490
    # $1 : répertoire de sauvegarde
491
    Title "Sauvegarde de l'annuaire"
492
    [ ! -f /root/.reader ] && cp -f /root/.reader "$1/$READER"
493
    [ -x /usr/bin/CreoleService ] && CreoleService slapd stop || /etc/init.d/slapd stop
494
    chroot "/$container_path_annuaire" /usr/sbin/slapcat -f /etc/ldap/slapd.conf| grep -Ev "^sambaShareAdmin:|^sambaShareDep:|^location:|^server:|^sambaLogonScript:" > "$1/$LDIF"
495
    testcmd $?
496
    [ -x /usr/bin/CreoleService ] && CreoleService slapd start || /etc/init.d/slapd start
497
}
498

    
499
restoreldap(){
500
    # $1 : répertoire de sauvegarde
501
    Title "Restauration de l'annuaire"
502
    # Recherche de l'ancienne objectClass "sambaServer" (#3730)
503
    dn=$(grep "ou=ordinateurs,ou=ressource" "$1/$LDIF" | grep "dn: cn" | grep -v '\$')
504
    if [ -n "$dn" ];then
505
        EchoRouge "L'entrée ldap débutant par \"$dn\" est obsolète."
506
        echo "Veuillez la supprimer du fichier : $LDIF"
507
        echo
508
        exit 1
509
    fi
510
    # Recherche des chemins commençant par /partages (#5686)
511
    grep -q "^sambaFilePath: \/partages\/" "$1/$LDIF"
512
    if [ $? -eq 0 ];then
513
        EchoRouge "Des attributs \"sambaFilePath\" débutent par \"/partages\""
514
        echo "Les occurences de \"/partages\" doivent être remplacées par \"/home\" dans le fichier : $LDIF"
515
        echo
516
        exit 1
517
    fi
518
    [ -f "$1/$READER" ] && cp -f "$1/$READER" /root/.reader
519
    # code inspiré de posttemplate/02-annuaire
520
    container_path_annuaire=$(CreoleGet container_path_annuaire)
521
    CHROOT=''
522
    [ ! "$container_path_annuaire" = "" ] && CHROOT="chroot $container_path_annuaire"
523
    # le montage n'est pas accessible depuis le conteneur :)
524
    CreoleService slapd stop -c annuaire
525
    rm -f $container_path_annuaire/var/lib/ldap/*.*
526
    cp -f "$1/$LDIF" "$container_path_annuaire/tmp/$LDIF"
527
    $CHROOT slapadd -f /etc/ldap/slapd.conf -l "/tmp/$LDIF"
528
    testcmd $? "Erreur lors de la restauration de l'annuaire !"
529
    CreoleRun "chown openldap:openldap /var/lib/ldap/*" annuaire
530
    rm -f "$container_path_annuaire/tmp/$LDIF"
531
    CreoleService slapd start -c annuaire
532
    testcmd $? "Erreur lors du redémarrage d'OpenLDAP !"
533
}
534

    
535
saveldap2scribe(){
536
    # $1 : répertoire de sauvegarde
537
    Title "Mise à niveau de l'annuaire"
538
    python -c """ldif = '$1/$LDIF'
539
fic = file(ldif).read().splitlines()
540
new = []
541
for line in fic:
542
    if line.startswith('mailDir: ') and '/MailDir/' in line:
543
        new.append('mailDir: /home/mail/%s/' % line.split('/')[3])
544
    else:
545
        new.append(line)
546
if new != fic:
547
    fic2 = file(ldif, 'w')
548
    fic2.write(\"\n\".join(new))
549
    fic2.close()
550
"""
551
}
552

    
553
restoreldap2scribe(){
554
    # $1 : répertoire de sauvegarde
555
    Title "Mise à niveau de l'annuaire"
556
    python -c """from scribe.eoleshare import Share
557
s = Share()
558
s.ldap_admin.connect()
559
sh = s._get_shares_data()
560
for sha in sh:
561
    if not sha[1].has_key('sambaShareModel'):
562
        name = sha[1]['sambaShareName'][0]
563
        if name in ['icones\$', 'groupes', 'commun', 'devoirs']:
564
            s._set_attr(name, 'sambaShareModel', name)
565
        else:
566
            s._set_attr(name, 'sambaShareModel', 'standard')
567
s.ldap_admin.close()
568
"""
569
}
570

    
571
saveldap2horus(){
572
    # $1 : répertoire de sauvegarde
573
    Title "Mise à niveau de l'annuaire"
574
    sed -i 's/\\profiles$/\\profil/g' "$1/$LDIF"
575
}
576

    
577
restoreldap2horus(){
578
    # $1 : répertoire de sauvegarde
579
    Title "Mise à niveau de l'annuaire"
580
    python -c """from horus.backend import get_share_template, mod_share
581
if get_share_template('minedu') == 'standard':
582
    mod_share('minedu', model='minedu')
583
if get_share_template('groupes') == 'standard':
584
    mod_share('groupes', model='groupes')
585
"""
586
}
587

    
588
savesmb(){
589
    # $1 : répertoire de sauvegarde
590
    Title "Sauvegarde des données liées à SAMBA et à CUPS"
591
    mkdir -p "$1/cups"
592
    cp -f $container_path_fichier/etc/cups/printers.conf "$1/cups" 2>/dev/null
593
    cp -f $container_path_fichier/etc/cups/ppds.dat "$1/cups" 2>/dev/null
594
    cp -rf $container_path_fichier/etc/cups/ppd "$1/cups"
595
    mkdir -p "$1/samba"
596
    if [ -f $container_path_fichier/var/lib/samba/secrets.tdb ];then
597
        cp -f $container_path_fichier/var/lib/samba/secrets.tdb "$1/samba"
598
    else
599
        cp -f $container_path_fichier/etc/samba/secrets.tdb  "$1/samba" 2>/dev/null
600
    fi
601
    cp -rf $container_path_fichier/var/lib/samba/printers "$1/samba"
602
    for f in "ntdrivers.tdb" "ntforms.tdb" "ntprinters.tdb";do
603
    cp -f "$container_path_fichier/var/lib/samba/$f" "$1/samba"
604
    done
605
    chroot "/$container_path_fichier" net getlocalsid | /usr/bin/awk '{print $6}' > "$1/samba/$SID"
606
    testcmd $?
607
}
608

    
609
restoresmb(){
610
    # $1 : répertoire de sauvegarde
611
    Title "Restauration des données liées à SAMBA et à CUPS"
612
    container_path_fichier=$(CreoleGet container_path_fichier)
613
    cp -f  "$1"/cups/printers.conf "$container_path_fichier/etc/cups/printers.conf" 2>/dev/null
614
    cp -f  "$1"/cups/ppds.dat "$container_path_fichier/etc/cups/ppds.dat" 2>/dev/null
615
    cp -rf "$1"/cups/ppd/* "$container_path_fichier/etc/cups/ppd/" 2>/dev/null
616
    cp -f  "$1"/samba/secrets.tdb "$container_path_fichier/var/lib/samba/secrets.tdb"
617
    cp -rf "$1"/samba/printers/* "$container_path_fichier/var/lib/samba/printers/" 2>/dev/null
618
    for f in "ntdrivers.tdb" "ntforms.tdb" "ntprinters.tdb";do
619
    cp -f "$1/samba/$f" "$container_path_fichier/var/lib/samba/$f" 2>/dev/null
620
    done
621
    NEWSID=`cat $1/samba/$SID`
622
    CHROOT=''
623
    [ ! "$container_path_fichier" = "" ] && CHROOT="chroot $container_path_fichier"
624
    $CHROOT net setlocalsid $NEWSID
625
    testcmd $? "Impossible de restaurer le SID du domaine"
626
}
627

    
628
savescribemysql(){
629
    # $1 : répertoire de sauvegarde
630
    Title "Sauvegarde des bases Mysql"
631
    mkdir -p "$1/mysql"
632
    cp $container_path_mysql/etc/mysql/debian.cnf $1/mysql
633
    PASS=`/usr/bin/pwgen -1`
634
    /usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
635
    [ -n "$container_ip_mysql" ] && mysqlhost="-h $container_ip_mysql"
636
    mysql $mysqlhost -uroot -p$PASS -e "show databases" | grep -v "^Database$" | while read databasename; do
637
        if [ ! "$databasename" = "information_schema" ]; then
638
            echo -n "."
639
            mysqldump $mysqlhost -uroot -p$PASS --database $databasename --flush-privileges \
640
                      --create-options -Q -c --lock-tables --events > "$1/mysql/$databasename.sql"
641
            testcmd $? "Erreur lors de la sauvegarde de la base $databasename !"
642
        fi
643
    done
644
    echo
645
}
646

    
647
savehorusmysql(){
648
    # $1 : répertoire de sauvegarde
649
    Title "Sauvegarde des bases Mysql"
650
    mkdir -p "$1/mysql"
651
    cp /etc/mysql/debian.cnf "$1/mysql"
652
    PASS=`/usr/bin/pwgen -1`
653
    /usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
654
    # FIXME : marche pour tout ???
655
    mysqldump --all-database -uroot -p$PASS > "$1/mysql/$MYSQLDB"
656
}
657

    
658
restorescribemysql(){
659
    # $1 : répertoire de sauvegarde
660
    Title "Restauration des bases Mysql"
661
    #testf $1/mysql/mysql.sql
662
    PASS=`/usr/bin/pwgen -1`
663
    /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
664
    # FIXME : intérêt de restaurer la bdd mysql sur Scribe ?
665
    #echo -n "."
666
    #cp -f $1/mysql/debian.cnf /etc/mysql/debian.cnf
667
    #/usr/share/eole/mysql_pwd.py "$PASS" nomodif >/dev/null
668
    adresse_ip_mysql=$(CreoleGet adresse_ip_mysql)
669
    for database in 'sympa';do
670
        echo -n "."
671
        testf "$1/mysql/$database.sql"
672
        mysql -uroot -h$adresse_ip_mysql -p$PASS <"$1/mysql/$database.sql"
673
    done
674
    echo -n "."
675
    # mysql_upgrade n'est pas disponible sur le maître (fourni par mysql-server)
676
    CreoleRun "mysql_upgrade -uroot -p$PASS --force" mysql >/dev/null
677
    echo
678
}
679

    
680
restorehorusmysql(){
681
    # $1 : répertoire de sauvegarde
682
    Title "Restauration des bases Mysql"
683
    echo -n "."
684
    PASS=`/usr/bin/pwgen -1`
685
    /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
686
    testf "$1/mysql/$MYSQLDB"
687
    echo -n "."
688
    mysql -uroot -p$PASS <"$1/mysql/$MYSQLDB"
689
    # synchro du mot de passe debian-sys-maint (#2418)
690
    echo -n "."
691
    /etc/init.d/mysql reload >/dev/null
692
    echo -n "."
693
    cp -f $1/mysql/debian.cnf /etc/mysql/debian.cnf
694
    /usr/share/eole/sbin/mysql_pwd.py "$PASS" nomodif >/dev/null
695
    echo -n "."
696
    mysql_upgrade -uroot -p$PASS --force >/dev/null
697
    # on remet les droits à l'utilisateur debian-sys-maint"
698
    #mysql -uroot -p$PASS -e \
699
    #    "GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' \
700
    #    IDENTIFIED BY '`grep password /etc/mysql/debian.cnf|sort -u|cut -d" " -f3`' \
701
    #    WITH GRANT OPTION;"
702
    echo
703
}
704

    
705
savebacula22(){
706
    # $1 : répertoire de sauvegarde
707
    Title "Sauvegarde de la configuration bacula"
708
    mkdir -p "$1/bacula"
709
    #cp -f /etc/bacula/typesupport.conf $1/bacula 2>/dev/null
710
    /usr/share/eole/bacula/baculasupport.py -l >"$1/bacula/support.conf"
711
    #cp -f /etc/bacula/eolemsgdefs.pic  $1/bacula 2>/dev/null
712
    #cp -f /etc/bacula/eolemessages.conf $1/bacula 2>/dev/null
713
    /usr/share/eole/bacula/baculamessage.py -l >"$1/bacula/mail.conf"
714
    cp -f /etc/bacula/listefichiers*.conf "$1/bacula"
715
    # chemins Scribe
716
    cp -f /var/www/ead/config/bacula-distant.txt "$1/bacula" 2>/dev/null
717
    cp -f /var/www/ead/config/bacula-usb.txt "$1/bacula" 2>/dev/null
718
    # chemins Horus
719
    cp -f /var/www/ead/tmp/bacula-distant.txt "$1/bacula" 2>/dev/null
720
    cp -f /var/www/ead/tmp/bacula-usb.txt "$1/bacula" 2>/dev/null
721
}
722

    
723
savebacula23(){
724
    # $1 : répertoire de sauvegarde
725
    Title "Sauvegarde de la configuration bacula"
726
    mkdir -p "$1/bacula"
727
    # EOLE 2.3
728
    python -c """from pyeole.bacula import load_bacula_support;
729
for k,v in load_bacula_support().items():print '{0}=\"{1}\"'.format(k,v)""" > $1/bacula/bacula23.conf
730
    python -c """from pyeole.bacula import load_bacula_mail;mail=load_bacula_mail();
731
if mail:
732
    for k,v in mail.items():print '{0}=\"{1}\"'.format(k,v)""" >> $1/bacula/bacula23.conf
733
    if [ -f /var/lib/eole/config/baculajobs.conf ];then
734
        cp -f /var/lib/eole/config/baculajobs.conf $1/bacula/baculajobs.conf
735
    fi
736
}
737

    
738
restorebacula(){
739
    # $1 : répertoire de sauvegarde
740
    Title "Restauration de la configuration bacula"
741
    script="/usr/share/eole/sbin/baculaconfig.py"
742
    if [ -f $1/bacula/bacula23.conf ];then
743
        . $1/bacula/bacula23.conf
744
    else
745
        support=`cat $1/bacula/support.conf`
746
        if [ "$support" = 'bande' ];then
747
            support='manual'
748
        elif [ "$support" = 'usb' ];then
749
            usb_path=`cat "$1/bacula/bacula-usb.txt" 2>/dev/null`
750
        elif [ "$support" = "distant" ];then
751
            support='smb'
752
            if [ -f "$1/bacula/bacula-distant.txt" ];then
753
                smb_machine=`awk -F ' ' '{print $1}' "$1/bacula/bacula-distant.txt"`
754
                if [ "${smb_machine:0:2}" = "//" ];then
755
                    # format Horus-2.2
756
                    smb_partage=`echo $smb_machine | awk -F '/' '{print $4}'`
757
                    smb_machine=`echo $smb_machine | awk -F '/' '{print $3}'`
758
                    smb_login=`awk -F ' ' '{print $3}' "$1/bacula/bacula-distant.txt"`
759
                    smb_password=`awk -F ' ' '{print $4}' "$1/bacula/bacula-distant.txt"`
760
                else
761
                    # format Scribe-2.2
762
                    smb_partage=`awk -F ' ' '{print $3}' "$1/bacula/bacula-distant.txt"`
763
                    smb_login=`awk -F ' ' '{print $4}' "$1/bacula/bacula-distant.txt"`
764
                    smb_password=`awk -F ' ' '{print $5}' "$1/bacula/bacula-distant.txt"`
765
                fi
766
                smb_ip=`awk -F ' ' '{print $2}' "$1/bacula/bacula-distant.txt"`
767
            fi
768
        fi
769
        mail_ok=`awk -F ';' '{print $2}' "$1/bacula/mail.conf"`
770
        mail_error=`awk -F ';' '{print $3}' "$1/bacula/mail.conf"`
771
    fi
772

    
773
    # restauration des adresses mail
774
    echo -n "."
775
    [ ! -z "$mail_ok" ] && $script -m --mail_ok=$mail_ok
776
    echo -n "."
777
    [ ! -z "$mail_error" ] && $script -m --mail_error=$mail_error
778
    echo -n "."
779
    # restaurtion du support "manual"
780
    if [ "$support" = 'manual' ];then
781
        $script -s manual
782
    # restauration du support "usb"
783
    elif [ "$support" = 'usb' ];then
784
        if [ -z "$usb_path" ];then
785
            EchoOrange "Support USB non configuré"
786
        else
787
            $script -s usb --usb_path=$usb_path
788
        fi
789
    # restauration du support "smb"
790
    elif [ "$support" = 'smb' ];then
791
        if [ -z "$smb_machine" -o -z "$smb_ip" -o -z "$smb_partage" ];then
792
            EchoOrange "Configuration smb incomplète"
793
        else
794
            smbopts="--smb_machine=$smb_machine --smb_ip=$smb_ip --smb_partage=$smb_partage"
795
            if [ ! -z "$smb_login" -a ! -z "$smb_password" ];then
796
                smbopts="$smbopts --smb_login=$smb_login --smb_password=$smb_password"
797
            fi
798
            $script -s smb $smbopts
799
        fi
800
    elif [ "$support" = 'none' ];then
801
        EchoOrange "Aucun support de sauvegarde configuré"
802
    else
803
        EchoOrange "Support de sauvegarde \"$support\" inconnu"
804
    fi
805
    echo -n "."
806
    if [ -f $1/bacula/baculajobs.conf ];then
807
        python -c """import sys
808
from pickle import load
809
from pyeole.bacula import add_job
810
for job in load(file('$1/bacula/baculajobs.conf', 'r')):
811
    job.update({'no_reload':True})
812
    try:
813
        add_job(**job)
814
        sys.stdout.write('.')
815
    except Exception, msg:
816
        print msg
817
"""
818
    fi
819
}
820

    
821
saveamon(){
822
    # $1 : répertoire de sauvegarde
823
    Title "Sauvegarde des personnalisations DansGuardian"
824
    mkdir -p "$1/dansguardian"
825
    dg=/var/lib/blacklists/dansguardian
826
    if [ -d "${dg}0" ];then
827
        mkdir -p "$1/dansguardian/dansguardian0"
828
        cp -rf "${dg}0/"* "$1/dansguardian/dansguardian0"
829
    fi
830
    if [ -d "${dg}1" ];then
831
        mkdir -p "$1/dansguardian/dansguardian1"
832
        cp -rf "${dg}1/"* "$1/dansguardian/dansguardian1"
833
    fi
834

    
835
    mkdir -p "$1/ead"
836
    ead=/usr/share/ead2/backend/tmp
837
    config=/var/lib/eole/config
838
    # Sites / Mode de filtrage
839
    cp -f $ead/filtrage-contenu* "$1/ead" 2>/dev/null
840
    # "Destinations interdites"
841
    cp -f $ead/dest_interdites*.txt "$1/ead" 2>/dev/null
842
    # "Sources interdites" (web)
843
    cp -f $ead/horaire_ip*.txt "$1/ead" 2>/dev/null
844
    # "Sources interdites" (réseau)
845
    cp -f $ead/poste_all*.txt "$1/ead" 2>/dev/null
846
    # Groupe de machine
847
    cp -f $ead/ipset_group*.txt "$1/ead" 2>/dev/null
848
    cp -f $ead/ipset_schedules*.pickle "$1/ead" 2>/dev/null
849
    # Règles du pare-feu
850
    if [ -f $config/regles.csv ];then
851
        cp -f $config/regles.csv "$1/ead" 2>/dev/null
852
    else
853
        cp -f $ead/regles.csv "$1/ead" 2>/dev/null
854
    fi
855
    oldead=/var/www/ead/tmp
856
    cp -f $oldead/kill-p2p "$1/ead" 2>/dev/null
857
    if [ -f $config/horaires.txt ];then
858
        cp -f $config/horaires.txt "$1/ead" 2>/dev/null
859
    else
860
        cp -f $oldead/horaires.txt "$1/ead" 2>/dev/null
861
    fi
862

    
863
    mkdir -p "$1/squid"
864
    squid=$container_path_proxy/etc/squid
865
    Title "Sauvegarde des personnalisations Squid"
866
    cp -f $squid/domaines_nocache_* "$1/squid" 2>/dev/null
867
    cp -f $squid/domaines_noauth_* "$1/squid" 2>/dev/null
868
    cp -f $squid/src_noauth_* "$1/squid" 2>/dev/null
869
    cp -f $squid/src_nocache_* "$1/squid" 2>/dev/null
870
}
871

    
872
restoreamon(){
873
    # $1 : répertoire de sauvegarde
874
    Title "Restauration des personnalisations DansGuardian"
875
    container_path_proxy=$(CreoleGet container_path_proxy)
876
    dg=$container_path_proxy/var/lib/blacklists/dansguardian
877
    if [ $(CreoleGet dans_instance_1_active "non") == "oui" ];then
878
        if [ -d "$1/dansguardian/dansguardian0" ];then
879
            cp -rf "$1/dansguardian/dansguardian0/"* "${dg}0"
880
        fi
881
    fi
882
    if [ $(CreoleGet dans_instance_2_active "non") == "oui" ];then
883
        if [ -d "$1/dansguardian/dansguardian1" ];then
884
            cp -rf "$1/dansguardian/dansguardian1/"* "${dg}1"
885
        fi
886
    fi
887

    
888
    ead=/usr/share/ead2/backend/tmp
889
    for f in "filtrage-contenu*" "dest_interdites*.txt" "horaire_ip*.txt"\
890
             "poste_all*.txt" "ipset_group*.txt" "ipset_schedules*.pickle";do
891
        cp -f "$1/ead/"$f $ead 2>/dev/null
892
    done
893

    
894
    if [ ! -f "$1/ead/kill-p2p" ];then
895
        # il est à "on" par défaut sur 2.3
896
        echo "KILLP2P=off" > /var/lib/eole/config/killp2p.conf
897
    fi
898
    cp -f "$1/ead/horaires.txt" /var/lib/eole/config/horaires.txt 2>/dev/null
899
    cp -f "$1/ead/regles.csv" /var/lib/eole/config/regles.csv 2>/dev/null
900

    
901
    squid=$container_path_proxy/etc/squid3
902
    Title "Restauration des personnalisations Squid"
903
    cp -f $1/squid/domaines_nocache_* "$squid" 2>/dev/null
904
    cp -f $1/squid/domaines_noauth_* "$squid" 2>/dev/null
905
    cp -f $1/squid/src_noauth_* "$squid" 2>/dev/null
906
    cp -f $1/squid/src_nocache_* "$squid" 2>/dev/null
907
}
908

    
909
saveenvole(){
910
    # $1 : répertoire de sauvegarde
911
    Title "Sauvegarde des applications web"
912
    mkdir -p $1/html
913
    cp -rpf $container_path_web/var/www/html/ "$1"
914

    
915
    mkdir -p $1/www-data
916
    if [ -d /home/www-data ];then
917
        Title "Sauvegarde des données des applications web"
918
        cp -rpf /home/www-data/ "$1"
919
    fi
920
}
921

    
922
savedivers(){
923
    # $1 : répertoire de sauvegarde
924
    Title "Sauvegarde des autres fichiers"
925
    # sauvegarde des certificats SSL (#2475)
926
    mkdir -p $1/ssl
927
    cp -rf /etc/ssl/* "$1/ssl"
928
    # suppression des liens symbolique
929
    find "$1/ssl" -type l -delete
930
    mkdir -p $1/config
931
    ead_config=/usr/share/ead2/backend/config
932
    [ -f "$ead_config/perm_local.ini" ] && cp -f "$ead_config/perm_local.ini" "$1/config"
933
    [ -f "$ead_config/roles_local.ini" ] && cp -f "$ead_config/roles_local.ini" "$1/config"
934
    ead_tmp=/usr/share/ead2/backend/tmp
935
    eole_config=/var/lib/eole/config
936
    [ -f "$ead_tmp/cron.txt" ] && cp -f "$ead_tmp/cron.txt" "$1/config/cron.txt"
937
    if [ -f "$eole_config/bp_server.conf" ];then
938
        cp -f "$eole_config/bp_server.conf" "$1/config/bp_server.conf"
939
    else
940
        cp -f "$ead_tmp/bp_server.txt" "$1/config/bp_server.conf"
941
    fi
942
    if [ -f /var/www/ead/config/controle ];then
943
        cp -f /var/www/ead/config/controle "$1/config/controlevnc.conf"
944
    else
945
        cp -f "$container_path_fichier/$eole_config/controlevnc.conf" "$1/config/controlevnc.conf" 2>/dev/null
946
    fi
947
    machines="$container_path_fichier/usr/share/eole/controlevnc/machines.db"
948
    [ -f $machines ] && cp -f $machines "$1/config"
949
    [ -d /usr/share/horus/models ] && cp -rf /usr/share/horus/models "$1/config"
950
    [ -f /usr/share/eole/wpkg/wpkg_config.eol ] && cp /usr/share/eole/wpkg/wpkg_config.eol "$1"
951
    cp -f $eole_config/dhcp.conf "$1/config/" 2>/dev/null
952
}
953

    
954
savesso(){
955
    # $1 : répertoire de sauvegarde
956
    sso_dir=/usr/share/sso
957
    if [ -d $sso_dir ];then
958
        Title "Sauvegarde des données du service SSO"
959
        # filtres et fichiers de configuration SSO
960
        backup_dir=$1/sso
961
        mkdir -p $backup_dir
962
        for sso_conf_dir in app_filters attribute_sets external_attrs user_infos metadata interface securid_users
963
        do
964
            [ -d ${sso_dir}/${sso_conf_dir} ] && /bin/cp -rf ${sso_dir}/${sso_conf_dir} $backup_dir
965
        done
966
    fi
967
}
968

    
969
savecreole(){
970
    # $1 : répertoire de sauvegarde
971
    BACKUP_DIR="$1/creolelocal"
972
    Title "Sauvegarde des personnalisations Creole locales (non restauré)"
973
    mkdir -p ${BACKUP_DIR}/distrib
974
    mkdir -p ${BACKUP_DIR}/dicos
975
    mkdir -p ${BACKUP_DIR}/patch
976
    if [ -d /usr/share/eole/creole ];then
977
        CREOLE_DIR="/usr/share/eole/creole"
978
    else
979
        CREOLE_DIR="/etc/eole"
980
    fi
981
    # dictionnaires locaux
982
    /bin/cp -rf $CREOLE_DIR/dicos/local/*.xml ${BACKUP_DIR}/dicos/ >/dev/null 2>&1
983
    # patchs
984
    /bin/cp -rf $CREOLE_DIR/patch/*.patch ${BACKUP_DIR}/patch/ >/dev/null 2>&1
985
    # templates non installés par un paquet (variante et locaux)
986
    for TMPL in `ls $CREOLE_DIR/distrib/*`
987
    do
988
        dpkg -S $TMPL >/dev/null 2>&1
989
        if [ $? -ne 0 ];then
990
            /bin/cp -rf $TMPL ${BACKUP_DIR}/distrib/
991
        fi
992
    done
993
}
994

    
995
restoredivers(){
996
    # $1 : répertoire de sauvegarde
997
    Title "Restauration des autres fichiers"
998
    # restauration des certificats SSL (#2475)
999
    cp -rf "$1"/ssl/* /etc/ssl
1000
    ead_config=/usr/share/ead2/backend/config/
1001
    [ -f "$1/config/perm_local.ini" ] && cp -f "$1/config/perm_local.ini" "$ead_config"
1002
    [ -f "$1/config/roles_local.ini" ] && cp -f "$1/config/roles_local.ini" "$ead_config"
1003
    cp -f "$1/config/bp_server.conf" /var/lib/eole/config 2>/dev/null
1004
    container_path_fichier=$(CreoleGet container_path_fichier /)
1005
    # normalement c'est un lien symbolique sur 2.3
1006
    cp -f "$1/config/controlevnc.conf" "$container_path_fichier/var/lib/eole/config" 2>/dev/null
1007
    cp -f "$1/config/machines.db" "$container_path_fichier/usr/share/eole/controlevnc/machines.db" 2>/dev/null
1008
    if [ -d "$1/config/models" ];then
1009
        rsync -cav --log-file $RSYNC_LOG --ignore-existing "$1/config/models" /usr/share/eole/fichier/models >/dev/null
1010
    fi
1011
    # restauration forcée pour Esu (#2746)
1012
    esufile="/home/esu/Base/ListeGM.xml"
1013
    [ -f "$1$esufile" ] && cp -f "$1$esufile" "$esufile"
1014
    if [ -f "$1/wpkg_config.eol" ];then
1015
        mkdir -p /usr/share/eole/wpkg
1016
        cp -f "$1/wpkg_config.eol" /usr/share/eole/wpkg
1017
    fi
1018
    # désactivation de la maj hebdomadaire
1019
    if [ -f "$1/config/cron.txt" ] && [ $(cat "$1/config/cron.txt" | wc -w) -eq 0 ];then
1020
        /usr/share/eole/schedule/manage_schedule post majauto weekly del >/dev/null
1021
    fi
1022
    cp -f "$1/config/dhcp.conf" /var/lib/eole/config/dhcp.conf 2>/dev/null
1023
}
1024

    
1025
restoresso(){
1026
    # $1 : répertoire de sauvegarde
1027
    sso_dir=/usr/share/sso
1028
    if [ -d $sso_dir ];then
1029
        Title "Restauration des données du service SSO"
1030
        restoresso_dir(){
1031
            # restauration des fichiers d'un répertoire (si non existants)
1032
            src_dir=$1
1033
            dest_dir=$2
1034
            extensions=*
1035
            # traite tout les fichier ou une extension particulière
1036
            [ -z "$3" ] || extensions=*.$3
1037
            mkdir -p ${dest_dir}
1038
            if [ -d $src_dir ];then
1039
                for data_file in `ls -d ${src_dir}/${extensions} 2>/dev/null`;do
1040
                    # on n'écrase pas les fichiers installés par les paquet
1041
                    filename=`basename $data_file`
1042
                    [ -e ${dest_dir}/${filename} ] || /bin/cp -r $data_file $dest_dir/
1043
                done
1044
            fi
1045
        }
1046
        ## répetoires de filtres, attributs calculés, metadata, ..
1047
        backup_dir=$1/sso
1048
        for sso_conf_dir in app_filters attribute_sets external_attrs user_infos metadata securid_users;do
1049
            restoresso_dir ${backup_dir}/${sso_conf_dir} ${sso_dir}/${sso_conf_dir}
1050
        done
1051
        interf_dir=${sso_dir}/interface
1052
        int_backup_dir=$1/sso/interface
1053
        ## presonnalisations de l'interface
1054
        # themes et infos homonymes
1055
        for data_dir in images themes theme/image theme/style info_homonymes;do
1056
            restoresso_dir ${int_backup_dir}/${data_dir} ${interf_dir}/${data_dir}
1057
        done
1058
        # fichiers divers de l'interface (avertissement.txt, fichiers .css et .tmpl)
1059
        restoresso_dir $int_backup_dir $interf_dir "tmpl"
1060
        restoresso_dir $int_backup_dir $interf_dir "css"
1061
        restoresso_dir $int_backup_dir $interf_dir "txt"
1062
    fi
1063
}
1064

    
1065
#scribedivers(){
1066
#    # $1 : répertoire de sauvegarde
1067
#    #Title "Sauvegarde des autres fichiers"
1068
#    mkdir -p $1/config
1069
#    else
1070
#        echo "simple" > $1/config/controlevnc.conf
1071
#    fi
1072
#    # FIXME : posh et applications => c'est mort ?
1073
#}
1074

    
1075
finsauve(){
1076
    echo
1077
    EchoVert "Sauvegarde spéciale terminée"
1078
}
1079

    
1080
finresto(){
1081
    EchoVert "Restauration spéciale terminée"
1082
}
1083

    
1084
scribe22(){
1085
    ## SAUVEGARDE SPECIALE POUR SCRIBE-2.2 ##
1086
    montage $DD
1087
    /etc/init.d/samba stop
1088
    /etc/init.d/nscd start
1089
    DDS="$DD/scribe-$numero_etab"
1090
    /bin/mkdir -p "$DDS"
1091
    saveconfigeol "$DDS"
1092
    savecreole "$DDS"
1093
    questionsave '/home'
1094
    savedata=$?
1095
    [ $savedata -eq 0 ] && savescribedata "$DDS"
1096
    savemail "$DDS"
1097
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1098
    /etc/init.d/slapd restart
1099
    savequota "$DDS"
1100
    [ $savedata -eq 0 ] && savescribeacl "$DDS"
1101
    saveldap "$DDS"
1102
    saveldap2scribe "$DDS"
1103
    savesmb "$DDS"
1104
    savescribemysql "$DDS"
1105
    savebacula22 "$DDS"
1106
    saveenvole "$DDS"
1107
    savesso "$DDS"
1108
    savedivers "$DDS"
1109
    demontage $DD
1110
    /etc/init.d/samba start
1111
    finsauve
1112
}
1113

    
1114
horus22(){
1115
    ## SAUVEGARDE SPECIALE POUR HORUS-2.2 ##
1116
    montage $DD
1117
    /etc/init.d/xinetd stop
1118
    /etc/init.d/samba stop
1119
    /etc/init.d/nscd start
1120
    DDS="$DD/horus-$numero_etab"
1121
    saveconfigeol "$DDS"
1122
    savecreole "$DDS"
1123
    questionsave '/data'
1124
    savedata=$?
1125
    [ $savedata -eq 0 ] && savehorusdata "$DDS"
1126
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1127
    /etc/init.d/slapd restart
1128
    savequota "$DDS"
1129
    [ $savedata -eq 0 ] && savehorusacl "$DDS"
1130
    saveldap "$DDS"
1131
    saveldap2horus "$DDS"
1132
    savesmb "$DDS"
1133
    savehorusmysql "$DDS"
1134
    savebacula22 "$DDS"
1135
    savesso "$DDS"
1136
    savedivers "$DDS"
1137
    demontage $DD
1138
    /etc/init.d/samba start
1139
    [ "$xinet_interbase" != 'non' ] && /etc/init.d/xinetd start
1140
    finsauve
1141
}
1142

    
1143
amon22(){
1144
    ## SAUVEGARDE SPECIALE POUR AMON-2.2 ##
1145
    montage $DD
1146
    DDS="$DD/amon-$numero_etab"
1147
    saveconfigeol "$DDS"
1148
    savecreole "$DDS"
1149
    saveamon "$DDS"
1150
    savesso "$DDS"
1151
    savedivers "$DDS"
1152
    demontage $DD
1153
    finsauve
1154
}
1155

    
1156
scribe23(){
1157
    ## SAUVEGARDE SPECIALE POUR SCRIBE-2.3 et AmonEcole 2.3 ##
1158
    montage $DD
1159
    CreoleService smbd stop
1160
    CreoleService nscd start
1161
    DDS="$DD/scribe-$numero_etab"
1162
    /bin/mkdir -p "$DDS"
1163
    saveconfigeol "$DDS"
1164
    savecreole "$DDS"
1165
    questionsave '/home'
1166
    savedata=$?
1167
    [ $savedata -eq 0 ] && savescribedata "$DDS"
1168
    savemail "$DDS"
1169
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1170
    CreoleService slapd restart
1171
    savequota "$DDS"
1172
    [ $savedata -eq 0 ] && savescribeacl "$DDS"
1173
    saveldap "$DDS"
1174
    saveldap2scribe "$DDS"
1175
    savesmb "$DDS"
1176
    savescribemysql "$DDS"
1177
    savebacula23 "$DDS"
1178
    saveenvole "$DDS"
1179
    [ "$1" = "amonecole" ] && saveamon "$DDS"
1180
    savesso "$DDS"
1181
    savedivers "$DDS"
1182
    demontage $DD
1183
    CreoleService smbd start
1184
    finsauve
1185
}
1186

    
1187
horus23(){
1188
    ## SAUVEGARDE SPECIALE POUR HORUS-2.3 ##
1189
    montage $DD
1190
    CreoleService xinetd stop
1191
    CreoleService smbd stop
1192
    CreoleService nscd start
1193
    DDS="$DD/horus-$numero_etab"
1194
    saveconfigeol "$DDS"
1195
    savecreole "$DDS"
1196
    questionsave '/data'
1197
    savedata=$?
1198
    [ $savedata -eq 0 ] && savehorusdata "$DDS"
1199
    # la sauvegarde des quotas et des acl se base sur pam/ldap
1200
    CreoleService slapd restart
1201
    savequota "$DDS"
1202
    [ $savedata -eq 0 ] && savehorusacl "$DDS"
1203
    saveldap "$DDS"
1204
    #saveldap2horus "$DDS"
1205
    savesmb "$DDS"
1206
    savehorusmysql "$DDS"
1207
    savebacula23 "$DDS"
1208
    savesso "$DDS"
1209
    savedivers "$DDS"
1210
    demontage $DD
1211
    CreoleService smbd start
1212
    [ "$activer_interbase" != 'non' ] && CreoleService xinetd start
1213
    finsauve
1214
}
1215

    
1216
amon23(){
1217
    ## SAUVEGARDE SPECIALE POUR AMON-2.3 ##
1218
    montage $DD
1219
    DDS="$DD/amon-$numero_etab"
1220
    saveconfigeol "$DDS"
1221
    savecreole "$DDS"
1222
    saveamon "$DDS"
1223
    savesso "$DDS"
1224
    savedivers "$DDS"
1225
    demontage $DD
1226
    finsauve
1227
}
1228

    
1229
scribe24(){
1230
    ## RESTAURATION SPECIALE POUR SCRIBE-2.4 et AmonEcole 2.4 ##
1231
    Alerte
1232
    montage $DD
1233
    DDS="$DD/scribe-$numero_etab"
1234
    testf "$DDS"
1235
    CreoleService smbd stop -c fichier
1236
    CreoleService nmbd stop -c fichier
1237
    restoreldap "$DDS"
1238
    restoreldap2scribe "$DDS"
1239
    restoresmb "$DDS"
1240
    restorescribedata "$DDS"
1241
    restoremail "$DDS"
1242
    restorequota "$DDS"
1243
    restoreacl "$DDS"
1244
    restorescribemysql "$DDS"
1245
    restorebacula "$DDS"
1246
    [ "$1" = "amonecole" ] && restoreamon "$DDS"
1247
    restoresso "$DDS"
1248
    restoredivers "$DDS"
1249
    demontage $DD
1250
    CreoleService smbd start -c fichier
1251
    CreoleService nmbd start -c fichier
1252
}
1253

    
1254
horus24(){
1255
    ## RESTAURATION SPECIALE POUR HORUS-2.4 ##
1256
    Alerte
1257
    montage $DD
1258
    DDS="$DD/horus-$numero_etab"
1259
    testf "$DDS"
1260
    CreoleService smbd stop -c fichier
1261
    CreoleService nmbd stop -c fichier
1262
    CreoleService xinetd stop -c interbase
1263
    restoreldap "$DDS"
1264
    restoreldap2horus "$DDS"
1265
    restoresmb "$DDS"
1266
    restorehorusdata "$DDS"
1267
    restorequota "$DDS"
1268
    restoreacl "$DDS"
1269
    restorehorusmysql "$DDS"
1270
    restorebacula "$DDS"
1271
    restoresso "$DDS"
1272
    restoredivers "$DDS"
1273
    demontage $DD
1274
    CreoleService smbd start -c fichier
1275
    CreoleService nmbd start -c fichier
1276
    [ $(CreoleGet activer_interbase) != 'non' ] && CreoleService xinetd start -c interbase
1277
}
1278

    
1279
amon24(){
1280
    ## RESTAURATION SPECIALE POUR AMON-2.4 ##
1281
    Alerte2
1282
    montage $DD
1283
    DDS="$DD/amon-$numero_etab"
1284
    testf "$DDS"
1285
    restoreamon "$DDS"
1286
    restoresso "$DDS"
1287
    restoredivers "$DDS"
1288
    demontage $DD
1289
}
1290

    
1291
savezephir(){
1292
    enregistrement_zephir --check > /dev/null
1293
    if [ $? -eq 0 ];then
1294
        Title "Sauvegarde des données locales sur Zéphir"
1295
        /usr/share/zephir/scripts/zephir_client save_files
1296
    fi
1297
}
1298

    
1299
# Sauvegarde
1300
if [ -f /etc/eole/version ]
1301
then
1302
    version=`cat /etc/eole/version`
1303
    if [ "$version" = "scribe-2.2" ];then
1304
        clear
1305
        Version
1306
        EchoVert "Sauvegarde du module $version"
1307
        scribe22
1308
    elif [ "$version" = "horus-2.2" ];then
1309
        clear
1310
        Version
1311
        EchoVert "Sauvegarde du module $version"
1312
        horus22
1313
    elif [ "$version" = "amon-2.2" -o "$version" = "amonecole-2.2" ];then
1314
        clear
1315
        Version
1316
        EchoVert "Sauvegarde du module $version"
1317
        amon22
1318
    else
1319
        Version
1320
        EchoRouge "Détection du module 2.2 impossible !"
1321
        exit 1
1322
    fi
1323
elif [ -f /etc/eole/release ]
1324
then
1325
    . /etc/eole/release
1326
    version="$EOLE_MODULE-$EOLE_VERSION"
1327
    if [ $EOLE_VERSION == '2.3' ];then
1328
        # Question => Question_ouinon
1329
        Question() {
1330
             Question_ouinon "$1"
1331
        }
1332
        if [ "$version" = "scribe-2.3" ];then
1333
            clear
1334
            Version
1335
            EchoVert "Sauvegarde du module $version"
1336
            scribe23
1337
        elif [ "$version" = "horus-2.3" ];then
1338
            clear
1339
            Version
1340
            EchoVert "Sauvegarde du module $version"
1341
            horus23
1342
        elif [ "$version" = "amon-2.3" ];then
1343
            clear
1344
            Version
1345
            EchoVert "Sauvegarde du module $version"
1346
            amon23
1347
        elif [ "$version" = "amonecole-2.3" ];then
1348
            clear
1349
            Version
1350
            EchoVert "Restauration du module $version"
1351
            scribe23 "amonecole"
1352
        else
1353
            Version
1354
            EchoRouge "Détection du module 2.3 impossible !"
1355
            exit 1
1356
        fi
1357
    elif [ $EOLE_VERSION == '2.4' ];then
1358
        if [ "$version" = "scribe-2.4" ];then
1359
            clear
1360
            Version
1361
            EchoVert "Restauration du module $version"
1362
            scribe24
1363
        elif [ "$version" = "horus-2.4" ];then
1364
            clear
1365
            Version
1366
            EchoVert "Restauration du module $version"
1367
            horus24
1368
        elif [ "$version" = "amon-2.4" ];then
1369
            clear
1370
            Version
1371
            EchoVert "Restauration du module $version"
1372
            amon24
1373
        elif [ "$version" = "amonecole-2.4" ];then
1374
            clear
1375
            Version
1376
            EchoVert "Restauration du module $version"
1377
            scribe24 "amonecole"
1378
        else
1379
            Version
1380
            EchoRouge "Détection du module 2.4 impossible !"
1381
            exit 1
1382
        fi
1383
        savezephir
1384
        echo
1385
        finresto
1386
    else
1387
        Version
1388
        EchoRouge "Détection du module impossible !"
1389
        exit 1
1390
    fi
1391
else
1392
    Version
1393
    EchoRouge "Détection du module impossible !"
1394
    exit 1
1395
fi
1396
echo
1397

    
1398
echo "----- FIN -----"
1399
) | tee -a /var/log/migration24.log
1400
exit 0