#!/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-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" 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 ../ # Revenir a la racine du projet (car on est dans le repertoire install/) : 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 # 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 "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_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 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 cat ./insert_tables_default_data_IRAP.sql >> ./build.sql else echo "Pas d'install de donnees IRAP dans la base" fi fi echo #rep=" " cat ./insert_superadmin_user.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 supplémentaires (bidons, 1 par profil) 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_fake_users.sql >> ./build.sql fi # Remplacement des "use mydb" par "use $bddName" 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_macos.sh ./mode_panique_macos.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)"