installation.sh 12.9 KB
#!/bin/bash

# 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

# 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

#Configurer l'application
# Donner le nom du groupe webService
echo
echo "LabInvent Copyright (C) 2012-2016 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: www, apache, nobody, admin, www-data, ...)"
  	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

# Donner les droits et le groupe aux dossiers 
echo "Mise à jour des droits des dossiers..."
##sudo chgrp -R $grp ./tmp/
##sudo chmod -R 775 ./tmp/


# 1) 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/phpqrcode/
chmod -R 775 ./vendor/phpqrcode/
##sudo touch ./vendor/phpqrcode/errors.txt
touch ./vendor/phpqrcode/errors.txt
##sudo chmod 775 ./vendor/phpqrcode/errors.txt
chmod 775 ./vendor/phpqrcode/errors.txt
sudo chgrp -R $grp ./vendor/phpqrcode/

##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 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)
# Le dossier app/tmp doit etre modifiable par le serveur web :
#chmod -R 775 ./tmp/
sudo chmod -R 777 ./tmp/
sudo chgrp -R $grp ./tmp/
echo "==>Done"




# CONFIGURATION (Database and LDAP)

cakephpAppPath=./
configPath=$cakephpAppPath/config
#myconfigFile=$configPath/config.php
dbConfigFile=$configPath/app.php
myConfigFile=$configPath/app.php
configFile=$configPath/app.php

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

# - 1) Configuration : LDAP
echo
echo "Configuration de l'application (LDAP) :"
echo
echo "On utilisera un Ldap (conseil: pour une premiere installation, repondez Non) : Oui/Non ? (defaut=Non)"
read rep
LDAP="Non"
if  [ -z $rep ] || [ $rep = "N" ] || [ $rep = "n" ] || [ $rep = "Non" ]  || [ $rep = "non" ]  || [ $rep = "NON" ]; then
      echo "==> Pas de serveur Ldap. Utilisation des seuls utilisateurs qui sont dans la base de donnees. "
else 
      LDAP="Oui"
      echo "==> Serveur Ldap"
fi 

#if [ $LDAP != "Oui" ]; then
    #sed -i "s/VAR_LDAP/FALSE/" $myConfigFile
#else 
if [ $LDAP == "Oui" ]; then
    #sed -i "s/VAR_LDAP/TRUE/" $myConfigFile
    #sed -i "s/'USE_LDAP' => FALSE/'USE_LDAP' => TRUE/" $myConfigFile
    sed -e "s/'USE_LDAP' => FALSE/'USE_LDAP' => TRUE/" -i $myConfigFile
    # Set LDAP address
    echo "Entrez l'adresse du serveur ldap (defaut=localhost)"
    read ldapIp
    if  [ -z $ldapIp ] ; then
	    ldapIp="localhost"
    fi
    ##sed -i "s/'192.168.1.65'/'$ldapIp'/" $myConfigFile
    #sed -i "s/'ldap-servername-or-ip'/'$ldapIp'/" $myConfigFileq
    sed -e "s/'ldap-servername-or-ip'/'$ldapIp'/" -i $myConfigFile
    # Set LDAP port
    echo "Entrez le numéro de port du serveur ldap (defaut=389)"
    read ldapPort
    if  [ -z $ldapPort ] ; then
	    ldapPort="389"
    fi
    #sed -i "s/389/$ldapPort/" $myConfigFile
    sed -e "s/389/$ldapPort/" -i $myConfigFile

    # Set web service authentication
    ##echo "Quelle est la clé à utiliser pour les authentifications des services Web ?"
    ##read webServiceKey
    ###read -s webServiceKey
    ##sed -i "s/private $key = 'mykeyislongenoug';/private $key = '$webServiceKey';/" $cakephpAppPath/Controller/ServicesWebController.php
fi



# - 2) Configuration : DATABASE

echo
echo "Informations sur la base de donnee "

echo "Voulez-vous creer la base de donnees, Oui/Non ? (par defaut, Oui) :"
read rep
##if  [ -z $rep ] || [ $rep = "N" ] || [ $rep = "n" ] || [ $rep = "Non" ]  || [ $rep = "non" ]  || [ $rep = "NON" ]; then
if  [ -z $rep ] ; then
	rep="Oui"
fi
if  [ $rep = "N" ] || [ $rep = "n" ] || [ $rep = "Non" ]  || [ $rep = "non" ]  || [ $rep = "NON" ]; then
      BDD="Non"
      echo "Pas de creation de la base de donnees"
else 
      BDD="Oui"
      echo "Creation de la base de donnees"
fi

if [ $BDD = "Oui" ]; then

	# Copy sample DATABASE config file to real personal file (make a copy first if already exists !)
	[[ -f $dbConfigFile ]] && cp -p $dbConfigFile $dbConfigFile.ORIG
	cp $configPath/app.default.php $dbConfigFile
	#cp $configPath/app.default.php $configPath/app.php

# 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
#sed -i "s/192.168.1.70/$bddIp/" $dbConfigFile
sed -e "s/192.168.1.70/$bddIp/" -i $dbConfigFile
# sur Mac OS 10.10 (Yosemite), utiliser plutot cette syntaxe :
#sed -e "s/192.168.1.70/$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
#sed -i "s/mydb/$bddName/" $dbConfigFile
sed -e "s/mydb/$bddName/" -i $dbConfigFile

echo "Entrez le login privilegie vous donnant le droit de CREER la Base de donnees inventaire (NB: ce login ne sera utilise qu'une seule fois, pour la creation de la base ; 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


# 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 -i "s/root/$bddUserName/" $dbConfigFile
sed -e "s/root/$bddUserName/" -i $dbConfigFile
echo "Entrez le mot de passe de cet utilisateur :"
read -s bddUserPass
# Cela ne s ecrit pas sur l ecran 
# read -s bddPassword
#sed -i "s/pwdrt/$bddUserPass/" $dbConfigFile
sed -e "s/pwdrt/$bddUserPass/" -i $dbConfigFile
echo


# DATABASE INSTALLATION 

cd database/

#if [ $BDD = "Non" ]; then
  # PAS DE BASE DE DONNEES
#  cat /dev/null > ./build.sql
#else

  echo "Creation script de construction."
  [[ -f build.sql ]] && cp -p build.sql build.sql.ORIG
  cat ./labinvent_2.0_19-04-16.sql > ./build.sql
  # Ajout des contraintes
  #cat ./Upd_TableConstraints.sql >> ./build.sql
  #sed -i "s/bddUserName/$bddUserName/" ./build.sql
  sed -e "s/bddUserName/$bddUserName/" -i ./build.sql
  sed -e "s/bddUserPass/$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 = "N" ] || [ $rep = "n" ] || [ $rep = "Non" ]  || [ $rep = "non" ]  || [ $rep = "NON" ]; then
    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 ./Upd_TableConstraints.sql >> ./build.sql
      #cat ./labinvent_2.0_insert-irap_19-04-16.sql >> ./build.sql
    else 
      echo "Pas d'install de donnees IRAP dans la base"
    fi
fi

rep=" "
##echo "Caracteristation des users"
echo "Maintenant, nous allons definir l utilisateur qui sera superadministrateur de l application, ca peut etre VOUS :"
##if  [ $LDAP = "Oui" ] || [ -z $rep ] || [ $rep = "N" ] || [ $rep = "n" ] || [ $rep = "Non" ]  || [ $rep = "non" ]  || [ $rep = "NON" ]; then
    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 -i "s/Nom/$UserName/" ./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
    sed -e "s/'__@__'/'$mel'/" -i ./build.sql
    #sed -e "s/mydb/$bddName/" -i ./build.sql
##fi

if  [ $LDAP != "Oui" ]; then
	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"
    		cat ./Insert_FakeUsers.sql >> ./build.sql
    		#sed -e "s/mydb/$bddName/" -i ./build.sql
	fi
fi

    #sed -e "s/mydb/$bddName/" -i ./build.sql

#cd ..

echo
#if [ $SQL = "Oui" ]; then
#if [ $BDD = "Oui" ]; then
    #sed -i "s/mydb/$bddName/" ./database/build.sql
    #sed -e "s/mydb/$bddName/" -i ./database/build.sql
    sed -e "s/mydb/$bddName/" -i ./build.sql
    echo "Creation base de donnees (Attention, votre serveur de BD doit etre demarre)"
    ##mysql --user=$bddUserName --password=$bddPassword -h $bddIp $bddName < ./database/build.sql
    #mysql --user=$bddAdminName --password=$bddAdminPass -h $bddIp < ./database/build.sql
    mysql --user=$bddAdminName --password=$bddAdminPass -h $bddIp < ./build.sql
    echo "Base creee (a verifier)"
#fi

cd ../

fi # $BDD o/n


# Creation d'un lien vers le fichier de LOG :
# echo
# echo "Creation de quelques liens pratiques"
# echo
# ln -fs config/ CONFIG
# ln -fs tmp/logs/labinvent.log LOG

echo
echo "*** FIN DE L'INSTALLATION ***"
echo
echo "Si vous voulez le conserver, le script de creation de la BD est database/build.sql"
echo
echo "MAINTENANT :"
echo "1) Verifiez que la BD d'inventaire ($bddName) a bien ete cree (avec phpmyadmin par exemple)"
echo "2) Verifiez le contenu de votre fichier de configuration de la BD (cakephp/app/Config/database.php)"
echo "3) Testez l'accès à l'application par le web"
echo "Pour cela, suivez la suite des instructions qui sont dans le fichier INSTALLATION.txt (à la racine du projet), que vous avez normalement deja commence a lire."
echo
echo "N'oubliez pas 3 choses importantes (voir la doc INSTALLATION.txt pour plus de details) :"
echo "1) Passer en mode LDAP (si vous le souhaitez et si ca n'est pas deja fait)"
echo "2) 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 "3) Personnaliser le logiciel pour votre entite (laboratoire) (via le fichier de configuration config/app.php"
echo