diff --git a/scripts/_common.sh b/scripts/_common.sh index 45d1c9f..b610af8 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,6 +7,8 @@ # dependencies used by the app pkg_dependencies="openjdk-8-jre-headless|openjdk-11-jre-headless debconf|debconf-2.0 procps uuid-runtime lua-ldap" +ynh_app_dependencies="prosody_ynh" + #================================================= # PERSONAL HELPERS #================================================= @@ -23,3 +25,96 @@ ynh_version_gt () #================================================= # 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 8f5f49d..80f1aac 100644 --- a/scripts/install +++ b/scripts/install @@ -95,19 +95,9 @@ ynh_app_setting_set --app=$app --key=port_component --value=$port_component #================================================= ynh_script_progression --message="Installing dependencies..." +ynh_install_apps --apps="$ynh_app_dependencies" 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" - #================================================= # CREATE DEDICATED USER #================================================= diff --git a/scripts/remove b/scripts/remove index 5d6b44e..17aacb5 100644 --- a/scripts/remove +++ b/scripts/remove @@ -110,32 +110,7 @@ ynh_script_progression --message="Removing dependencies..." # Remove metapackage and its dependencies ynh_remove_app_dependencies - -# Remove Prosody -ynh_app_setting_delete --app=$app --key=require_prosody -gpasswd --delete prosody $app - -# 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 702caea..1192824 100644 --- a/scripts/restore +++ b/scripts/restore @@ -87,20 +87,9 @@ chown -R $app:$app "$final_path" ynh_script_progression --message="Reinstalling dependencies..." # Define and install dependencies +ynh_install_apps --apps="$ynh_app_dependencies" 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" -gpasswd --add prosody $app - #================================================= # CONFIGURE FIREWALL #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index f08ebec..c67eefd 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -135,18 +135,9 @@ ynh_add_nginx_config #================================================= ynh_script_progression --message="Upgrading dependencies..." +ynh_install_apps --apps="$ynh_app_dependencies" 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" gpasswd --add prosody $app #=================================================