Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 82

Julien Enselme, 06/08/2013 21:49
Liste des scripts à disposition : détaille de la ligne ARGS

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