Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 35

Florent Torregrosa, 04/08/2013 19:43
ajout backup et log all-reset-permissions.sh

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