Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 78

Julien Enselme, 06/08/2013 21:20
Liste des scripts à disposition : explication des imports

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