Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 77

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