installation.sh 13.2 KB
#!/bin/bash

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 si on est dans le repertoire install/ :
#if [ $0 != "install/installation.sh" ] ; then
#	cd ../
#fi

cd ../

#Configurer l'application
# Donner le nom du groupe webService
echo
echo "LabInvent Copyright (C) 2012-2017 IRAP (Toulouse - France)"
echo "Auteurs : Etienne Pallier <etienne.pallier@irap.omp.eu>, Elodie Bourrec <elodie.bourrec@irap.omp.eu>, Alexandre Cases <alexandre.cases@etu.univ-tlse2.fr>"
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), 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

#Creation des dossiers temporaires (tmp, logs, ...)
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

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"

# Donner les droits et le groupe aux dossiers 
echo "Mise à jour des droits des dossiers..."


# 1) POUR LES QRCODES
# Ajouter les droits en ecriture pour la creation des qrcodes
# phpqrcode write its errors into its folder ...
chmod -R 775 ./vendor/phpqrcode/
touch ./vendor/phpqrcode/errors.txt
chmod 775 ./vendor/phpqrcode/errors.txt
sudo chgrp -R $grp ./vendor/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/

# 2) 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/

# 3) 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"


# CONFIGURATION (Database and LDAP)
cakephpAppPath=./
configPath=$cakephpAppPath/config
dbConfigFile=$configPath/app.php
myConfigFile=$configPath/app.php
configFile=$configPath/app.php


# Mode install or update
echo "Voulez-vous effectuer une premiere installation ou une mise à niveau ? ('install'/'update', par défaut 'install') :"
read rep
if  [ -z $rep ] ; then
    	rep="install"
fi

if [ $rep == "install" ] ; then
	mode="install"
	echo "Utilisation mode install"
else 
	mode="update"
	echo "Utilisation mode update"
fi


# Copy sample GENERAL config file to real personal file (make a copy first if already exists !)
[[ -f $myConfigFile ]] && cp -p $myConfigFile $myConfigFile.ORIG
if [ $mode == "install" ] ; then
	cp $configPath/app.default.php $myConfigFile
fi


# - 2) Configuration : DATABASE

# 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 "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) :"
read bddAdminName
if  [ -z $bddAdminName ] ; then
	bddAdminName="root"	
fi
echo "==> SGBD admin login = $bddAdminName"
echo "Entrez le mot de passe de ce login privilegie (sinon, entrer le mot de passe de root) :"
read -s bddAdminPass
echo

if [ $mode == 'install' ] ; then
	echo
	echo "Informations sur la base de donnee "
	echo "Voulez-vous creer la base de donnees, Oui/Non ? (par defaut, Non) :"
	read rep
	if  [ -z $rep ] ; then
		rep="Non"
	fi
	if  [ $rep == "O" ] || [ $rep == "o" ] || [ $rep == "Oui" ]  || [ $rep == "oui" ]  || [ $rep == "OUI" ]; then
  		BDD="Oui"
  		echo "Creation de la base de donnees"
	else 
      		BDD="Non"
      		echo "Pas de creation de la base de donnees"
	fi
else 
	BDD="Non"
fi


if [ $BDD == "Oui" ] ; then
	echo "Entrez le nom de la base a utiliser pour l'inventaire (defaut=labinvent)"
	read bddName
	if  [ -z $bddName ] ; then
		bddName="labinvent"
	fi
	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 "==> BD inventaire user login = $bddUserName"
	sed -e "s/'username' => 'username'/'username' => '$bddUserName'/" -i $dbConfigFile
	echo "Entrez le mot de passe de cet utilisateur :"
	read -s bddUserPass
	sed -e "s/'password' => 'password'/'password' => '$bddUserPass'/" -i $dbConfigFile
fi

# INFORMATIONS Base de 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

# DATABASE INSTALLATION 
cd database/
echo "Creation script de construction."
[[ -f build.sql ]] && cp -p build.sql build.sql.ORIG

if [ $BDD == "Oui" ] ; then
	#Structure de la base présente dans le fichier "labinvent_2.1_12-05-16.sql"
	cat ./labinvent_2.1_12-05-16.sql > ./build.sql

	# Ajout login & mdp utlisateur application dans le script build.sql
	sed -e "s/'mydb'/'$bddUserName'/" -i ./build.sql
	sed -e "s/'mydb1'/'$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

	rep=" "
	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) :"
    	cat ./Insert_Users.sql >> ./build.sql 
    	echo "- Entrez ses (vos) Nom et Prenom (sous forme : Nom Prenom ) :"
   	read UserName UserPrenom
    	echo "- Entrez son (votre) login (par exemple, votre login ldap) :"
    	read login 
    	# par defaut, on met superadmin (utilise en fake ldap)
    	if [ -z $login ] ; then
        	login="superadmin"
    	fi
    	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 "Voulez-vous installer quelques utilisateurs 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 "Creation base de donnees (Attention, votre serveur de BD doit etre demarre)"
    	mysql --user=$bddAdminName --password=$bddAdminPass -h $bddIp < ./build.sql
    	echo "Base creee (a verifier)"
else
	#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
fi


cd ../

echo
echo "*** FIN DE L'INSTALLATION ***"
echo

echo "Pour continuer, veuillez visiter le site https://projects.irap.omp.eu/projects/inventirap/wiki/Installation#C-CONFIGURATION-DU-SITE-WEB"

#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)"