Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 24

Florent Torregrosa, 04/08/2013 16:27
ajout tip pour editeur du crontab

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