Project

General

Profile

Scripts et taches planifiees » History » Version 79

Julien Enselme, 08/06/2013 09:22 PM
scripts-utils.sh : description

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