installation.sh
16.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
#!/bin/bash
#
# ------------ A - SETUP ------------
#
# Le script peut-il continuer et créer les fichiers qui lui sont nécessaires ?
access_path=`dirname $0`
if [ -r "$access_path" ]; then
if [ -w "$access_path" ]; then
if [ -x "$access_path" ]; then
echo "Vous avez les droits suffisants sur ce repertoire pour exécuter ce script"
else
echo "Veuillez relancer le script en root"
exit 1
fi
else
echo "Veuillez relancer le script en root"
exit 1
fi
else
echo "Veuillez relancer le script en root"
exit 1
fi
# Git ne doit pas tenir compte des changements de permission sur les fichiers (style "chmod +x" ou "chmod -R"...)
# Ca signifie qu'un changement de permission sur un fichier n'est pas vu par git (et donc pas commité)
git config core.fileMode false
# Pour Mac OS recent (10.10, Yosemite), la syntaxe du SED est differente
# Il faut donc faire une copie de ce fichier et transformer les instructions sed a l'interieur
# Pour cela, il suffit d'executer ces 2 lignes :
# cp installation.sh installation_macosx.sh
# sed -e "s/ -i / -i '' /" -i '' installation_macosx.sh
if [ ! -f ./installation.sh ] ; then
echo "Vous devez executer ce script depuis le dossier install/"
exit 1
fi
# Pour pouvoir ajouter les donnees IRAP (categories...) pendant l'installation, mettre à 1
INSTALL_DATA_IRAP=1
# Revenir a la racine du projet (car on est dans le repertoire install/) :
cd ../
#if [ $0 != "install/installation.sh" ] ; then
# cd ../
#fi
#Configurer l'application
# Donner le nom du groupe webService
echo
echo "LabInvent Copyright (C) 2012-2019 IRAP (Toulouse - France)"
echo "Auteurs : Etienne Pallier <etienne.pallier@irap.omp.eu>, Elodie Bourrec <elodie.bourrec@irap.omp.eu>"
echo "Licence GPL (http://www.gnu.org/copyleft/gpl.html)"
echo "Ce logiciel est mis a disposition tel quel, SANS AUCUNE GARANTIE."
echo "C'est un logiciel libre, et vous pouvez le redistribuer sous certaines conditions."
echo "Il est construit sur le framework Php open source CakePhp (v3.2) http://cakephp.org"
echo
echo "Votre serveur Mysql doit etre demarre (ainsi que votre serveur web)"
echo "Si c'est bien le cas, appuyez sur une touche pour continuer..."
read
echo "La commande 'mysql' doit aussi etre accessible:"
res=`which mysql`
[[ -z "$res" ]] && exit 1
echo "ok"
echo
while : ; do
echo "Donner le nom du GROUPE du serveur web (ex: apache (centOs), www-data (Ubuntu), _www (MacOS avec Apache), daemon (MacOS avec XAMPP), nobody (MacOS), admin, ...)"
read grp
[[ -n "$grp" ]] && break
done
echo "==> groupe = $grp"
echo
echo "Vous devez avoir les droits administrateur (via sudo) pour executer les commandes suivantes"
echo "Appuyez sur une touche pour continuer..."
read
#
# ------------ B - PLUGINS ------------
#
# Installation des plugins dans vendor/ (cakephp, phpunit, phpqrcode, fpdf, ...)
echo "Installation des plugins dans vendor/ ..."
cd install/
chmod +x plugins_set.sh
chmod +x plugins_install.sh
./plugins_install.sh
cd ../
#
# ------------ C - DOSSIERS LOCAUX DE TRAVAIL (./logs, ./tmp, ./webroot) ------------
#
# - 1) Creation des dossiers temporaires (tmp, logs, webroot)
echo "Création des dossiers temporaires..."
if [ ! -d "./logs" ]; then
mkdir ./logs/
fi
if [ ! -f "./logs/error.log" ]; then
touch ./logs/error.log
fi
if [ ! -f "./logs/cli-error.log" ]; then
touch ./logs/cli-error.log
fi
if [ ! -d "./tmp" ]; then
mkdir ./tmp/
fi
if [ ! -d "./tmp/bake" ]; then
mkdir ./tmp/bake/
fi
if [ ! -d "./tmp/cache" ]; then
mkdir ./tmp/cache/
fi
if [ ! -d "./tmp/cache/models" ]; then
mkdir ./tmp/cache/models/
fi
if [ ! -d "./tmp/cache/persistent" ]; then
mkdir ./tmp/cache/persistent/
fi
if [ ! -d "./tmp/cache/views" ]; then
mkdir ./tmp/cache/views/
fi
if [ ! -d "./tmp/documents" ]; then
mkdir ./tmp/documents/
fi
if [ ! -d "./tmp/sessions" ]; then
mkdir ./tmp/sessions/
fi
if [ ! -d "./tmp/tests" ]; then
mkdir ./tmp/tests/
fi
if [ ! -d "./webroot/img/qrcodes" ]; then
mkdir ./webroot/img/qrcodes
fi
if [ ! -d "./webroot/img/photos" ]; then
mkdir ./webroot/img/photos
fi
# (EP 24/5/19) Pour pouvoir upload des docs attachés
folder=./webroot/files
if [ ! -d "$folder" ]; then
mkdir $folder
chmod 777 $folder
fi
# (EP) Est-ce vraiment utile ?
#if [ ! -d "./vendor/phpunit" ]; then
#./composer.phar require --dev phpunit/phpunit
#else
#./composer.phar remove phpunit/phpunit
#./composer.phar require --dev phpunit/phpunit
#fi
echo "==>Done"
# - 2) Mise à jour des droits d'accès sur ces dossiers temporaires
echo "Mise à jour des droits des dossiers..."
echo "(Please enter your sudoer password)"
# - a) POUR LES QRCODES
# Ajouter les droits en ecriture pour la creation des qrcodes
# phpqrcode write its errors into its folder ...
sudo chmod -R 775 ./vendor/aferrandini/phpqrcode/
touch ./vendor/aferrandini/phpqrcode/errors.txt
chmod 775 ./vendor/aferrandini/phpqrcode/errors.txt
sudo chgrp -R $grp ./vendor/aferrandini/phpqrcode/
[[ $? -ne 0 ]] && echo "Vous devez avoir le droit de faire un 'sudo' sinon executer ce script en tant que root" && exit 1
##sudo chmod -R 775 ./webroot/img/
# TODO: ca serait mieux d'eviter ca ;
# Normalement, il faudrait ecrire dans app/tmp et pas dans app/webroot
# EP 2014/12/11 chmod 775 ne suffit pas
#chmod -R 775 ./webroot/img/
#sudo chmod -R 770 ./webroot/img/
sudo chmod -R 777 ./webroot/img/
#sudo chown -R $grp:$grp ./webroot/img/
sudo chgrp -R $grp ./webroot/img/
# TODO: il faudrait plutot faire ceci :
#sudo chown -R $webServerLogin:$webServerGroup ./webroot/img/
#chmod -R 775 ./webroot/img/
# - b) POUR LES DOCUMENTS
# Ajoute les droits en ecriture pour la generation des documents
dir="./tmp/documents/generator/"
if [ ! -d "$dir" ]; then
mkdir ./tmp/documents/generator/
fi
##sudo chmod -R 775 ./tmp/documents/
#chmod -R 775 ./tmp/documents/
# - c) POUR CAKEPHP (seule modif demandee par le framework)
# Les dossiers ./tmp et ./logs doivent être modifiable par le serveur web :
#chmod -R 775 ./tmp/
sudo chmod -R 777 ./tmp/cache/
chmod -R 777 ./tmp/
sudo chgrp -R $grp ./tmp/
chmod -R 777 ./logs/
sudo chgrp -R $grp ./logs/
#Il semble qu'il manque des droits au dossier Vendor, droit trop général à réduire (identifié les composants qui ont besoin de s'éxécuter ou de se lire, pas d'écriture dans le dossier Vendor normalement...)
#sudo chmod -R 770 ./vendor/
sudo chmod -R 777 ./vendor/
echo "==> Done"
echo
echo "Mise à jour des droits des dossiers tmp et logs"
echo
HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
setfacl -R -m u:${HTTPDUSER}:rwx tmp
setfacl -R -d -m u:${HTTPDUSER}:rwx tmp
setfacl -R -m u:${HTTPDUSER}:rwx logs
setfacl -R -d -m u:${HTTPDUSER}:rwx logs
#
# ------------ D - MODE : install or update ? ------------
#
# Mode install or update
while : ; do
echo "Voulez-vous effectuer une premiere installation OU BIEN une reconfiguration ('install'/'update') ? ['install'] :"
read mode
[[ -z $mode ]] && mode="install"
[[ $mode == "install" || $mode == "update" ]] && break
done
echo "==> Utilisation en mode $mode"
#
# ------------ D - CONFIGURATION Database (fichier config/app.php) ------------
#
cakephpAppPath=./
configPath=$cakephpAppPath/config
dbConfigFile=$configPath/app.php
myConfigFile=$configPath/app.php
configFile=$configPath/app.php
# If INSTALL mode => copy sample GENERAL config file to real personal file (make a copy first if already exists !)
[[ -f $myConfigFile ]] && cp -p $myConfigFile $myConfigFile.ORIG
[[ $mode == "install" ]] && cp $configPath/app.default.php $myConfigFile
while : ; do
echo "Voulez-vous (re-)créer la base de données (O/N) ? [N] :"
read rep
[[ -z $rep ]] && rep="N"
[[ $rep == "O" || $rep == "N" ]] && break
done
BDD=$rep
if [[ $BDD == "O" ]] ; then
echo "==> (re-)Création de la base de donnees"
else
echo "==> Pas de création de la base de donnees (la BD existe déjà)"
fi
# Set database ip
echo "Entrez le nom ou l'adresse du serveur MySQL hebergeant la base de donnnees : (defaut=localhost)"
read bddIp
if [ -z $bddIp ] ; then
bddIp="localhost"
fi
echo "==> Adresse du serveur MySql = $bddIp"
echo
if [[ $BDD == "O" ]] ; then
echo "Entrez le login privilegie vous donnant le droit de CREER les bases de donnees (NB: ce login ne sera utilise qu'une seule fois, pour la creation des bases ; par defaut=root) :"
echo "Si vous n'avez pas la permission de créer de nouvelles bases sur le serveur mais souhaitez installer le logiciel dans une base existante, entrez 'bd_existante'"
#echo "Si vous n'avez pas la permission de créer de nouvelles bases sur le serveur mais souhaitez installer le logiciel dans une base existante, entrez 'latmos'"
read bddAdminName
if [ -z $bddAdminName ] ; then
bddAdminName="root"
fi
echo "==> SGBD admin login = $bddAdminName"
echo
echo "Entrez le mot de passe de ce login privilegie (sinon, entrer le mot de passe de root) :"
read -s bddAdminPass
echo
fi
echo
# Configuration BD test et prod dans fichier config/app.php
# - BD test
sed -e "s/'database' => 'test_database'/'database' => 'test_labinvent2'/" -i $dbConfigFile
sed -e "s/'username' => 'test_username'/'username' => 'superadmin'/" -i $dbConfigFile
sed -e "s/'password' => 'test_password'/'password' => 'superadmin'/" -i $dbConfigFile
# - BD prod
#sed -e "s#/\*d\*/'host' => 'localhost'//\*d\*/'host' => '$bddIp'/" -i $dbConfigFile
sed -e "s/\*d\*\/'host' => 'localhost'/\*d\*\/'host' => '$bddIp'/" -i $dbConfigFile
echo "Entrez le nom de la base a utiliser pour l'inventaire (defaut=labinvent)"
read bddName
if [ -z $bddName ] ; then
bddName="labinvent"
fi
echo "==> Nom de la BD = $bddName"
echo
sed -e "s/'database' => 'database'/'database' => '$bddName'/" -i $dbConfigFile
# Attention, le login doit faire maximum 16 caracteres, car Mysql ne supporte pas plus
defaultBddUserName=${bddName:0:12}user
echo "Entrez le login qui doit etre cree pour que le logiciel puisse avoir acces a la base de donnees inventaire"
echo "Ce login sera utilise par le logiciel pour acceder et modifier la BD d'inventaire, quelque soit l'utilisateur connecte"
echo "Attention, il ne s'agit pas d'un utilisateur humain, mais d'un login associe au logiciel, il peut donc porter le nom du logiciel par exemple"
echo "Ce login doit faire 16 caracteres MAX (proposition par defaut, $defaultBddUserName):"
read bddUserName
if [ -z $bddUserName ] ; then
bddUserName=$defaultBddUserName
fi
echo "==> BDD inventaire user login = $bddUserName"
echo
sed -e "s/'username' => 'username'/'username' => '$bddUserName'/" -i $dbConfigFile
sed -e "s/'username' => 'superadmin'/'username' => '$bddUserName'/" -i $dbConfigFile
echo "Entrez le mot de passe de cet utilisateur :"
read -s bddUserPass
echo "==> BDD inventaire user pass = $bddUserPass"
echo
sed -e "s/'password' => 'password'/'password' => '$bddUserPass'/" -i $dbConfigFile
sed -e "s/'password' => 'superadmin'/'password' => '$bddUserPass'/" -i $dbConfigFile
# DATABASE INSTALLATION
#if [ $BDD == "N" ] ; then
# #Structure de la base de test présente dans le fichier "labinvent_mode_update.sql"
# cat ./labinvent_mode_update.sql > ./build_update.sql
# mysql --user=$bddAdminName --password=$bddAdminPass -h $bddIp < ./build_update.sql
#else
if [ $BDD == "O" ] ; then
cd database/
echo "Creation script de construction de la BD."
[[ -f build.sql ]] && cp -p build.sql build.sql.ORIG
# Structure de la base présente dans le fichier "labinvent_last_version.sql"
# (EP 25/5/19) TODO: il faut un script sql adapté au cas 'bd_existante',
# c'est à dire SANS "create schema...", mais juste des "drop table if exists + create table"
if [ $bddAdminName == 'bd_existante' ] ; then
#cat ./labinvent_2.1_22-05-17.sql > ./build.sql
cat ./labinvent_last_version.sql > ./build.sql
else
cat ./labinvent_last_version.sql > ./build.sql
fi
# Ajout login & mdp utlisateur application dans le script build.sql
#sed -e "s/'mydb'/'$bddUserName'/" -i ./build.sql
sed -e "s/'mydb_user'/'$bddUserName'/" -i ./build.sql
#sed -e "s/'mydb1'/'$bddUserPass'/" -i ./build.sql
sed -e "s/'mydb_pass'/'$bddUserPass'/" -i ./build.sql
# Seulement pour IRAP
if [ $INSTALL_DATA_IRAP -eq 1 ] ; then
echo "Voulez-vous installer les donnees propres a l'IRAP (categories, groupes metiers, groupes thematiques) dans la base de donnees, Oui/Non ? (reponse par defaut Oui) :"
read rep
if [ -z $rep ] || [ $rep == "O" ] || [ $rep == "o" ] || [ $rep == "Oui" ] || [ $rep == "oui" ] || [ $rep == "OUI" ]; then
echo "Installation des donnees IRAP dans la base de donnees"
cat ./Insert_TablesFunct.sql >> ./build.sql
else
echo "Pas d'install de donnees IRAP dans la base"
fi
fi
echo
#rep=" "
cat ./Insert_Users.sql >> ./build.sql
echo "Maintenant, nous allons definir l utilisateur qui sera superadministrateur de l application, ca peut etre VOUS (Pas de mot de passe par défaut) :"
echo "- Entrez ses (vos) Nom et Prenom (sous forme : Nom Prenom ) :"
read UserName UserPrenom
echo
echo "- Entrez son (votre) login (par exemple, votre login ldap - par défaut 'superadmin') :"
read login
# par defaut, on met superadmin (utilisé en fake ldap)
if [ -z $login ] ; then
login="superadmin"
fi
echo "==> login du super administrateur de LabInvent = $login"
echo "*** ATTENTION *** : Notez bien ce login, c'est celui qui vous permettra par défaut de vous connecter à LabInvent en tant que super administrateur (avec le mot de passe 'login')"
echo
echo "- Entrez son (votre) email :"
read mel
echo
sed -e "s/Nom/$UserName/" -i ./build.sql
sed -e "s/Prenom/$UserPrenom/" -i ./build.sql
sed -e "s/userlogin/$login/" -i ./build.sql
sed -e "s/'__@__'/'$mel'/" -i ./build.sql
echo "Voulez-vous installer quelques utilisateurs (bidons) supplementaires dans la base de donnees (vous pourrez ensuite changer leur nom dans l'application, ou meme les supprimer ; par defaut, Oui): Oui/Non ?"
read rep
if [ -z $rep ] || [ $rep == "O" ] || [ $rep == "o" ] || [ $rep == "Oui" ] || [ $rep == "oui" ] || [ $rep == "OUI" ]; then
echo "Ajout de quelques utilisateurs supplementaires dans la base (Mot de passe par défaut : login)"
cat ./Insert_FakeUsers.sql >> ./build.sql
fi
sed -e "s/mydb/$bddName/" -i ./build.sql
echo
echo "Creation base de donnees (Attention, votre serveur de BD doit etre demarre)"
if [ $bddAdminName == 'bd_existante' ] ; then
mysql --user=$bddUserName --password=$bddUserPass -h $bddIp < ./build.sql
else
mysql --user=$bddAdminName --password=$bddAdminPass -h $bddIp < ./build.sql
fi
echo "Base créée (a verifier)"
cd ../
fi
echo
echo "Passage de l'application en mode INSTALL"
cd database/
chmod +x mode_panique.sh
./mode_panique.sh
echo
echo "*** FIN DE L'INSTALLATION ***"
echo
echo "Maintenant, veuillez poursuivre en suivant (rigoureusement) les indications données sur le wiki du projet : https://projects.irap.omp.eu/projects/inventirap/wiki/Installation#C-TESTS"
#if [ $mode == 'install' ] ; then
# echo "Si vous voulez le conserver, le script de creation de la BD est database/build.sql"
# echo "Le fichier de configuration app.php a été écrasé, vous pouvez retrouver votre ancienne configuration dans le fichier app.php.ORIG."
# echo
# echo "MAINTENANT :"
# echo "1) Verifiez que la BD d'inventaire ($bddName) a bien ete cree (avec phpmyadmin par exemple)"
# echo "2) Verifiez que les tests passent, placez vous à la racine du projet, exécutez la commande 'vendor/bin/phpunit'."
# echo "3) Allez sur l'application, vous devriez arriver par défaut sur un mode install vous donnant des informations sur la configuration de votre application, vérifiez que tous les points sont bien validés (verts), sinon rajouter les extensions manquantes..."
# echo "4) Testez l'accès à l'application par le web"
#else
# echo
# echo "MAINTENANT :"
# echo "1) Verifiez que les tests passent, placez vous à la racine du projet, exécutez la commande 'vendor/bin/phpunit'."
# echo "2) Allez sur l'application, vous devriez arriver par défaut sur un mode install vous donnant des informations sur la configuration de votre application, vérifiez que tous les points sont bien validés (verts), sinon rajouter les extensions manquantes..."
# echo "3) Testez l'accès à l'application par le web"
#fi
#
#echo "Pour aller sur l'application, suivez la suite des instructions qui sont dans le fichier INSTALLATION.txt (à la racine du projet), que vous avez normalement deja commence a lire (ou bien sur le web (https://projects.irap.omp.eu/projects/inventirap/wiki/Installation)"
#echo
#echo "N'oubliez pas 3 choses importantes :"
#echo "1) Personnaliser les 2 fichiers logos suivants dans webroot/img/ :"
#echo "- logo_entity.jpg : le logo du laboratoire"
#echo "- logo_software.jpg : le logo du logiciel"
#echo "2) Personnaliser le logiciel pour votre entité (laboratoire) (via le menu de configuration dans la section outils de l\'application)"
#echo "3) Passer en mode LDAP (via le menu de configuration dans la section outils de l\'application)"