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> |