Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 87

Julien Enselme, 08/09/2013 22:43
Prise en compte des modifications qui permettent de mettre à jour les settings.php automatiquement.

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