Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 82

Julien Enselme, 06/08/2013 21:49
Liste des scripts à disposition : détaille de la ligne ARGS

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