Project

General

Profile

Scripts et taches planifiees » History » Version 76

Julien Enselme, 08/06/2013 09:10 PM
scripts-config.sh : description

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