Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 42

Florent Torregrosa, 04/08/2013 23:18
put the current crontab

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