Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 45

Florent Torregrosa, 05/08/2013 11:48
remove password

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