Project

General

Profile

Scripts et taches planifiees » History » Version 80

Julien Enselme, 08/06/2013 09:37 PM
drushcronone -> Scripts durpal 6

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