diff --git a/scripts/.fonctions b/scripts/.fonctions new file mode 100644 index 0000000..f14893d --- /dev/null +++ b/scripts/.fonctions @@ -0,0 +1,97 @@ +#!/bin/bash + +EXIT_PROPERLY () { # Provoque l'arrêt du script en cas d'erreur. Et nettoye les résidus. + exit_code=$? + if [ "$exit_code" -eq 0 ]; then + exit 0 # Quitte sans erreur si le script se termine correctement. + fi + trap '' EXIT + set +eu + echo -e "\e[91m \e[1m" # Shell in light red bold + echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" >&2 + + if type -t CLEAN_SETUP > /dev/null; then # Vérifie l'existance de la fonction avant de l'exécuter. + CLEAN_SETUP # Appel la fonction de nettoyage spécifique du script install. + fi + + # Compense le bug de ssowat qui ne supprime pas l'entrée de l'app en cas d'erreur d'installation. + sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json + + ynh_die +} + +TRAP_ON () { # Activate signal capture + set -eu # Exit if a command fail, and if a variable is used unset. + trap EXIT_PROPERLY EXIT # Capturing exit signals on shell script +} + +# We check variables are not empty +CHECK_VAR () { # Vérifie que la variable n'est pas vide. +# $1 = Variable à vérifier +# $2 = Texte à afficher en cas d'erreur + test -n "$1" || (echo "$2" >&2 && false) +} + +# Check the path value and correct it (adds / at begining and removes it at the end) +CHECK_PATH () { # Vérifie la présence du / en début de path. Et son absence à la fin. + if [ "${path:0:1}" != "/" ]; then # Si le premier caractère n'est pas un / + path="/$path" # Ajoute un / en début de path + fi + if [ "${path:${#path}-1}" == "/" ] && [ ${#path} -gt 1 ]; then # Si le dernier caractère est un / et que ce n'est pas l$ + path="${path:0:${#path}-1}" # Supprime le dernier caractère + fi +} + +# Check domain and path availibility +CHECK_DOMAINPATH () { # Vérifie la disponibilité du path et du domaine. + sudo yunohost app checkurl $domain$path -a $app +} + +# Check destination folder is not used already +CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà utilisé. + final_path=/var/www/$app + if [ -e "$final_path" ] + then + echo "This path already contains a folder" >&2 + false + fi +} + +# We check that calibre path is correct +CHECK_CALIBRE () { # Vérifie la présence du / en début de path. Et son absence à la fin. + if [ "${calibre:0:1}" != "/" ]; then # Si le premier caractère n'est pas un / + calibre="/$calibre" # Ajoute un / en début de path + fi + if [ "${calibre:${#calibre}-1}" == "/" ] && [ ${#calibre} -gt 1 ]; then # Si le dernier caractère est un / $ + calibre="${calibre:0:${#calibre}-1}" # Supprime le dernier caractère + fi +} + +SECURE_REMOVE () { # Suppression de dossier avec vérification des variables + chaine="$1" # L'argument doit être donné entre quotes simple '', pour éviter d'interpréter les variables. + no_var=0 + while (echo "$chaine" | grep -q '\$') # Boucle tant qu'il y a des $ dans la chaine + do + no_var=1 + global_var=$(echo "$chaine" | cut -d '$' -f 2) # Isole la première variable trouvée. + only_var=\$$(expr "$global_var" : '\([A-Za-z0-9_]*\)') # Isole complètement la variable en ajoutant le $ au début et en gardant uniquement le nom de la variable. Se débarrasse surtout du / et d'un éventuel chemin derrière. + real_var=$(eval "echo ${only_var}") # `eval "echo ${var}` permet d'interpréter une variable contenue dans une variable. + if test -z "$real_var" || [ "$real_var" = "/" ]; then + echo "Variable $only_var is empty, suppression of $chaine cancelled." >&2 + return 1 + fi + chaine=$(echo "$chaine" | sed "s@$only_var@$real_var@") # remplace la variable par sa valeur dans la chaine. + done + if [ "$no_var" -eq 1 ] + then + if [ -e "$chaine" ]; then + echo "Delete directory $chaine" + sudo rm -r "$chaine" + fi + return 0 + else + echo "No detected variable." >&2 + return 1 + fi +} + diff --git a/scripts/install b/scripts/install index 232cecf..5fceeb0 100755 --- a/scripts/install +++ b/scripts/install @@ -2,34 +2,9 @@ #set -eu # Charge les fonctions génériques habituellement utilisées dans le script -#source fonctions +source .fonctions # Active trap pour arrêter le script si une erreur est détectée. -EXIT_PROPERLY () { # Provoque l'arrêt du script en cas d'erreur. Et nettoye les résidus. - exit_code=$? - if [ "$exit_code" -eq 0 ]; then - exit 0 # Quitte sans erreur si le script se termine correctement. - fi - trap '' EXIT - set +eu - echo -e "\e[91m \e[1m" # Shell in light red bold - echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" >&2 - - if type -t CLEAN_SETUP > /dev/null; then # Vérifie l'existance de la fonction avant de l'exécuter. - CLEAN_SETUP # Appel la fonction de nettoyage spécifique du script install. - fi - - # Compense le bug de ssowat qui ne supprime pas l'entrée de l'app en cas d'erreur d'installation. - sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json - - ynh_die -} - -TRAP_ON () { # Activate signal capture - set -eu # Exit if a command fail, and if a variable is used unset. - trap EXIT_PROPERLY EXIT # Capturing exit signals on shell script -} - TRAP_ON # Source app helpers @@ -54,62 +29,24 @@ else fi # We check variables are not empty -CHECK_VAR () { # Vérifie que la variable n'est pas vide. -# $1 = Variable à vérifier -# $2 = Texte à afficher en cas d'erreur - test -n "$1" || (echo "$2" >&2 && false) -} - CHECK_VAR "$app" "app name not set" # Check the path value and correct it (adds / at begining and removes it at the end) -CHECK_PATH () { # Vérifie la présence du / en début de path. Et son absence à la fin. - if [ "${path:0:1}" != "/" ]; then # Si le premier caractère n'est pas un / - path="/$path" # Ajoute un / en début de path - fi - if [ "${path:${#path}-1}" == "/" ] && [ ${#path} -gt 1 ]; then # Si le dernier caractère est un / et que ce n'est pas l$ - path="${path:0:${#path}-1}" # Supprime le dernier caractère - fi -} - CHECK_PATH; # Check domain and path availibility -CHECK_DOMAINPATH () { # Vérifie la disponibilité du path et du domaine. - sudo yunohost app checkurl $domain$path -a $app -} - CHECK_DOMAINPATH # Check destination folder is not used already -CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà utilisé. - final_path=/var/www/$app - if [ -e "$final_path" ] - then - echo "This path already contains a folder" >&2 - false - fi -} - CHECK_FINALPATH # We check that calibre path is correct -CHECK_CALIBRE () { # Vérifie la présence du / en début de path. Et son absence à la fin. - if [ "${calibre:0:1}" != "/" ]; then # Si le premier caractère n'est pas un / - calibre="/$calibre" # Ajoute un / en début de path - fi - if [ "${calibre:${#calibre}-1}" == "/" ] && [ ${#calibre} -gt 1 ]; then # Si le dernier caractère est un / $ - calibre="${calibre:0:${#calibre}-1}" # Supprime le dernier caractère - fi -} - CHECK_CALIBRE; final_path=/var/www/$app # Define variables and Save app settings ynh_app_setting_set "$app" domain "$domain" -#ynh_app_setting_set "$app" path "$path" ynh_app_setting_set "$app" is_public "$is_public" ynh_app_setting_set "$app" final_path "$final_path" ynh_app_setting_set "$app" calibre "$calibre" @@ -121,10 +58,6 @@ ynh_app_setting_set "$app" finalnginxconf "$finalnginxconf" finalphpconf="/etc/php5/fpm/pool.d/${app}.conf" ynh_app_setting_set "$app" finalphpconf "$finalphpconf" -# We install dependencies -#sudo apt-get update -y -#sudo apt-get install php5-gd php5-sqlite php5-json php5-intl -y - # Install dependencies using Helpers ynh_package_install_from_equivs ../conf/cops-deps.control \ || ynh_die "Unable to install dependencies" diff --git a/scripts/remove b/scripts/remove index 8ace49c..fd71a9c 100755 --- a/scripts/remove +++ b/scripts/remove @@ -2,7 +2,7 @@ #set -eu # Charge les fonctions génériques habituellement utilisées dans le script -#source fonctions +source .fonctions # Active trap pour arrêter le script si une erreur est détectée. #TRAP_ON @@ -14,12 +14,6 @@ source /usr/share/yunohost/helpers app=$YNH_APP_INSTANCE_NAME # We check variables are not empty - -CHECK_VAR () { # Vérifie que la variable n'est pas vide. -# $1 = Variable à vérifier -# $2 = Texte à afficher en cas d'erreur - test -n "$1" || (echo "$2" >&2 && false) -} CHECK_VAR "$app" "app name not set" path=$(ynh_app_setting_get $app path) @@ -30,11 +24,18 @@ finalphpconf=$(ynh_app_setting_get $app finalphpconf) runninguser=$app-ynh # Suppression du dossier de la webapp -sudo rm -rf $final_path +SECURE_REMOVE '$final_path' # Suppression de la config nginx de la webapp -sudo rm -f $finalnginxconf -sudo rm -f $finalphpconf +if [ -e "$finalnginxconf" ]; then # Delete nginx config + echo "Delete nginx config" + sudo rm $finalnginxconf +fi + +if [ -e "$finalphpconf" ]; then # Delete nginx config + echo "Delete php-fpm config" + sudo rm $finalphpconf +fi # Remove app dependencies if ynh_package_is_installed "cops-deps"; then @@ -43,7 +44,7 @@ fi # Remove the user account id "$runninguser" >/dev/null 2>&1 \ -&& sudo deluser --quiet --remove-home "$runninguser" >/dev/null +&& sudo deluser --quiet "$runninguser" >/dev/null # We reload the services sudo service php5-fpm reload diff --git a/scripts/upgrade b/scripts/upgrade index 9c536e6..55cfcb6 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -3,34 +3,11 @@ # We retrieve app parameters app=$YNH_APP_INSTANCE_NAME -# Backup the current version of the app, restore it if the upgrade fails -#if sudo yunohost backup list | grep -q ${app}-before-upgrade > /dev/null 2>&1; then # Supprime l'ancienne archive seulement si e$ -# sudo yunohost backup delete ${app}-before-upgrade -#fi -#sudo yunohost backup create --ignore-hooks --apps $app --name ${app}-before-upgrade -EXIT_PROPERLY () { - exit_code=$? - if [ "$exit_code" -eq 0 ]; then - exit 0 # Quitte sans erreur si le script se termine correctement. - fi - trap '' EXIT - set +eu - sudo yunohost app remove $app # Supprime l'application avant de la restaurer. - sudo yunohost backup restore --ignore-hooks ${app}-before-upgrade --apps $app --force # Restore the backup if upgrade fail$ - ynh_die "Upgrade failed. The app was restored to the way it was before the failed upgrade." -} -#set -eu -#trap EXIT_PROPERLY EXIT - # Source app helpers +source .fonctions source /usr/share/yunohost/helpers # We check variables are not empty -CHECK_VAR () { # Vérifie que la variable n'est pas vide. -# $1 = Variable à vérifier -# $2 = Texte à afficher en cas d'erreur - test -n "$1" || (echo "$2" >&2 && false) -} CHECK_VAR "$app" "app name not set" path=$(ynh_app_setting_get $app path) @@ -42,27 +19,14 @@ calibre=$(ynh_app_setting_get $app calibre) basicauthcreate=$(ynh_app_setting_get $app basicauthcreate) # We check that calibre path is correct -CHECK_CALIBRE () { # Vérifie la présence du / en début de path. Et son absence à la fin. - if [ "${calibre:0:1}" != "/" ]; then # Si le premier caractère n'est pas un / - calibre="/$calibre" # Ajoute un / en début de path - fi - if [ "${calibre:${#calibre}-1}" == "/" ] && [ ${#calibre} -gt 1 ]; then # Si le dernier caractère est un / $ - calibre="${calibre:0:${#calibre}-1}" # Supprime le dernier caractère - fi -} - CHECK_CALIBRE -# We install dependencies -#sudo apt-get update -y -#sudo apt-get install php5-gd php5-sqlite php5-json php5-intl -y - # Install dependencies using Helpers ynh_package_install_from_equivs ../conf/cops-deps.control \ || ynh_die "Unable to install dependencies" # Removal of old folder and restart from fresh -sudo rm -rf $final_path +SECURE_REMOVE '$final_path' sudo mkdir -p $final_path # We download the sources and check the md5sum