Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 39

Florent Torregrosa, 04/08/2013 20:51
forget a linebreak

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