Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 25

Florent Torregrosa, 04/08/2013 17:16
actualisation du paragraphe réinitialisation des variables

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