diff --git a/scripts/_common.sh b/scripts/_common.sh index 5e43880..0a4b037 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -9,6 +9,8 @@ pkg_dependencies="ffmpeg postgresql postgresql-contrib openssl g++ mailutils apt NODEJS_VERSION=16 +ynh_app_dependencies="prosody_ynh" + #================================================= # PERSONAL HELPERS #================================================= @@ -20,3 +22,96 @@ NODEJS_VERSION=16 #================================================= # FUTURE OFFICIAL HELPERS #================================================= + +#!/bin/bash + +# Install other YunoHost apps +# +# usage: ynh_install_apps --apps="a_ynh b_ynh?domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=666" +# | arg: -a, --apps= - apps to install +# +# Requires YunoHost version *.*.* or higher. +ynh_install_apps() { + # Declare an array to define the options of this helper. + local legacy_args=a + local -A args_array=([a]=apps=) + local apps + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + # Split the list of apps in an array + local apps_list=($(echo $apps | tr " " "\n")) + + # For each app + for i in "${apps_list[@]}" + do + # Retrieve the name of the app (part before _ynh) + local oneapp=$(echo "$i" | awk -F'[_ynh]' '{print $1}') + [ -z "$oneapp" ] && ynh_die --message="You didn't provided a YunoHost app to install" + + # Retrieve the arguments of the app (part after ?) + local oneargument=$(echo "$i" | awk -F'[?]' '{print $2}') + [ ! -z "$oneargument" ] && oneargument="--args \"$oneargument\"" + + if ! yunohost app list | grep -q "$oneapp" + then + yunohost tools update + yunohost app install $oneapp $oneargument + else + yunohost tools update + yunohost app upgrade $oneapp $oneargument + fi + ynh_app_setting_set --app=$app --key=require_$oneapp --value="1" + done +} + +# Remove other YunoHost apps +# +# apps will be removed only if no other apps need them. +# +# usage: ynh_remove_apps --apps="a_ynh b_ynh?domain=DOMAIN&path=PATH&admin=USER&language=fr&is_public=1&password=pass&port=666" +# | arg: -a, --apps= - apps to install +# +# Requires YunoHost version *.*.* or higher. +ynh_remove_apps() { + # Declare an array to define the options of this helper. + local legacy_args=a + local -A args_array=([a]=app=) + local app + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + # Split the list of apps in an array + local apps_list=($(echo $apps | tr " " "\n")) + + # For each app + for i in "${apps_list[@]}" + do + # Retrieve the name of the app (part before _ynh) + local oneapp=$(echo "$i" | awk -F'[_ynh]' '{print $1}') + [ -z "$oneapp" ] && ynh_die --message="You didn't provided a YunoHost app to remove" + + ynh_app_setting_delete --app=$app --key=require_$oneapp + + # List apps requiring $oneapp + local installed_apps=$(yunohost app list | grep -oP 'id: \K.*$') + local required_by="" + local installed_app_required_by="" + for installed_app in $installed_apps + do + local installed_app_required_by=$(ynh_app_setting_get --app=$installed_app --key="require_$oneapp") + if [[ $installed_app_required_by ]] + then + required_by="${installed_app_required_by}" + fi + installed_app_required_by="" + done + + # If $oneapp is no more required + if [[ ! $required_by ]] + then + # Remove $oneapp + ynh_print_info --message="Removing of $oneapp" + yunohost app remove $oneapp --purge + done +} diff --git a/scripts/install b/scripts/install index cae6d2c..b0898fe 100644 --- a/scripts/install +++ b/scripts/install @@ -85,22 +85,12 @@ ynh_script_progression --message="Installing dependencies..." ynh_install_nodejs --nodejs_version=$NODEJS_VERSION # Install dependencies +ynh_install_apps --apps="$ynh_app_dependencies" ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies # Install Yarn ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg" -if ! yunohost app list | grep -q "prosody" -then - yunohost tools update - yunohost app install prosody -else - yunohost tools update - yunohost app upgrade prosody -fi - -ynh_app_setting_set --app=$app --key=require_prosody --value="1" - #================================================= # CREATE DEDICATED USER #================================================= diff --git a/scripts/remove b/scripts/remove index e61e3c0..8db8662 100644 --- a/scripts/remove +++ b/scripts/remove @@ -109,31 +109,7 @@ ynh_script_progression --message="Removing dependencies..." # Remove metapackage and its dependencies ynh_remove_nodejs ynh_remove_app_dependencies - -# Remove Prosody -ynh_app_setting_delete --app=$app --key=require_prosody - -# List apps requiring Prosody -installed_apps=$(yunohost app list | grep -oP 'id: \K.*$') -required_by="" -installed_app_required_by="" -for installed_app in $installed_apps -do - installed_app_required_by=$(ynh_app_setting_get --app=$installed_app --key="require_prosody") - if [[ $installed_app_required_by ]] - then - required_by="${installed_app_required_by}" - fi - installed_app_required_by="" -done - -# If Prosody is no more required -if [[ ! $required_by ]] -then - # Remove Prosody - ynh_print_info --message="Removing of Prosody" - yunohost app remove prosody --purge -fi +ynh_remove_apps --apps="$ynh_app_dependencies" #================================================= # CLOSE A PORT diff --git a/scripts/restore b/scripts/restore index d12ada6..c8ec5e4 100644 --- a/scripts/restore +++ b/scripts/restore @@ -97,19 +97,9 @@ ynh_script_progression --message="Reinstalling dependencies..." ynh_install_nodejs --nodejs_version=$NODEJS_VERSION # Install dependencies +ynh_install_apps --apps="$ynh_app_dependencies" ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies -if ! yunohost app list | grep -q "prosody" -then - yunohost tools update - yunohost app install prosody -else - yunohost tools update - yunohost app upgrade prosody -fi - -ynh_app_setting_set --app=$app --key=require_prosody --value="1" - #================================================= # RESTORE THE POSTGRESQL DATABASE #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index b55b0fa..a7488cb 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -215,22 +215,12 @@ ynh_script_progression --message="Upgrading dependencies..." ynh_install_nodejs --nodejs_version=$NODEJS_VERSION # Install dependencies +ynh_install_apps --apps="$ynh_app_dependencies" ynh_exec_warn_less ynh_install_app_dependencies $pkg_dependencies # Install Yarn ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg" -if ! yunohost app list | grep -q "prosody" -then - yunohost tools update - yunohost app install prosody -else - yunohost tools update - yunohost app upgrade prosody -fi - -ynh_app_setting_set --app=$app --key=require_prosody --value="1" - #================================================= # SPECIFIC UPGRADE #=================================================