Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 28

Florent Torregrosa, 04/08/2013 18:02
code d7-all-releases-info.sh après test

1 1 Julien Enselme
Afin de gagner du temps et d'éviter les erreurs humaines, des scripts ont été écrits tout au long du projet. Certains sont même exécutés automatiquement toutes les semaines.
2
3 13 Florent Torregrosa
{{>toc}}
4 1 Julien Enselme
5
h1. Les tâches planifiées
6
7 26 Florent Torregrosa
h2. Crontab
8
9 3 Julien Enselme
Pour exécuter ces tâches régulièrement, on utilise le "crontab":http://fr.wikipedia.org/wiki/Crontab. Il s'agit d'un programme installé sur notre serveur.
10 1 Julien Enselme
11 3 Julien Enselme
Pour voir et modifier la liste des actions :
12
# se connecter au serveur : <code>ssh assos@sas1.centrale-marseille</code>
13
# taper la commande pour voir le crontab <code>crontab -l</code>
14
# taper la commande pour modifier le crontab <code>crontab -e</code>. /!\ Ne pas effectuer cette opération avant de s'être renseigné sur "vi":http://fr.wikipedia.org/wiki/Vi (l'éditeur de texte utilisé qui n'est pas vraiment intuitif :p) et sur "la syntaxe du crontab":http://fr.wikipedia.org/wiki/Crontab#Modification !
15
16 24 Florent Torregrosa
{{tip(Pour utiliser un autre editeur que vi taper : export EDITOR=editor_name exemple : vim, nano)}}
17 26 Florent Torregrosa
18
<pre>
19
<code class="php">
20
Ici bientôt le crontab
21
</code>
22
</pre>
23
24 1 Julien Enselme
Voici la liste des tâches effectuées régulièrement.
25
26 25 Florent Torregrosa
h2. La réinitialisation des variables
27 1 Julien Enselme
28 25 Florent Torregrosa
Cette tâche consiste à réinitialiser certaines variables qui donnent des droits considérés comme trop permissifs donc dangereux aux administrateurs des sites ou nécessaire pour d'autres scripts tels que piwik ou security_review.
29 3 Julien Enselme
30 25 Florent Torregrosa
En voici quelques exemples :
31
32 1 Julien Enselme
<pre>
33
<code class="bash">
34 25 Florent Torregrosa
drush -y vset error_level 0
35 1 Julien Enselme
</code>
36
</pre>
37
38 25 Florent Torregrosa
Cette commande permet de ne pas afficher les messages d'erreurs. En effet, ils contiennent parfois des informations sensibles sur l'installation et ne doivent donc pas être divulgués à n'importe qui.
39
40 1 Julien Enselme
<pre>
41 21 Florent Torregrosa
<code class="php">
42 25 Florent Torregrosa
drush -y vset --always-set reverse_proxy TRUE
43
drush -y vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
44 3 Julien Enselme
</code>
45 1 Julien Enselme
</pre>
46
47 25 Florent Torregrosa
Ces commandes permettent de déclarer à Drupal les serveurs proxy du CRI afin d'éviter qu'il ne répertorie tous les visiteurs comme ayant l'adresse des serveurs sus-cités. **Pas fini : voir http://assos.centrale-marseille.fr/content/t%C3%A2che/d%C3%A9clarer-les-proxy-du-cri-%C3%A0-drupal**
48 1 Julien Enselme
49 3 Julien Enselme
h2. La sauvegarde des bases de données
50 1 Julien Enselme
51 3 Julien Enselme
Sur les installations d6 et d7 : une fois par semaine
52 1 Julien Enselme
53 6 Julien Enselme
On utilise les [[Scripts_et_taches_planifiees#Tout-sauvegarder|scripts de sauvegarde créés par le club Drupal]].
54 1 Julien Enselme
55 3 Julien Enselme
h2. La purge des sauvegardes de bdd
56 1 Julien Enselme
57 3 Julien Enselme
Sur les installations d6 et d7 : toutes les semaines
58 1 Julien Enselme
59 3 Julien Enselme
Cette tâche utilise le script de [[Scripts_et_taches_planifiees#purge_des_sauvegardes.sh|purge des sauvegardes]] afin de libérer de l'espace disque en supprimant les sauvegardes de bdd les plus vieilles.
60 1 Julien Enselme
61
h1. Liste des scripts à disposition
62
63
Les scripts utilisés sont hébergés dans le répertoire bin du compte assos.
64
65
h2. all-reset-permissions.sh
66 21 Florent Torregrosa
67
<pre>
68
<code class="php">
69
#!/bin/sh
70
71
. scripts-config.sh
72
73
# This script puts the correct permissions to sites folders, settings.php and scripts.
74
75
######### drupal 6
76
for dir in `find $d6_dir_sites -type d -maxdepth 1 -mindepth 1 ! -name all ! -name images ! -name languages` ; do
77
    chmod 755 $dir
78
    chmod 400 $dir/settings.php
79
done
80
81
######### drupal 7
82
for dir in `find $d7_dir_sites -type d -maxdepth 1 -mindepth 1 ! -name all` ; do
83
    chmod 755 $dir
84
    chmod 400 $dir/settings.php
85
done
86
87
####### bin
88
chmod -R 700 $dir_scripts
89
</code>
90
</pre>
91
92 1 Julien Enselme
h2. contrib-usage.sh
93 21 Florent Torregrosa
94
<pre>
95
<code class="php">
96
#!/bin/sh
97
98
. scripts-config.sh
99
. scripts-utils.sh
100
101
# ARGS: Drupal_version, project_status, project_name
102
# List sites that have the project_name with the corresponding project_status.
103
104
check_arguments $# 3
105
106
if [ $1 = d6 ] ; then
107
    cd $d6_dir_sites
108
else
109
    cd $d7_dir_sites
110
fi
111
112
for dir in `find . -maxdepth 1 -mindepth 1 -type d ! -name all ! -name languages ! -name images` ; do
113
    # List non-core projects that correspond to the status.
114
    # Keep project_name if listed.
115
    # Count line result. 0 if not listed or 1 if listed.
116
	# Print site_dir if listed.
117
118
    cd $dir;
119
	if [ 1 -eq `drush pml --no-core --status=$2 | grep $3 | wc -l` ] ; then
120
        echo $dir; 
121
    fi
122
done
123
</code>
124
</pre>
125
126 1 Julien Enselme
h2. d6-all-drush.sh
127 21 Florent Torregrosa
128
<pre>
129
<code class="php">
130
#!/bin/sh
131
132
. scripts-config.sh
133
. scripts-utils.sh
134
135
# ARGS: drush_command
136
137
check_arguments $# 1
138
139
for dir in `find $d6_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all ! -name languages ! -name images` ; do
140
    cd $dir
141
    echo $dir
142
    drush $*
143
done
144
</code>
145
</pre>
146
147 1 Julien Enselme
h2. d6-all-dump-full.sh
148 21 Florent Torregrosa
149
<pre>
150
<code class="php">
151
#!/bin/sh
152
153
. scripts-config.sh
154
155
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
156
157
# Dump D6 database with webassos user.
158
mysqldump --single-transaction webassos -h myweb.serv.int -u webassos --password=HBVH2ljgyZCA0AP251DY > $d6_dir_full_backup/webassos/$current_date.webassos.sql
159
160
# Dump D6 form database with forum user.
161
mysqldump forum -h myweb.serv.int -u forum --password=dtcAltF12 > $d6_dir_full_backup/forum/$current_date.forum.sql
162
</code>
163
</pre>
164
165 1 Julien Enselme
h2. d6-all-update-contrib.sh
166 21 Florent Torregrosa
167
<pre>
168
<code class="php">
169
#!/bin/sh
170
171
. scripts-config.sh
172
173
d6-all-drush.sh -y en update
174
# Launch cron to check for updates.
175
d6-all-drush.sh -q cron
176
177
d6-all-drush.sh cc all
178
d6-all-dump-full.sh
179
180
d6-all-drush.sh -y upc --no-core
181
d6-all-drush.sh -y updb
182
183
d6-all-drush.sh -y dis update
184
185
# Cron report.
186
d6-all-drush.sh cron
187
</code>
188
</pre>
189
190 1 Julien Enselme
h2. d6-dump-individual.sh
191 21 Florent Torregrosa
192
<pre>
193
<code class="php">
194
#!/bin/sh
195
196
. scripts-config.sh
197
198
# ARGS: auto or manual, site_prefix
199
# WARNING : backup are regularly flushed, put your backup in a safe place.
200
201
cd $dir_individual_backup
202
203
#récupération des tables du site dans le fichier liste_tables.temp
204
tables='_%'
205
liste="$1$tables"
206
207
mysql -h myweb.serv.int -u webassos --password=HBVH2ljgyZCA0AP251DY -BNe "show tables like '"$liste"'" webassos | tr '\r\n' ' ' > liste_tables.temp
208
209
#transformation de cette liste en une variable
210
var=$(cat liste_tables.temp)
211
212
#sauvegarde de toutes ces tables
213
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
214
suffixe="_dump$current_date.sql"
215
fichier="$1$suffixe"
216
217
if [ $1 = 'auto' ] ; then
218
        mysqldump webassos -h myweb.serv.int -u webassos --password=HBVH2ljgyZCA0AP251DY $var > $d6_dir_individual_auto_backup/$fichier
219
    else
220
        mysqldump webassos -h myweb.serv.int -u webassos --password=HBVH2ljgyZCA0AP251DY $var > $d6_dir_individual_manual_backup/$fichier
221
    fi
222
223
#suppression du fichier temporaire utilisé
224
rm liste_tables.temp
225
</code>
226
</pre>
227
228 1 Julien Enselme
h2. d6-reset-variables.sh
229 21 Florent Torregrosa
230
<pre>
231
<code class="php">
232
#!/bin/sh
233
234
. scripts-config.sh
235
236
cd $d6_dir_sites
237
d6-all-drush.sh vset --always-set reverse_proxy TRUE
238
d6-all-drush.sh vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
239
drush @sites ev "variable_set('update_notify_emails', array($email_multi_assos));" --yes
240
</code>
241
</pre>
242
243 1 Julien Enselme
h2. d7-all-drush-logged.sh
244 21 Florent Torregrosa
245
<pre>
246
<code class="php">
247
#!/bin/sh
248
249
. scripts-config.sh
250
. scripts-utils.sh
251
252
# ARGS: drush_command
253
254
check_arguments $# 1
255
256
for dir in `find $d7_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all` ; do
257
    cd $dir
258
    current_date=`date "+%Y-%m-%d_%Hh:%Mm"`
259
    echo "======$current_date======" >> $d7_dir_log/$x.log
260
    echo "Arguments are: $* " >> $d7_dir_log/$x.log
261
    drush $* >> $d7_dir_log/$x.log
262
    #To have the same caracters limit we needed 'end' that have 4 caracters, we used the Croate language for this ! LOL 
263
    echo -e "=============KRAJ=============\n" >> $d7_dir_log/$x.log
264
done
265
</code>
266
</pre>
267
268 1 Julien Enselme
h2. d7-all-drush.sh
269 21 Florent Torregrosa
270
<pre>
271
<code class="php">
272
#!/bin/sh
273
274
. scripts-config.sh
275
. scripts-utils.sh
276
277
# ARGS: drush_command
278
279
check_arguments $# 1
280
281
for dir in `find $d7_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all` ; do
282
    cd $dir
283
    echo $dir
284
    drush $*
285
done
286
</code>
287
</pre>
288
289 1 Julien Enselme
h2. d7-all-dump-full.sh
290 21 Florent Torregrosa
291
<pre>
292
<code class="php">
293
#!/bin/sh
294
295
. scripts-config.sh
296
297
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
298
299
# Dump D7 databases at once.
300
mysqldump -h $db_server -u $db_user -pNoNo82jJ --all-databases > $d7_dir_full_backup/myassos/$current_date.d7_full.sql
301
</code>
302
</pre>
303
304 1 Julien Enselme
h2. d7-all-dump-individual.sh
305 21 Florent Torregrosa
306
<pre>
307
<code class="php">
308
#!/bin/sh
309
310
. scripts-config.sh
311
312
# ARGS: auto or manual
313
314
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
315
316
for dir in `find $d7_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all` ; do
317
    cd $dir
318
    drush cc all
319
    if [ $1 = 'auto' ] ; then
320
        drush sql-dump --result-file="$d7_dir_individual_auto_backup/$dir/$current_date.$dir.sql"
321
    else
322
        drush sql-dump --result-file="$d7_dir_individual_manual_backup/$dir/$current_date.$dir.sql"
323
    fi
324
done
325
</code>
326
</pre>
327
328 1 Julien Enselme
h2. d7-all-releases-info.sh
329 21 Florent Torregrosa
330
<pre>
331
<code class="php">
332
#!/bin/sh
333
334
. scripts-config.sh
335
336
# List version of a module or theme that exists in sites/all/*
337
# and all versions that are available for same project on drupal.org
338
339
# modules
340 28 Florent Torregrosa
cd $d7_dir_sites/all/modules
341
for dir in `ls -1` ; do
342
    if [ -d $dir ] ; then
343
        drush pm-releases $dir
344
    fi
345 1 Julien Enselme
done
346
347
# themes
348 28 Florent Torregrosa
cd $d7_dir_sites/all/themes
349
for dir in `ls -1` ; do
350
    if [ -d $dir ] ; then
351
        drush pm-releases $dir
352
    fi
353 21 Florent Torregrosa
done
354
</code>
355
</pre>
356
357 1 Julien Enselme
h2. d7-all-reset-variables.sh
358 21 Florent Torregrosa
359
<pre>
360
<code class="php">
361
#!/bin/sh
362
363
. scripts-config.sh
364
365
for dir in `find $d7_dir_sites -maxdepth 1 -mindepth 1 -type d ! -name all` ; do
366
    cd $dir
367
    echo $dir
368
    d7-reset-variables.sh
369
done
370
</code>
371
</pre>
372
373 1 Julien Enselme
h2. d7-all-security-review.sh
374 21 Florent Torregrosa
375
<pre>
376
<code class="php">
377
#!/bin/sh
378
379
. scripts-config.sh
380
381
# grep -v success to keep site_name and error lines.
382
bash -c 'd7-all-drush.sh security-review |& grep -v success | mail -s "Security review" $email_multi_assos'
383
</code>
384
</pre>
385
386 1 Julien Enselme
h2. d7-all-update-contrib.sh
387 21 Florent Torregrosa
388
<pre>
389
<code class="php">
390
#!/bin/sh
391
392
. scripts-config.sh
393
394
d7-all-drush.sh -y en update
395
# Launch cron to check for updates.
396
d7-all-drush.sh -q cron
397
398
d7-all-drush.sh cc all
399
d7-all-dump-individual.sh
400
401
d7-all-drush-logged.sh -y upc --no-core
402
d7-all-drush.sh -y updb
403
404
d7-all-drush.sh -y dis update
405
406
# Cron report.
407
d7-all-drush.sh cron | mail -s "Cron report: d7-all-update-contrib.sh" $email_multi_assos
408
</code>
409
</pre>
410
411 1 Julien Enselme
h2. d7-all-update-localisation.sh
412 21 Florent Torregrosa
413
<pre>
414
<code class="php">
415
#!/bin/sh
416
417
. scripts-config.sh
418
419
d7-all-drush.sh -y en l10n_update
420
d7-all-drush.sh l10n-update-refresh
421
d7-all-drush.sh l10n-update
422
d7-all-drush.sh -y dis l10n_update
423
</code>
424
</pre>
425
426 1 Julien Enselme
h2. d7-create-site.sh
427 21 Florent Torregrosa
428
<pre>
429
<code class="php">
430
#!/bin/sh
431
432
. scripts-config.sh
433
. scripts-config-site.sh $1
434
. scripts-utils.sh
435
436
# ARGS: site name
437
438
######## Exceptions
439
check_arguments $# 1
440
441
# "-" is forbidden because it provokes database error.
442
if `echo $1 | grep -` ; then
443
    echo '"-" is forbidden in the site name'
444
    exit 1
445
fi
446
447
# Site name length must be lower or equal to 16 due to database limitations.
448
if [ $(echo $1 | wc -n) -le 16 ] ; then
449
    echo "site name can't have more than 16 characters"
450
    exit 1
451
fi
452
453
###### Initialisation
454
cd $d7_dir
455
db_password=`ask_password_db $db_server $db_user`
456
site_password=`gen_password`
457
458
# Check if site database already exists.
459
if mysql -h $db_server -u $db_user -e "USE $d7_site_name" -p$db_password 2>/dev/null ; then
460
    echo "Database $d7_site_name already exists"
461
    exit 1
462
fi
463
464
# Check if site folder already exists.
465
if [ -d $d7_site_dir ] ; then
466
    echo "Folder $d7_site_dir already exists"
467
    exit 1
468
fi
469
470
###### Main
471
mkdir $d7_site_dir
472
473
# Backup requirements
474
mkdir $d7_dir_individual_auto_backup/$d7_site_name
475
mkdir $d7_dir_individual_manual_backup/$d7_site_name
476
current_date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
477
478
touch $d7_dir_individual_auto_backup/$d7_site_name/$current_date.sql
479
touch $d7_dir_individual_auto_backup/$d7_site_name/$current_date.sql
480
touch $d7_dir_individual_auto_backup/$d7_site_name/$current_date.sql
481
482
# Create and grant privileges on database
483
mysql -h $db_server -u $db_user -e "CREATE DATABASE $d7_site_name" -p$db_password
484
mysql -h $db_server -u $db_user -e "GRANT ALL PRIVILEGES ON $d7_site_name.* TO '$d7_site_name'@'%' IDENTIFIED BY '$site_password'" -p$db_password
485
486
# Create settings.php
487
sed "s/\%\%DBUSER\%\%/$d7_site_name/ ; s/\%\%DBNAME\%\%/$d7_site_name/ ; s/\%\%DBPASS\%\%/$site_password/ ; s/\%\%nomsite\%\%/$d7_site_name/" < $d7_settings_template > $d7_site_settings
488
489
# Create symbolic link
490
cd $d7_dir
491
ln -s . $d7_site_name
492
493
# Next Instructions
494
echo "Go to http://assos.centrale-marseille.fr/$d7_site_name/install.php to continue."
495
echo "Press enter when ready to go on."
496
read key
497
498
# Init variables
499
d7-reset-variables.sh $d7_site_name
500
501
# Permissions
502
chmod -R 755 $d7_site_dir
503
chmod 400 $d7_site_settings
504
505
# Last instructions
506
echo "Last instructions:"
507
echo "- Advice the webmaster to close account creation on the website"
508
echo "- Give the webmaster a link to the club Drupal's tutorials "
509
echo "- Create a node of type \"Site\" on default"
510
echo "- Register the webmaster on webmasters@listes.centrale-marseille.fr"
511
</code>
512
</pre>
513
514 1 Julien Enselme
h2. d7-delete-site.sh
515 21 Florent Torregrosa
516
<pre>
517
<code class="php">
518
#!/bin/sh
519
520
. scripts-config.sh
521
. scripts-config-site.sh $1
522
. scripts-utils.sh
523
524
# ARGS: site name.
525
526
check_arguments $# 1
527
528
db_password=`ask_password_db $db_server $db_user`
529
530
# Delete database.
531
mysql -h $db_server -u $db_user -p$db_password -e "IF EXISTS DROP DATABASE $d7_site_name"
532
533
# Delete MYSQL user.
534
mysql -h $db_server -u $db_user -p$db_password -e "DROP USER '$d7_site_name'@'%'"
535
536
# Delete site's folder.
537
chmod -R 700 $d7_site_dir
538
rm -r $d7_site_dir
539
540
# Delete symbolic link.
541
rm $d7_dir/$d7_site_name
542
543
# Delete database backups.
544
rm -r $d7_dir_individual_auto_backup/assos.centrale-marseille.fr.$d7_site_name
545
rm -r $d7_dir_individual_manual_backup/assos.centrale-marseille.fr.$d7_site_name
546
547
echo "Don't forget to:"
548
echo "- Refresh node site on default"
549
echo "- Check particular behavior (normally detailed on site node)"
550
</code>
551
</pre>
552
553 1 Julien Enselme
h2. d7-reset-variables.sh
554 21 Florent Torregrosa
555
<pre>
556
<code class="php">
557
#!/bin/sh
558
559
. scripts-config.sh
560
561
# ARGS: [site_name]
562
563
if [ ! -z $1 ] ; then
564
    . scripts-config-site.sh $1
565
    cd $d7_site_dir
566
fi
567
568
current_timestamp=`date "+%s"`
569
570
####### General variables
571
drush -y vset --always-set reverse_proxy TRUE
572
drush -y vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
573
drush -y ev "variable_set('update_notify_emails', array($email_multi_assos));"
574
drush -y vset error_level 0
575
576
###### Hidden captcha
577
drush -y en hidden_captcha
578
# Log wrong answers.
579
drush -y vset captcha_log_wrong_responses 1
580
# Use hidden captcha for all forms.
581
drush -y sqlq --db-prefix "UPDATE {captcha_points} SET module = 'hidden_captcha', captcha_type = 'Hidden CAPTCHA' WHERE module is NULL;"
582
# Flush captcha cache.
583
drush -y vdel captcha_placement_map_cache
584
# Randomely generate a math question as the label of the hidden captcha field.
585
drush -y vset hidden_captcha_label "$RANDOM + $RANDOM"
586
587
588
####### Piwik
589
drush -y en piwik
590
drush -y vset piwik_site_id "101"
591
drush -y vset piwik_url_http "http://piwik.centrale-marseille.fr/"
592
drush -y vset piwik_url_https "https://piwik.centrale-marseille.fr/"
593
# Piwik cache.
594
drush -y vset piwik_cache 1
595
drush -y vset piwik_visibility_roles "1"
596
# Anonymous and authenticated statistics.
597
drush -y vset --format=json piwik_roles '{"1":0,"2":0}'
598
drush -y vset piwik_page_title_hierarchy 1
599
# Activate local search.
600
drush -y vset piwik_site_search 1
601
602
603
###### Security review
604
# For untrusted roles:
605
# 1 : anonymous user
606
# 2 : authenticated user
607
# 3 : administrator
608
drush -y en security_review
609
drush -y ev "variable_set('security_review_untrusted_roles', array('1'));"
610
# Security review can't check for files permissions on multi_assos.
611
drush -y sqlq --db-prefix "UPDATE {security_review} SET skip = '1', skiptime = $current_timestamp, skipuid= '1' WHERE reviewcheck IN ('file_perms');"
612
drush -y sqlq --db-prefix "UPDATE {security_review} SET skip = '0', skiptime = 0, skipuid= NULL WHERE reviewcheck NOT IN ('file_perms');"
613
</code>
614
</pre>
615
616 1 Julien Enselme
h2. delete-temporary-files.sh
617 21 Florent Torregrosa
618
<pre>
619
<code class="php">
620
#!/bin/sh
621
622
. scripts-config.sh
623
624
find $dir_multi_assos -name '*~' -delete
625
</code>
626
</pre>
627
628 1 Julien Enselme
h2. disk-usage.sh
629 21 Florent Torregrosa
630
<pre>
631
<code class="php">
632
#!/bin/sh
633
634
. scripts-config.sh
635
636
echo -e "Quotas: 9.1 GB\n"
637
638
echo "Assos:"
639
du -hcs $dir_multi_assos | grep total
640
echo -e "\n"
641
642
echo "D6:"
643
cd $d6_dir_sites
644
du -h -d 1
645
echo -e "\n"
646
647
echo "D7:"
648
cd $d7_dir_sites
649
du -h -d 1
650
echo -e "\n"
651
652
echo "Logs:"
653
du -hcs $dir_log | grep total
654
echo -e "\n"
655
656
echo "Backups:"
657
cd $dir_backup
658
du -h -d 2
659
</code>
660
</pre>
661
662 1 Julien Enselme
h2. flush-files.sh
663 21 Florent Torregrosa
664
<pre>
665
<code class="php">
666
#!/bin/sh
667
668
# ARGS: number of files to keep, email address
669
# usage: flush files from a folder except a number equal to argument.
670
671
# Check if scripts-config.sh is imported.
672
if [ -z $scripts_utils ] ; then
673
    echo "Import of scripts-utils.sh required."
674
    exit 1
675
fi
676
677
check_arguments $# 2
678
679
backups_number=`ls | wc -l`
680
let "number_of_backups_to_delete = backups_number - $1"
681
682
if [ $number_of_backups_to_delete -gt 0 ] ; then
683
    ls | head -$number_of_backups_to_delete | xargs rm
684
else
685
    dir=`pwd`
686
    echo "There are not enough files in $dir to Flush it. Check if backup script works fine." | mail -s "[db] $dir has a backup problem" $2
687
fi
688
</code>
689
</pre>
690
691 1 Julien Enselme
h2. flush-full-databases-backups.sh
692 21 Florent Torregrosa
693
<pre>
694
<code class="php">
695
#!/bin/sh
696
697
. scripts-config.sh
698
699
# ARGS: Drupal version
700
701
cd $dir_full_backup/$1
702
703
for dir in `ls` ; do
704
    cd $dir
705
    flush-files.sh $db_full_backup_number $email_multi_assos
706
done
707
</code>
708
</pre>
709
710 1 Julien Enselme
h2. flush-individual-databases-backups.sh
711 21 Florent Torregrosa
712
<pre>
713
<code class="php">
714
#!/bin/sh
715
716
. scripts-config.sh
717
718
# ARGS: manual or auto, Drupal version
719
720
cd $dir_individual_backup/$1/$2
721
722
for dir in `ls` ; do
723
    cd $dir
724
    if [ $1 = 'auto' ] ; then
725
        flush-files.sh $db_individual_auto_backup_number $email_multi_assos
726
    else
727
        flush-files.sh $db_individual_manual_backup_number $email_multi_assos
728
    fi
729
done
730
</code>
731
</pre>
732
733 1 Julien Enselme
h2. scripts-config-site.sh
734 21 Florent Torregrosa
735
<pre>
736
<code class="php">
737
#!/bin/sh
738
739
# Sets useful variables of a site.
740
# ARGS: site_name
741
# Requires scripts-config.sh
742
743
# Check if scripts-config.sh is imported.
744
if [ -z $scripts_config ] ; then
745
    echo "Import of scripts-config.sh required."
746
    exit 1
747
fi
748
749
if [ -z $1 ] ; then
750
    echo "This script needs a site name as argument."
751
    exit 1
752
fi
753
754
scripts_config_site='imported'
755
756
d7_site_name=$1
757
d7_site_dir="$d7_dir_sites/assos.centrale-marseille.fr.$d7_site_name"
758
d7_site_settings="$d7_site_dir/settings.php"
759
</code>
760
</pre>
761
762 1 Julien Enselme
h2. scripts-config.sh
763 21 Florent Torregrosa
764
<pre>
765
<code class="php">
766
#!/bin/sh
767
768
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/users/guest/assos/bin
769
PATH=$PATH:/usr/guest/assos/bin
770
771
scripts_config='imported'
772
773
email_multi_assos="assos@centrale-marseille.fr"
774
775
dir_multi_assos='/users/guest/assos'
776
dir_scripts="$dir_multi_assos/bin"
777
dir_template="$dir_multi_assos/Desktop"
778
779
###### Database
780
db_server="myassos.serv.int"
781
db_user="assos"
782
dir_log="$dir_multi_assos/log"
783
784
###### Backup
785
db_full_backup_number=3
786
db_individual_manual_backup_number=3
787
db_individual_auto_backup_number=3
788
789
dir_backup="$dir_multi_assos/backup"
790
dir_full_backup="$dir_backup/full"
791
dir_individual_backup="$dir_backup/individual"
792
dir_individual_manual_backup="$dir_individual_backup/manual"
793
dir_individual_auto_backup="$dir_individual_backup/auto"
794
795
796
###### D7 variables
797
d7_dir="$dir_multi_assos/htmltest"
798
d7_dir_sites="$d7_dir/sites"
799
800
### Log
801
d7_dir_log="$dir_log/d7"
802
803
### Backup
804
d7_dir_full_backup="$dir_full_backup/d7"
805
d7_dir_individual_manual_backup="$dir_individual_manual_backup/d7"
806
d7_dir_individual_auto_backup="$dir_individual_auto_backup/d7"
807
808
### Template
809
d7_settings_template_name="settings-D7-bddinde-template.php"
810
d7_settings_template="$dir_template/$d7_settings_template_name"
811
812
813
###### D6 variables
814
d6_dir="$dir_multi_assos/html"
815
d6_dir_sites="$d6_dir/sites"
816
817
### Backup
818
d6_dir_full_backup="$dir_full_backup/d6"
819
d6_dir_individual_manual_backup="$dir_individual_manual_backup/d6"
820
d6_dir_individual_auto_backup="$dir_individual_auto_backup/d6"
821
</code>
822
</pre>
823
824 1 Julien Enselme
h2. scripts-utils.sh
825 21 Florent Torregrosa
826
<pre>
827
<code class="php">
828
#!/bin/sh
829
830
# This script contains useful functions for other scripts.
831
832
# Check if scripts-config.sh is imported.
833
if [ -z $scripts_config ] ; then
834
    echo "Import of scripts-config.sh required."
835
    exit 1
836
fi
837
838
scripts_utils='imported'
839
840
ask_password() {
841
    # read -s doesn't work with sh.
842
    # usage: pass=`ask_password "password please:"`
843
    echo $1 >&2
844
    echo -n ">" >&2
845
    stty_avant=`stty -g`
846
    stty -echo
847
    read p
848
    stty $stty_avant
849
    echo "$p"
850
    unset p
851
}
852
853
ask_password_db() {
854
    # ARGS: server_name, user_name
855
    local db_password="pour_boucler"
856
    # empty db request to validate password
857
    while ! mysql -h $1 -u $2 -p$db_password -e "" 2>/dev/null ; do
858
        db_password=`ask_password "database password:"`
859
        echo ""
860
    done
861
}
862
863
generate_password(){
864
    # ARGS: [password_length]
865
    # The password contains special characters. '/' must be excluded to avoid sed malfunction.
866
867
    local site_password='/'
868
869
    if [ -z $1 ] ; then
870
        local password_length=20
871
    else
872
        local password_length=$1
873
    fi
874
    
875
    while echo "$site_password" | grep -Fq '/' ; do
876
        site_password=`dd if=/dev/urandom count=1 | uuencode -m - | head -n 2 | tail -n 1 | cut -c-$password_length`
877
    done
878
879
    echo $site_password
880
}
881
882
count_d7_sites(){
883
    find $d7_dir_sites -type d ! -name all -maxdepth 1 | wc -l
884
}
885
886
check_arguments() {
887
    # ARGS: number of arguments passed to script, number of arguments required
888
    if [ $1 -le $2  ] ; then
889
        echo "Number of arguments insuffisant."
890
        exit 1
891
    fi
892
}
893 11 Julien Enselme
</code>
894
</pre>