Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 93

Julien Enselme, 05/10/2013 17:53

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