#!/bin/bash # Pour pouvoir ajouter les donnees IRAP (categories...) pendant l'installation, mettre à 1 INSTALL_DATA_IRAP=1 # Le script peut-il continuer et créer les fichiers qui lui sont nécessaires ? access_path=`dirname $0` access_path="toto" echo $access_path if [[ -r "$access_path" && -w "$access_path" && -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 tant que root" exit 1 fi # 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 echo if [ ! -f ./installation.sh ] ; then echo "Vous devez executer ce script depuis le dossier install/" exit 1 fi # 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-2020 IRAP (Toulouse - France)" echo "Auteurs : Etienne Pallier , Elodie Bourrec " 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, http://cakephp.org) avec le langage Php v7" # # ------------ A - SETUP ------------ # echo echo echo "---------" echo "A - SETUP" echo "---------" # 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 echo echo "Votre serveur Mysql doit etre demarré (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 PHP ------------ # echo echo echo "---------------" echo "B - PLUGINS PHP" echo "---------------" # Installation des plugins dans vendor/ (cakephp, phpunit, phpqrcode, fpdf, ...) echo echo "Installation des plugins PHP dans vendor/ :" #cd install/ chmod +x plugins_set.sh chmod +x plugins_install.sh ./plugins_install.sh #cd ../ # Revenir a la racine du projet (car on est dans le repertoire install/) : cd ../ # # ------------ C - DOSSIERS LOCAUX DE TRAVAIL (./logs, ./tmp, ./webroot) ------------ # echo echo echo "--------------------------------" echo "C - CRÉATION DOSSIERS DE TRAVAIL" echo "--------------------------------" # - 1) Creation des dossiers temporaires (tmp, logs, webroot) echo 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 # Normalement webroot/img/ existe déjà mais on ne sait jamais (donc -p) mkdir -p ./webroot/img/qrcodes fi # (EP 11/6/19) Pour pouvoir upload des photos (doc attaché) folder=./webroot/img/photos if [ ! -d "$folder" ]; then mkdir $folder fi # Inutile car fait un peu plus loin #chmod 777 $folder # (EP 24/5/19) Pour pouvoir upload des docs attachés # Question: A quoi sert tmp/documents/ ci-dessus ? On peut le virer ? folder=./webroot/files if [ ! -d "$folder" ]; then mkdir $folder fi chmod 777 $folder # (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 echo "Mise à jour des droits des dossiers..." echo "(Entrer votre mot de passe sudo)" # - 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" # Rendre les scripts executables chmod +x SHOW_LOGS chmod +x TEST_WEB chmod +x TESTS.sh chmod +x UPDATE chmod +x VERSION 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 echo "==> Done" # # ------------ D - MODE : install or update ? ------------ # echo echo echo "-----------------------------" echo "D - CHOIX MODE INSTALL/UPDATE" echo "-----------------------------" # Mode install or update echo while : ; do echo "Voulez-vous effectuer une premiere installation OU BIEN une reconfiguration (defaut=install) [install/update] ? " read mode [[ -z $mode ]] && mode="install" [[ $mode == "install" || $mode == "update" ]] && break done echo "==> Utilisation en mode $mode" # # ------------ E - CONFIGURATION Database (fichier config/app.php) ------------ # echo echo echo "---------------------------------" echo "E - CONFIGURATION BASE DE DONNÉES" echo "---------------------------------" 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 echo while : ; do echo "Voulez-vous (re-)créer la base de données (default=N) [O/N] ?" read rep [[ -z $rep ]] && rep="N" [[ $rep == "O" || $rep == "N" ]] && break done BDD=$rep if [[ $BDD == "O" ]] ; then echo "==> La BDD sera (re-)créée" else echo "==> Pas de création de la base de donnees (la BD existe déjà)" fi # Set database ip echo echo "Entrez le nom ou l'adresse du serveur MySQL hebergeant la base de donnees (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 des bases de donnees" echo "(ce login ne sera utilisé qu'une seule fois, pour la creation des bases)" #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'" 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 "(defaut=root) [root/bd_existante/...] :" read bddAdminName if [ -z $bddAdminName ] ; then bddAdminName="root" fi echo "==> SGBD admin login = $bddAdminName" echo echo "Entrez le mot de passe de ce login privilegié :" read -s bddAdminPass fi # Configuration BD test et prod dans fichier config/app.php # - 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 echo "Entrez le nom de la BDD à utiliser pour l'inventaire (defaut=labinvent) :" read bddName if [ -z $bddName ] ; then bddName="labinvent" ; fi echo "==> Nom de la BDD = $bddName" echo sed -e "s/'database' => 'database'/'database' => '$bddName'/" -i $dbConfigFile # - BD test default_test_db_name="test_labinvent2" echo "Entrez maintenant le nom de la BDD de TEST à utiliser pour l'inventaire (defaut=$default_test_db_name) :" read bddName_test if [ -z $bddName_test ] ; then bddName_test=$default_test_db_name ; fi echo "==> Nom de la BDD de test = $bddName_test" sed -e "s/'database' => 'test_database'/'database' => '$bddName_test'/" -i $dbConfigFile sed -e "s/'username' => 'test_username'/'username' => 'superadmin'/" -i $dbConfigFile sed -e "s/'password' => 'test_password'/'password' => 'superadmin'/" -i $dbConfigFile # Attention, le login doit faire maximum 16 caracteres, car Mysql ne supporte pas plus defaultBddUserName=${bddName:0:12}user echo 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 utilisé par le logiciel pour acceder et modifier la BD d'inventaire." 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 (defaut=$defaultBddUserName) :" read bddUserName if [ -z $bddUserName ] ; then bddUserName=$defaultBddUserName ; fi echo "==> BDD inventaire user login = $bddUserName" sed -e "s/'username' => 'username'/'username' => '$bddUserName'/" -i $dbConfigFile sed -e "s/'username' => 'superadmin'/'username' => '$bddUserName'/" -i $dbConfigFile echo echo "Entrez le mot de passe de cet utilisateur :" read -s bddUserPass echo "==> BDD inventaire user pass = $bddUserPass" 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 echo if [ $BDD == "O" ] ; then cd database/ echo echo "Creation script de construction de la BD... (./database/build.sql)" [[ -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_from_existing_bd.sql > ./build.sql # (1) On crée un fichier vide echo "" > ./build.sql else # (1) Instructions de création de la BD cat ./create_database.sql > ./build.sql fi # (2) Instructions de création des tables #cat ./labinvent_last_version_from_scratch.sql >> ./build.sql cat ./create_tables.sql >> ./build.sql # (3) Insertions des données de base indispensables (surtout la table configurations) cat ./insert_tables_default_data_general.sql >> ./build.sql # 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 echo 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 (defaut=O) [O/N] ?" read rep if [ -z $rep ] || [ $rep == "O" ] || [ $rep == "o" ] || [ $rep == "Oui" ] || [ $rep == "oui" ] || [ $rep == "OUI" ]; then echo "==> Les données IRAP seront installées dans la BDD" #cat ./Insert_TablesFunct.sql >> ./build.sql cat ./insert_tables_default_data_IRAP.sql >> ./build.sql else echo "==> Pas d'install de donnees IRAP dans la base" fi fi #rep=" " cat ./insert_superadmin_user.sql >> ./build.sql echo 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 (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 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 echo "Voulez-vous installer quelques utilisateurs supplémentaires (bidons, 1 par profil) dans la base de donnees (vous pourrez ensuite changer leur nom dans l'application, ou meme les supprimer) (defaut=O) [O/N] ?" read rep if [ -z $rep ] || [ $rep == "O" ] || [ $rep == "o" ] || [ $rep == "Oui" ] || [ $rep == "oui" ] || [ $rep == "OUI" ]; then echo "==> Oui" echo "Ajout de quelques utilisateurs supplementaires dans la base (Mot de passe par défaut : login)" cat ./insert_fake_users.sql >> ./build.sql fi # Remplacement des "use mydb" par "use $bddName" sed -e "s/_mydb_/$bddName/" -i ./build.sql sed -e "s/_mydbtest_/$bddName_test/" -i ./build.sql echo echo echo "----------------------------------" echo "E - CRÉATION DE LA BASE DE DONNÉES" echo "----------------------------------" echo echo "Je vais maintenant procéder à la création de la BDD inventaire (Attention, votre serveur de BD doit etre demarré), ok ?" echo "...[taper une touche]..." read rep if [ $bddAdminName == 'bd_existante' ] ; then mysql --user=$bddUserName --password="$bddUserPass" -h $bddIp < ./build.sql else #echo "mysql --user=$bddAdminName --password="$bddAdminPass" -h $bddIp < ./build.sql" mysql --user=$bddAdminName --password="$bddAdminPass" -h $bddIp < ./build.sql fi echo "==> Done (a verifier quand même)" echo "NB: " echo " Si jamais il y a eu des erreurs lors de la création de la BD," echo " veuillez modifier à la main le script de création de la BD qui est ../database/build.sql" echo " puis exécutez à la main cette ligne pour re-créer la BDD :" #echo " $ mysql --user=$bddAdminName --password="$bddAdminPass" -h $bddIp < ../database/build.sql" echo " $ mysql --user=$bddAdminName --password="votre-mot-de-pass-admin-de-mysql" -h $bddIp < ../database/build.sql" cd ../ fi # BDD = O echo echo echo "--------------------------------------------" echo "F - Passage de l'application en mode INSTALL" echo "--------------------------------------------" cd database/ chmod +x mode_panique.sh ./mode_panique.sh echo echo "*** FIN DE L'INSTALLATION ***" echo echo "POUR INFO:" echo "- le script de création de la BD est ./database/build.sql" echo "- le fichier de configuration config/app.php a été écrasé, vous pouvez retrouver votre ancienne configuration dans le fichier app.php.ORIG." echo echo "Merci de poursuivre maintenant en suivant scrupuleusement la documentation" 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)"