Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 22

Florent Torregrosa, 04/08/2013 16:06
suppression ancien scripts et mise en place de ces derniers dans une page archive

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