Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 22

Florent Torregrosa, 04/08/2013 16:06
suppression ancien scripts et mise en place de ces derniers dans une page archive

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