Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 41

Florent Torregrosa, 04/08/2013 23:15
maj de code des cripts après tests

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