Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 43

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