#! /bin/bash # This file is part of MedShakeEHR. # # Copyright (c) 2020 # Michaël Val # MedShakeEHR is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # any later version. # # MedShakeEHR is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with MedShakeEHR. If not, see . # Installateur de base # # @author Michaël Val # @contrib B-Yasmina selectMsehrPath() { read -er -i "$msehrPath" -p "Choix du dossier d'installation [défaut : /opt/ehr] : " input msehrPath="${input:-$msehrPath}" } selectPackages() { echo "Installation des dépendances de MedShakeEHR minimales, tapez 1 [défaut]" echo "Installation de MedShakeEHR avec Orthanc (Phonecapture, Echographe ...), tapez 2" echo "Ne rien installer, tapez 3" read -er -i "$selectInstall" -p "Choix : " input selectInstall="${input:-$selectInstall}" case $selectInstall in "1" ) packagesInstall ;; "2" ) msehrDep="${msehrDep} ${extraDicom}" packagesInstall orthancConfig ;; "3" ) ;; * ) echo "Mauvaise valeur saisie" selectPackages ;; esac } packagesInstall(){ apt update && apt upgrade -y && apt install -y $msehrDep } orthancConfig(){ read -r -p "Choix du nom de l'utilisateur d'Orthanc : " orthancUser echo while true; do while true; do read -s -r -p "Choix du mot de passe utilisateur d'Orthanc (ne pas utiliser les caractères : \"'$,[]*?{}~#%\<,>|^; ) : " orthancPswd echo [[ $orthancPswd != *@($caracteres_interdits)* ]] && break || echo "Mot de passe utilisateur d'Orthanc invalide: ne pas inclure de caractères interdits. Veuillez choisir un nouveau mot de passe." done read -s -r -p "Confirmation du mot de passe : " orthancPswd1 echo [ "$orthancPswd" = "$orthancPswd1" ] && break || echo "Mot de passe non correspondant: veuillez reessayez." done sed -i 's/"AuthenticationEnabled" : false,/"AuthenticationEnabled" : true,/' /etc/orthanc/orthanc.json sed -i "s|// \"alice\" : \"alicePassword\"|\"$orthancUser\" : \"$orthancPswd\"|" /etc/orthanc/orthanc.json } selectLampConfig() { read -er -i "$selectLampConfig" -p "Vous souhaitez que le serveur LAMP soit configuré par défaut, tapez 1 [défaut], vous voulez configurer le serveur LAMP tapez 2, si vous l'avez déjà configuré tapez 3 : " input selectLampConfig="${input:-$selectLampConfig}" case $selectLampConfig in "1" ) certGen apacheConfig mariadbConfig ;; "2" ) selectdomain certGen apacheConfig mariadbConfig ;; "3" ) ;; * ) echo "Mauvaise valeur saisie" selectLampConfig ;; esac } selectdomain() { read -er -i "$msehrDom" -p "Choix du domaine [défaut : msehr.local] : " input msehrDom="${input:-$msehrDom}" } certGen() { mkdir /etc/ssl/"$msehrDom" cd /etc/ssl/"$msehrDom" || exit openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout "$msehrDom".key -out "$msehrDom".crt -subj "/CN=$msehrDom" -addext "subjectAltName=DNS:$msehrDom" } apacheConfig() { ## Configuration vhost http echo " ServerName $msehrDom ServerAlias msehr ehr medshakeehr MedShakeEHR RedirectMatch permanent ^(.*)$ https://$msehrDom\$1 ServerName $msehrDom ServerAlias msehr ehr medshakeehr MedShakeEHR DocumentRoot $msehrPath/public_html RewriteEngine On SSLEngine On SSLCertificateFile /etc/ssl/$msehrDom/$msehrDom.crt SSLCertificateKeyFile /etc/ssl/$msehrDom/$msehrDom.key Options FollowSymLinks AllowOverride all Require all granted ErrorLog /var/log/apache2/error.$msehrDom.log CustomLog /var/log/apache2/access.$msehrDom.log combined " > /etc/apache2/sites-available/"$msehrDom".conf a2enmod rewrite headers ssl a2dissite 000-default.conf default-ssl.conf a2ensite "$msehrDom " sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-available/security.conf sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf-available/security.conf ## Réglage php.ini vphp=$(php -r "echo PHP_VERSION;" | cut -c1-3) sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 20M/' /etc/php/"$vphp"/apache2/php.ini sed -i 's/post_max_size = 8M/post_max_size = 20M/' /etc/php/"$vphp"/apache2/php.ini sed -i 's/;max_input_vars = 1000/max_input_vars = 10000/' /etc/php/"$vphp"/apache2/php.ini service apache2 restart } mariadbConfig() { while true; do while true; do read -s -r -p "Choix du mot de passe administrateur (root) de la base de données (ne pas utiliser les caractères : \"'$,[]*?{}~#%\<,>|^; ) : " mysqlRootPswd echo [[ $mysqlRootPswd != *@($caracteres_interdits)* ]] && break || echo "Mot de passe administrateur root invalide: ne pas inclure de caractères interdits. Veuillez choisir un nouveau mot de passe." done read -r -s -p "Confirmation du mot de passe : " mysqlRootPswd1 echo [ "$mysqlRootPswd" = "$mysqlRootPswd1" ] && break || echo "Mot de passe non correspondant: veuillez reessayez." done echo read -er -i "$msehrDbName" -p "Choix du nom de la base de donnée (défaut : medshakeehr) : " input msehrDbName="${input:-$msehrDbName}" echo read -r -p "Choix du nom de l'utilisateur de la base de données : " mysqlUser echo while true; do while true; do read -r -s -p "Choix du mot de passe utilisateur de la base de données (ne pas utiliser les caractères : \"'$,[]*?{}~#%\<,>|^; ) : " mysqlUserPswd echo [[ $mysqlUserPswd != *@($caracteres_interdits)* ]] && break || echo "Mot de passe utilisateur invalide: ne pas inclure les caractères interdits. Veuillez choisir un nouveau mot de passe." done read -r -s -p "Confirmation du mot de passe : " mysqlUserPswd1 echo [ "$mysqlUserPswd" = "$mysqlUserPswd1" ] && break || echo "Mot de passe non correspondant: veuillez reessayez." done service mysql start mysql < "$msehrPath"/public_html/MEDSHAKEEHRPATH su www-data -s/bin/bash -c "php $msehrPath/public_html/install.php -N -s localhost -d $msehrDbName -u $mysqlUser -p $mysqlUserPswd -r https -D $msehrDom" selectRemoveInstallFiles } selectRemoveInstallFiles() { read -er -i "$selectRemove" -p "Si vous souhaitez détruire les fichiers d'installation tapez 1 [défaut], si vous souhaitez les conserver tapez 2 : " input selectRemove="${input:-$selectRemove}" case "$selectRemove" in "1" ) removeInstallFiles ;; "2" ) echo "Pensez à configurer votre pare-feu et les mises à jours, plus d'infos sur https://c-medshakeehr.fr/doc.";; * ) echo "Mauvaise valeur saisie" selectRemoveInstallFiles ;; esac } removeInstallFiles() { rm -r /tmp/"$vRelease".zip /tmp/MedShakeEHR-base-"$version" /tmp/debian-bash-installer.sh echo "Pensez à configurer votre pare-feu et les mises à jours, plus d'infos sur https://c-medshakeehr.fr/doc" } selectInstall(){ echo "Bienvenue, ce script va vous guider lors de l'installation de MedShakeEHR. Si vous avez besoin d'aide au cours de l'installation : https://c-medshakeehr.fr/doc" read -er -i "$persoInstall" -p "Pour commencer, si vous souhaitez installer MedShakeEHR avec ses valeurs par défaut, tapez 1 [défaut] ou personnaliser l'installation, tapez 2 : " input persoInstall="${input:-$persoInstall}" case "$persoInstall" in "1" ) packagesInstall certGen apacheConfig mariadbConfig msehrLatest ;; "2" ) selectMsehrPath selectPackages selectLampConfig selectVersion ;; * ) echo "Mauvaise valeur saisie" selectInstall ;; esac } # Variables globales par défauts. caracteres_interdits="\"|\'|\$|\,|\[|\]|\*|\?|\{|\}|\~|\#|\%|\<|\>|\||\^|\;" persoInstall=1 msehrPath=/opt/ehr selectInstall=1 selectLampConfig=1 msehrDom=msehr.local msehrDbName=medshakeehr selectVersion=1 selectRemove=1 msehrDep="apache2 composer curl ghostscript git imagemagick mariadb-server ntp pdftk-java php php-bcmath php-curl php-gd php-imagick php-imap php-intl php-mysql php-soap php-xml php-yaml php-zip" extraDicom="orthanc" clear selectInstall