Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 49

Julien Enselme, 05/08/2013 16:41
d7-all-dump-individual.sh : need an argument

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