Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 34

Florent Torregrosa, 04/08/2013 19:23
code after test of d7-all-dump-individual.sh

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