Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 75

Julien Enselme, 06/08/2013 13:38
Explication sur ~/bin et sur PATH

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