Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 23

Florent Torregrosa, 04/08/2013 16:22
enleve des parties pour les mettre aux archives

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