From 684aeeb2f3cbfb8a38989e882deb81fd049b2a96 Mon Sep 17 00:00:00 2001 From: frju365 Date: Thu, 2 Feb 2017 19:21:27 +0100 Subject: [PATCH] Create install --- scripts/install | 153 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 scripts/install diff --git a/scripts/install b/scripts/install new file mode 100644 index 0000000..c809ec1 --- /dev/null +++ b/scripts/install @@ -0,0 +1,153 @@ +#!/bin/bash + +source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script + +CLEAN_SETUP () { +# Nettoyage des résidus d'installation non pris en charge par le script remove. +# Pas de nettoyage supplémentaire nécessaire ici... + echo "" +} +TRAP_ON # Active trap pour arrêter le script si une erreur est détectée. + +# Retrieve arguments +domain=$YNH_APP_ARG_DOMAIN +path=$YNH_APP_ARG_PATH +admin=$YNH_APP_ARG_ADMIN +is_public=$YNH_APP_ARG_IS_PUBLIC + +app=$YNH_APP_INSTANCE_NAME + +# Source app helpers +source /usr/share/yunohost/helpers + +script_dir=$PWD + +# Vérifie que les variables ne sont pas vides. +CHECK_VAR "$app" "app name not set" +CHECK_VAR "$script_dir" "script_dir not set" + + +CHECK_USER "$admin" # Vérifie la validité de l'user admin + +CHECK_PATH # Vérifie et corrige la syntaxe du path. +CHECK_DOMAINPATH # Vérifie la disponibilité du path et du domaine. + +CHECK_FINALPATH # Vérifie que le dossier de destination n'est pas déjà utilisé. + +# Modifie le domaine pour qu'il passe dans une regex +domain_regex=$(echo "$domain" | sed 's@-@.@g') +CHECK_VAR "$domain_regex" "domain_regex empty" + +FIND_PORT 8095 # Cherche un port libre. + +# Enregistre les infos dans la config YunoHost +ynh_app_setting_set $app admin $admin +ynh_app_setting_set $app domain $domain +ynh_app_setting_set $app is_public $is_public +ynh_app_setting_set $app port $port +ynh_app_setting_set $app always_encrypt $always_encrypt + + +# Créer le repertoire de destination et stocke son emplacement. +sudo mkdir "$final_path" +ynh_app_setting_set $app final_path $final_path + +SETUP_SOURCE "lutim.tar.gz" # Télécharge la source, décompresse et copie dans $final_path + +# Copie le fichier de config nginx +sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf + + +# Installation de perlmagick, interface perl pour imagemagick et de carton, gestionnaire de dépendances perl +sudo apt-get update +sudo apt-get install carton perlmagick -qy + +## Copie et configuration du fichier de conf. +sudo cp ../conf/lstu.conf.template "$final_path/lstu.conf" +sudo sed -i "s@__DOMAIN__@$domain@g" "$final_path/lstu.conf" +sudo sed -i "s@__PATH__@$path@g" "$final_path/lstu.conf" +sudo sed -i "s@__PORT__@$port@g" "$final_path/lstu.conf" + + +codename=$(lsb_release -a 2>/dev/null | grep Codename | cut -f 2) +CHECK_VAR "$codename" "codename empty" +ynh_app_setting_set $app codename $codename +if [ "$codename" = "wheezy" ] +then # On utilise le script init pour wheezy. + # Mise en place du script init + sudo cp ../conf/lstu.init /etc/init.d/lstu + sudo cp ../conf/lstu.default /etc/default/lstu + sudo chmod +x /etc/init.d/lstu + sudo chown root: /etc/init.d/lstu /etc/default/lstu + sudo sed -i "s@__FINALPATH__@$final_path/@g" /etc/default/lstu + ## Démarrage auto du service + sudo update-rc.d lstu defaults +else # Et le script systemd à partir de jessie + # Mise en place du script systemd + sudo cp ../conf/lstu.service /etc/systemd/system/lstu.service + sudo chown root: /etc/systemd/system/lstu.service + sudo sed -i "s@__FINALPATH__@$final_path/@g" /etc/systemd/system/lstu.service + ## Démarrage auto du service + sudo systemctl enable lstu.service +fi + +## Mise en place des crons +sudo cp ../conf/cron_lutim /etc/cron.d/$app +sudo sed -i "s@__FINALPATH__@$final_path/@g" /etc/cron.d/$app +sudo chmod +x $final_path/script/lstu + +# Configuration de logrotate +sed -i "s@__FINALPATH__@$final_path@g" ../conf/logrotate +sudo cp ../conf/logrotate /etc/logrotate.d/$app + +# Installation de lstu via carton +sudo mkdir -p /var/log/$app/ +cd $final_path +sudo carton install 2>&1 | sudo tee -a "/var/log/$app/setup_carton.log" + +# Configure le path du dossier perl en fonction de l'architecture système +arch_dir=$(ls -1 $final_path/local/lib/perl5/ | grep linux-gnu) +if [ "$?" -ne 0 ] +then + echo "Impossible de trouver le dossier relatif à l'architecture système." | sudo tee -a "/var/log/$app/setup_carton.log" + false +fi +CHECK_VAR "$arch_dir" "arch_dir empty" +sudo sed -i "s@__ARCHDIR__@$arch_dir@g" "$final_path/script/lstu" + +# Change variables in nginx configuration +sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf +sudo sed -i "s@__PORT__@$port@g" /etc/nginx/conf.d/$domain.d/$app.conf + +# Make app public or private +ynh_app_setting_set $app skipped_uris "/" +if [ "$is_public" = "No" ]; +then # Si l'app est privée, seul le visionnage des images reste public + if [ "$path" == "/" ]; then + path="" # Si path correspond à la racine, supprime le / pour éviter une erreur de la regex. + fi + ynh_app_setting_set $app protected_regex "$domain_regex$path/stats$","$domain_regex$path/manifest.webapp$","$domain_regex$path/$","$domain_regex$path/d/.*$","$domain_regex$path/m/.*$" +fi + +# Making log symbolic link to /var/log +sudo touch /var/log/$app/production.log +sudo chown www-data: /var/log/$app/production.log +sudo ln -s /var/log/$app/production.log "$final_path/log/production.log" + +# Configure les droits d'accès au fichiers +sudo chown -R www-data: $final_path + +# Start lutim +sudo service lutim start +# Set right permissions on new files created at first start +sudo chown -R www-data: "$final_path" + + +# Add lutim as a service +sudo yunohost service add lstu -l $final_path/log/production.log + + +# Recharge la configuration Nginx +sudo service nginx reload +# Régénère la configuration de SSOwat +sudo yunohost app ssowatconf