Projet

Général

Profil

Scripts archives » Historique » Version 1

Florent Torregrosa, 04/08/2013 16:06

1 1 Florent Torregrosa
h2. chk_perm
2 1 Florent Torregrosa
3 1 Florent Torregrosa
Ce script rétablit les permissions des dossiers des sites, des scripts et des settings.php. Il se lance tous les jours grâce au cron.
4 1 Florent Torregrosa
5 1 Florent Torregrosa
Il ressemble à ça :
6 1 Florent Torregrosa
<pre>
7 1 Florent Torregrosa
<code class="bash">
8 1 Florent Torregrosa
cd [drupal directory]/sites
9 1 Florent Torregrosa
10 1 Florent Torregrosa
for dir in $(find . -type d -maxdepth 1 ! -name all)
11 1 Florent Torregrosa
do
12 1 Florent Torregrosa
    chmod 755 $dir
13 1 Florent Torregrosa
    cd $dir
14 1 Florent Torregrosa
    chmod 400 settings.php
15 1 Florent Torregrosa
    cd -
16 1 Florent Torregrosa
done
17 1 Florent Torregrosa
</code>
18 1 Florent Torregrosa
</pre>
19 1 Florent Torregrosa
20 1 Florent Torregrosa
h2. dis_tiers.sh et en_tiers.sh
21 1 Florent Torregrosa
22 1 Florent Torregrosa
Créé en juillet 2011 dans le cadre de [[De_Drupal6_vers_Drupal7|la migration de d6 à d7]], ces scripts permettent respectivement de désactiver et réactiver tous les modules tiers (c'est-à-dire les modules qui ne font pas partie du noyau / core de drupal, ceux qui sont installé dans sites/all/modules).
23 1 Florent Torregrosa
24 1 Florent Torregrosa
En effet, il s'agit de deux étapes indipensables pour la migration d'un site.
25 1 Florent Torregrosa
26 1 Florent Torregrosa
h3. Comment les lancer ?
27 1 Florent Torregrosa
28 1 Florent Torregrosa
Il suffit de taper "dis_tiers.sh" ou "en_tiers.sh" dans le dossier du site en question.
29 1 Florent Torregrosa
30 1 Florent Torregrosa
h3. À quoi ça ressemble ?
31 1 Florent Torregrosa
32 1 Florent Torregrosa
<pre>
33 1 Florent Torregrosa
<code class="bash">
34 1 Florent Torregrosa
##dis_tiers.sh
35 1 Florent Torregrosa
#écrire le nom des modules non core dans un fichier
36 1 Florent Torregrosa
drush pml |grep -v Core* | grep Module | grep Enabled > fichier.temp
37 1 Florent Torregrosa
sed -e 's/\(.*(\)\(.*\)\().*\)/\2/' fichier.temp > modules_tiers.txt
38 1 Florent Torregrosa
#désactiver ces modules
39 1 Florent Torregrosa
for line in $(cat modules_tiers.txt); do drush dis -y "$line" ; done  
40 1 Florent Torregrosa
#effacer les fichiers créés
41 1 Florent Torregrosa
rm fichier.temp
42 1 Florent Torregrosa
43 1 Florent Torregrosa
##en_tiers.sh
44 1 Florent Torregrosa
#activer ces modules du fichier texte
45 1 Florent Torregrosa
for line in $(cat modules_tiers.txt); do drush en -y "$line" ; done 
46 1 Florent Torregrosa
</code>
47 1 Florent Torregrosa
</pre>
48 1 Florent Torregrosa
49 1 Florent Torregrosa
NB : dis_tiers.sh crée un fichier texte contenant la liste des modules tiers qui étaient activés sur le site. Il faut donc :
50 1 Florent Torregrosa
* Avoir des droits d'écriture sur le dossier du site pour l'exécuter
51 1 Florent Torregrosa
* Penser à supprimer ce fichier et à remettre les droits correctement (par exemple en lançant le script [[Scripts_et_taches_planifiees#ch_mdp|ch_mdp ]]) après.
52 1 Florent Torregrosa
53 1 Florent Torregrosa
h2. drushall and co
54 1 Florent Torregrosa
55 1 Florent Torregrosa
Pour administrer tous les sites du multi-site en une seule fois, nous avons créé un script à partir de drush.
56 1 Florent Torregrosa
Il s'utilise comme drush, mais effectue la commande drush tapée sur tous les sites de l'installation un par un.
57 1 Florent Torregrosa
58 1 Florent Torregrosa
h3. Comment on le lance ?
59 1 Florent Torregrosa
60 1 Florent Torregrosa
Sur l'installation d6, on lance <code>drushall</code> n'importe où.
61 1 Florent Torregrosa
62 1 Florent Torregrosa
Sur l'installation d7, on lance <code>drushall_atest</code> n'importe où.
63 1 Florent Torregrosa
64 1 Florent Torregrosa
h3. À quoi ça ressemble ?
65 1 Florent Torregrosa
66 1 Florent Torregrosa
<pre>
67 1 Florent Torregrosa
<code class="bash">
68 1 Florent Torregrosa
#~/bin/sh
69 1 Florent Torregrosa
# si pas d'arguments :
70 1 Florent Torregrosa
if [ $# -lt 1 ]; then
71 1 Florent Torregrosa
  echo "usage: $0 <drush args>"
72 1 Florent Torregrosa
  exit 1
73 1 Florent Torregrosa
fi
74 1 Florent Torregrosa
75 1 Florent Torregrosa
cd [drupal directory]/sites
76 1 Florent Torregrosa
77 1 Florent Torregrosa
for x in $(ls -1 | grep -v 'all'); do
78 1 Florent Torregrosa
  if [ -d $x -a ! -L $x ]; then
79 1 Florent Torregrosa
    cd $x;
80 1 Florent Torregrosa
    echo $x
81 1 Florent Torregrosa
    drush $*
82 1 Florent Torregrosa
    cd -;
83 1 Florent Torregrosa
  fi
84 1 Florent Torregrosa
done
85 1 Florent Torregrosa
</code>
86 1 Florent Torregrosa
</pre>
87 1 Florent Torregrosa
88 1 Florent Torregrosa
h2. drushcronone
89 1 Florent Torregrosa
90 1 Florent Torregrosa
h3. Histoire
91 1 Florent Torregrosa
92 1 Florent Torregrosa
Ce script a été introduit pour la version 6 du projet essentiellement pour améliorer les performances : au lieu de faire un wget sur le cron.php d'un site, valait mieux exécuter le script _en interne_.
93 1 Florent Torregrosa
94 1 Florent Torregrosa
h3. Besoin
95 1 Florent Torregrosa
96 1 Florent Torregrosa
La version 7 du projet en a besoin plus que jamais ! puisque le cron.php n'est plus 'wget'able sans une chaîne de codes à ajouter à l'url publique, sinon il faut avoir les droits nécessaires.
97 1 Florent Torregrosa
98 1 Florent Torregrosa
h3. Usage
99 1 Florent Torregrosa
100 1 Florent Torregrosa
Donc pour exécuter le cron pour un seul site, il suffit de donner le nom du répertoire.
101 1 Florent Torregrosa
Exemple : <code>drushcronone assos.centrale-marseille.fr.cac13</code>
102 1 Florent Torregrosa
103 1 Florent Torregrosa
Q : Où est ce que ce script est le plus utilisé ?
104 1 Florent Torregrosa
105 1 Florent Torregrosa
R : Dans les tâches planifiés (crontab) bien sûr !
106 1 Florent Torregrosa
107 1 Florent Torregrosa
h2. dump.sh and co
108 1 Florent Torregrosa
109 1 Florent Torregrosa
Tous ces scripts se lancent n'importe où.
110 1 Florent Torregrosa
111 1 Florent Torregrosa
h3. Dump pour drupal 6
112 1 Florent Torregrosa
113 1 Florent Torregrosa
h4. Sauvegarder uniquement les tables d'un site
114 1 Florent Torregrosa
115 1 Florent Torregrosa
On a créé des scripts qui permettent de sauvegarder uniquement les tables associés à un site (et non toute la base).
116 1 Florent Torregrosa
117 1 Florent Torregrosa
Ils se lancent n'importe où (mais attention, la sauvegarde est effectuée là où il est lancé, donc à ne pas lancer dans dossier accessible par n'importe qui !) en tapant <code>dump_site nom_de_site</code> (d6) ou <code>dump_site_atest nom_du_site</code> (d7). Le nom du site à fournir est le préfixe utilisé dans la base de données.
118 1 Florent Torregrosa
119 1 Florent Torregrosa
Ils **ressemblent** à :
120 1 Florent Torregrosa
<pre>
121 1 Florent Torregrosa
<code class="bash">
122 1 Florent Torregrosa
#récupération des tables du site dans le fichier liste_tables.temp
123 1 Florent Torregrosa
tables='_%'
124 1 Florent Torregrosa
liste="$1$tables"
125 1 Florent Torregrosa
126 1 Florent Torregrosa
mysql -h serveur -u utilisateur --password=super_mot-de-passe -BNe "show tables like '"$liste"'" base_de_données | tr '\r\n' ' ' > liste_tables.temp
127 1 Florent Torregrosa
128 1 Florent Torregrosa
#transformation de cette liste en une variable
129 1 Florent Torregrosa
var=$(cat liste_tables.temp)
130 1 Florent Torregrosa
131 1 Florent Torregrosa
#sauvegarde de toutes ces tables
132 1 Florent Torregrosa
suffixe="_dump.sql"
133 1 Florent Torregrosa
fichier="$1$suffixe"
134 1 Florent Torregrosa
135 1 Florent Torregrosa
mysqldump base_de_données -h serveur -u utilisateur --password=super_mot-de-passe $var > $fichier
136 1 Florent Torregrosa
137 1 Florent Torregrosa
#suppression du fichier temporaire utilisé
138 1 Florent Torregrosa
rm liste_tables.temp
139 1 Florent Torregrosa
</code>
140 1 Florent Torregrosa
</pre>
141 1 Florent Torregrosa
142 1 Florent Torregrosa
h4. Tout sauvegarder
143 1 Florent Torregrosa
144 1 Florent Torregrosa
Pour drupal 6, on a un script qui réalise la sauvegarde de toute la base en une seule fois : <code> dump.sh</code>. Il **ressemble** à ça :
145 1 Florent Torregrosa
<pre>
146 1 Florent Torregrosa
<code class="bash">
147 1 Florent Torregrosa
mysqldump nom_de_la_base -h serveur -u utilisateur --password=super_mot_de_passe_trop_bien > ~/chemin_vers_la/sauvegarde.dump.sql
148 1 Florent Torregrosa
</code>
149 1 Florent Torregrosa
</pre>
150 1 Florent Torregrosa
151 1 Florent Torregrosa
h3. Dump pour drupal 7
152 1 Florent Torregrosa
153 1 Florent Torregrosa
Pour drupal 7, on a un script plus complet : <code>dump_site_atest_all</code> qui repose sur @drush sql-dump@ :
154 1 Florent Torregrosa
155 1 Florent Torregrosa
<pre>
156 1 Florent Torregrosa
<code class="bash">
157 1 Florent Torregrosa
#!/bin/sh
158 1 Florent Torregrosa
PATH=/usr/local/bin:/usr/bin:/bin:/users/guest/assos/bin
159 1 Florent Torregrosa
160 1 Florent Torregrosa
sites_dir=~/htmltest/sites
161 1 Florent Torregrosa
backup_dir=~/Desktop/dump_d7
162 1 Florent Torregrosa
date=`date "+%Y-%m-%d-%Hh%Mm%Ss"`
163 1 Florent Torregrosa
164 1 Florent Torregrosa
cd $sites_dir
165 1 Florent Torregrosa
166 1 Florent Torregrosa
#Cherche dans le sous répertoire du répertoire courant sauf dans le sous répertoire
167 1 Florent Torregrosa
# all et dans les liens.
168 1 Florent Torregrosa
for dir in $(find . -maxdepth 1 -mindepth 1 -type d ! -name all )
169 1 Florent Torregrosa
do
170 1 Florent Torregrosa
    cd $dir
171 1 Florent Torregrosa
    drush sql-dump --result-file="$backup_dir/$dir.dump$date.sql"
172 1 Florent Torregrosa
    cd -
173 1 Florent Torregrosa
done
174 1 Florent Torregrosa
</code>
175 1 Florent Torregrosa
</pre>
176 1 Florent Torregrosa
177 1 Florent Torregrosa
Ce script s’exécute une fois par semaine.
178 1 Florent Torregrosa
179 1 Florent Torregrosa
h2. maj.sh
180 1 Florent Torregrosa
181 1 Florent Torregrosa
Ce script est principalement constitué d'une suite de commandes drush et d'appels à d'autres scripts du projet.
182 1 Florent Torregrosa
183 1 Florent Torregrosa
Plus d'info sur les étapes précises dans les commentaires du script lui-même et dans le [[Scripts_et_taches_planifiees#la_mise_à_jour_des_projets|paragraphe suivant]].
184 1 Florent Torregrosa
185 1 Florent Torregrosa
h3. Comment le lancer ?
186 1 Florent Torregrosa
187 1 Florent Torregrosa
<code>maj.sh</code> ou <code>maj_d7.sh</code>, n'importe où.
188 1 Florent Torregrosa
189 1 Florent Torregrosa
NB : il faut que le module _update_ soit activé sur tous les sites de l'installation pour que ce script fonctionne.
190 1 Florent Torregrosa
191 1 Florent Torregrosa
h2. usep
192 1 Florent Torregrosa
193 1 Florent Torregrosa
Ce script a été créé dans le cadre de la [[De_Drupal6_vers_Drupal7|migration de drupal 6 à drupal 7]] mais peut être utilisé pour des tas de choses : il permet de savoir quels sont les sites qui utilisent (c'est-à-dire qui ont activé) un projet donné.
194 1 Florent Torregrosa
195 1 Florent Torregrosa
Pour le moment, il n'est fonctionnel que pour drupal 6, mais peut être adapté sans mal à drupal 7.
196 1 Florent Torregrosa
197 1 Florent Torregrosa
h3. Comment le lancer ?
198 1 Florent Torregrosa
199 1 Florent Torregrosa
Taper <code>usep projet</code> dans n'importe quel dossier de site de l'installation drupal 6.
200 1 Florent Torregrosa
201 1 Florent Torregrosa
h3. À quoi ça ressemble ?
202 1 Florent Torregrosa
203 1 Florent Torregrosa
(quelques  commentaires sont également dispo directement dans le script pour mieux comprendre son fonctionnement)
204 1 Florent Torregrosa
<pre>
205 1 Florent Torregrosa
<code class="bash">
206 1 Florent Torregrosa
#si pas d'argument donnés :
207 1 Florent Torregrosa
if [ $# -lt 1 ]; then
208 1 Florent Torregrosa
  echo "usage: $0 <drush args>"
209 1 Florent Torregrosa
  exit 1
210 1 Florent Torregrosa
fi
211 1 Florent Torregrosa
212 1 Florent Torregrosa
213 1 Florent Torregrosa
cd [drupal_directory]/sites
214 1 Florent Torregrosa
215 1 Florent Torregrosa
216 1 Florent Torregrosa
for x in $(ls -1 | grep -v 'all' | grep -v file-*); do
217 1 Florent Torregrosa
  if [ -d $x -a ! -L $x ]; then
218 1 Florent Torregrosa
    cd $x;
219 1 Florent Torregrosa
    if [ 1 = `drush pml --no-core --status=enabled | grep $1 | wc -l` ]; then
220 1 Florent Torregrosa
             echo $x; 
221 1 Florent Torregrosa
            fi
222 1 Florent Torregrosa
    cd -;
223 1 Florent Torregrosa
  fi
224 1 Florent Torregrosa
done
225 1 Florent Torregrosa
</code>
226 1 Florent Torregrosa
</pre>
227 1 Florent Torregrosa
228 1 Florent Torregrosa
h2. Taille.sh
229 1 Florent Torregrosa
230 1 Florent Torregrosa
Ce script utilise la commande <code>du -hcs</code> pour retourner l'espace disque utilisé sur le compte assos, ainsi que sa répartition dans les différents répertoires des sites).
231 1 Florent Torregrosa
232 1 Florent Torregrosa
Ce script est notamment utilisé à la fin du script de mise à jour de projet ; son résultat est envoyé par mail au club drupal pour vérification.
233 1 Florent Torregrosa
234 1 Florent Torregrosa
h2. init_var.sh
235 1 Florent Torregrosa
236 1 Florent Torregrosa
Ce script permet d'initialiser des configurations et variables dangereuses, pour l'installation drupal 7. Il faut le lancer après chaque installation de sous-site.
237 1 Florent Torregrosa
238 1 Florent Torregrosa
h3. Comment le lancer ?
239 1 Florent Torregrosa
240 1 Florent Torregrosa
Taper <code>init_var.sh</code> (ou <code>drush init</code>) dans le dossier du site.
241 1 Florent Torregrosa
242 1 Florent Torregrosa
h3. À quoi ça ressemble ?
243 1 Florent Torregrosa
244 1 Florent Torregrosa
<pre>
245 1 Florent Torregrosa
<code class="bash">
246 1 Florent Torregrosa
drush vset error_level 0 --yes
247 1 Florent Torregrosa
</code>
248 1 Florent Torregrosa
</pre>
249 1 Florent Torregrosa
250 1 Florent Torregrosa
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ées à n'importe qui.
251 1 Florent Torregrosa
252 1 Florent Torregrosa
<pre>
253 1 Florent Torregrosa
<code class="php">
254 1 Florent Torregrosa
drush php-eval variable_set\(\'allow_authorize_operations\',FALSE\)\; 
255 1 Florent Torregrosa
</code>
256 1 Florent Torregrosa
</pre>
257 1 Florent Torregrosa
258 1 Florent Torregrosa
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é.
259 1 Florent Torregrosa
260 1 Florent Torregrosa
<pre>
261 1 Florent Torregrosa
<code class="bash">
262 1 Florent Torregrosa
drush vset --always-set reverse_proxy TRUE
263 1 Florent Torregrosa
drush vset --always-set --format=json reverse_proxy_addresses '["147.94.19.16","147.94.19.17"]'
264 1 Florent Torregrosa
</code>
265 1 Florent Torregrosa
</pre>
266 1 Florent Torregrosa
267 1 Florent Torregrosa
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. Pour plus d'info, voir le mail de dgeo du 15 mai 2012.
268 1 Florent Torregrosa
<pre>
269 1 Florent Torregrosa
<code>
270 1 Florent Torregrosa
drush ev "variable_set('update_notify_emails', array('coucouuu@example.com'));"
271 1 Florent Torregrosa
</code>
272 1 Florent Torregrosa
</pre>
273 1 Florent Torregrosa
274 1 Florent Torregrosa
Cette commande permet de modifier l'adresse de la personne qui recevra des notifications lorsqu'une nouvelle mise à jour (projet ou noyau drupal) est disponible (NB : c'est le module (du noyau) _update_ qui gère ces envois, s'il est désactivé, aucune vérification des versions n'est effectuée)
275 1 Florent Torregrosa
Pour ne pas déranger les webmasters avec ceci, il faut mettre l'adresse du club drupal.
276 1 Florent Torregrosa
277 1 Florent Torregrosa
h2. reinit_var.sh
278 1 Florent Torregrosa
279 1 Florent Torregrosa
Ce script est utilisé pour réinitialiser des configurations et variables dangereuses sur tous les sites.
280 1 Florent Torregrosa
281 1 Florent Torregrosa
Des informations détaillées sont disponibles dans [[Scripts_et_taches_planifiees#la_réinitialisation_des_variables_dangeureuses|ce paragraphe]].
282 1 Florent Torregrosa
283 1 Florent Torregrosa
h3. Comment le lancer ?
284 1 Florent Torregrosa
285 1 Florent Torregrosa
Taper <code>reinit_var.sh</code> n'importe où.
286 1 Florent Torregrosa
287 1 Florent Torregrosa
h2. purge_des_sauvegardes.sh
288 1 Florent Torregrosa
289 1 Florent Torregrosa
Ce script permet de supprimer les vieilles sauvegardes de base de données, afin de libérer de l'espace disque.
290 1 Florent Torregrosa
291 1 Florent Torregrosa
Le script nettoie les sauvegardes de sites individuels et les sauvegardes des bases de données complètes d6 et d7.
292 1 Florent Torregrosa
293 1 Florent Torregrosa
h3. Comment le lancer ?
294 1 Florent Torregrosa
295 1 Florent Torregrosa
Il suffit de taper <code>purge_des_sauvegardes.sh</code> n'importe où dans le compte assos.
296 1 Florent Torregrosa
297 1 Florent Torregrosa
h3. À quoi ça ressemble ?
298 1 Florent Torregrosa
299 1 Florent Torregrosa
<pre>
300 1 Florent Torregrosa
<code class="bash">
301 1 Florent Torregrosa
cd [dump directory]
302 1 Florent Torregrosa
303 1 Florent Torregrosa
if [ $(ls -l | wc -l)  -gt YY ] ; then # s'il y a plus de YY fichiers alors
304 1 Florent Torregrosa
305 1 Florent Torregrosa
ls -tr | head -XX | xargs rm; #supprime les XX fichiers les plus vieux
306 1 Florent Torregrosa
307 1 Florent Torregrosa
else # sinon, alerte
308 1 Florent Torregrosa
309 1 Florent Torregrosa
echo "mon message d'erreur" | mail -s "[dump assos] mon message d'erreur" assos@centrale-marseille.fr ;
310 1 Florent Torregrosa
311 1 Florent Torregrosa
fi
312 1 Florent Torregrosa
</code>
313 1 Florent Torregrosa
</pre>
314 1 Florent Torregrosa
315 1 Florent Torregrosa
{{important(Ce script supprime les x sauvegardes les plus vieilles de chaque catégorie (sites d7, tout d6, tout d7), sans aucune notion de temps. Cela implique que si des sauvegardes ont été faites manuellement, des sauvegardes automatiques plus vieilles seront supprimées (alors qu'elles ne sont pas nécessairement périmées !))}}
316 1 Florent Torregrosa
317 1 Florent Torregrosa
h2. drushall_atest_logged
318 1 Florent Torregrosa
319 1 Florent Torregrosa
Pour faire des commandes drush et quelles soient logguées par site dans le dossier Desktop/log/d7/nom_du_site.log
320 1 Florent Torregrosa
321 1 Florent Torregrosa
h1. Anciennes entrées du crontab
322 1 Florent Torregrosa
323 1 Florent Torregrosa
Ces entrées ne sont plus nécessaires mais conservées pour archive :
324 1 Florent Torregrosa
325 1 Florent Torregrosa
* 03 03 * * *     /users/guest/assos/bin/drushall cron
326 1 Florent Torregrosa
* * */23 * * * echo "le crontab sas1 fonctionne, supprimer celui de scylla mnt !" | mail -s "sas1 is talking to you" assos