#!/bin/bash # Pour pouvoir ajouter les donnees IRAP (categories...) pendant l'installation, mettre à 1 INSTALL_DATA_IRAP=1 # Chemins vers fichier de conf cakephp_app_path=./ config_path=$cakephp_app_path/config config_file=$config_path/app.php default_config_file=$config_path/app.default.php # 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 # Acceptation de la licence utilisateur echo cat ../LICENSE echo echo "J'accepte ces conditions d'utilisation avant de continuer (o/n) :" read rep [[ -z $rep ]] && rep="n" [[ $rep != "o" && $rep != "O" ]] && exit echo "Conditions d'utilisation acceptées : taper une touche pour continuer" read rep # # ------------ 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 - CRÉATION DU FICHIER DE CONSTRUCTION DE LA BASE DE DONNÉES (build.sql)" echo "---------------------------------" # - Copie perso du fichier de config par défaut (Si INSTALL mode) # (on crée une copie privée (perso) du fichier de config par défaut (sauvegarde aussi la version existante)) [[ -f $config_file ]] && cp -p $config_file $config_file.ORIG [[ $mode == "install" ]] && cp $default_config_file $config_file #[[ $mode == "install" ]] && cp $config_path/app.default.php $config_file # - (re)-Création de la BD ? 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 BD sera (re-)créée" else echo "==> Pas de création de la BD (ce qui suppose qu'elle 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" #sed -e "s#/\*d\*/'host' => 'localhost'//\*d\*/'host' => '$bddIp'/" -i $config_file sed -e "s/\*d\*\/'host' => 'localhost'/\*d\*\/'host' => '$bddIp'/" -i $config_file # - Set Mysql login 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 # - Nom de la BD prod default="labinvent" echo echo "Entrez le nom de la BD à utiliser pour l'inventaire (defaut=$default) :" read answer if [ -z $answer ] ; then answer=$default ; fi bddName=$answer echo "==> Nom de la BD = $bddName" echo sed -e "s/'database' => 'database'/'database' => '$bddName'/" -i $config_file # - Nom de la BD test #default="test_labinvent2" default="test_labinvent" echo "Entrez maintenant le nom de la BD de TEST à utiliser (pour l'exécution des tests) (defaut=$default) :" read answer if [ -z $answer ] ; then answer=$default ; fi bddName_test=$answer echo "==> Nom de la BD de test = $bddName_test" sed -e "s/'database' => 'test_database'/'database' => '$bddName_test'/" -i $config_file sed -e "s/'username' => 'test_username'/'username' => 'superadmin'/" -i $config_file sed -e "s/'password' => 'test_password'/'password' => 'superadmin'/" -i $config_file # - Set login (+ pass) de l'application pour accéder à la BD (lecture/ecriture) # (Attention, le login doit faire maximum 16 caracteres, car Mysql ne supporte pas plus) # -- login default=${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=$default) :" read answer if [ -z $answer ] ; then answer=$default ; fi bddUserName=$answer echo "==> BD inventaire user login = $bddUserName" # Pourquoi 2 fois la même chose ??? sed -e "s/'username' => 'username'/'username' => '$bddUserName'/" -i $config_file sed -e "s/'username' => 'superadmin'/'username' => '$bddUserName'/" -i $config_file # -- pass 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 $config_file sed -e "s/'password' => 'superadmin'/'password' => '$bddUserPass'/" -i $config_file # - Création du Script de construction "build.sql" #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)" # (0) On sauvegarde build.sql s'il existe déjà # (le fichier build.sql est ignoré par git) [[ -f build.sql ]] && cp -p build.sql build.sql.ORIG # (1) DATABASE et USERS : création du fichier build.sql avec les 1ères instructions de création de la BD et users (prod et test) # (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 #cat ./create_database.sql > ./build.sql cat ./DB1_create_database_and_users.sql > ./build.sql # Set 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 fi # (2) TABLES : ajout des instructions de création des tables #cat ./labinvent_last_version_from_scratch.sql >> ./build.sql #cat ./create_tables.sql >> ./build.sql cat ./DB2_create_tables.sql >> ./build.sql # (3) DATA obligatoires : ajout des données de base indispensables (surtout la table configurations) #cat ./insert_tables_default_data_general.sql >> ./build.sql cat ./DB3_insert_tables_default_data_mandatory.sql >> ./build.sql # (4) (optionnel) DATA optionnelles (IRAP only) : ajout données IRAP (catégories, groupes) 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 cat ./DB4_insert_tables_default_data_IRAP_optional.sql >> ./build.sql else echo "==> Pas d'install de donnees IRAP dans la base" fi fi # (5) Ajout du user superadmin (dans table 'users') 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 #cat ./insert_superadmin_user.sql >> ./build.sql cat ./DB5_insert_superadmin_user.sql >> ./build.sql sed -e "s/Nom/$UserName/" -i ./build.sql sed -e "s/Prenom/$UserPrenom/" -i ./build.sql sed -e "s/userlogin/$login/" -i ./build.sql # (6) (optionnel) Ajout de quelques users (bidons) par défaut (1 par profil) 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 cat ./DB6_insert_fake_users_optional.sql >> ./build.sql fi # (7) Remplacement des "use _mydb_" par "use $bddName" (idem pour bd test) 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 (à partir du fichier build.sql)" echo "----------------------------------" echo echo "Je vais maintenant procéder à la création de la BD 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 (à 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)"