Projet

Général

Profil

Scripts et taches planifiees » Historique » Version 99

Julien Enselme, 22/10/2013 00:15
d7-delete-site.sh: Prise en compte sites.php

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