Project

General

Profile

Scripts et taches planifiees » History » Version 83

Julien Enselme, 08/08/2013 05:32 PM
Crontab : précision sur comment imoporter

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