From 8c9083681d4dd29a8a3fcb12c7f0109a983d8289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Gaspar?= <46165813+ericgaspar@users.noreply.github.com> Date: Fri, 18 Dec 2020 13:13:06 +0100 Subject: [PATCH] Testing (#7) * Biboumi package from Buster repo --- README.md | 39 +++-- check_process | 13 -- manifest.json | 8 +- scripts/_common.sh | 420 +-------------------------------------------- scripts/backup | 16 +- scripts/install | 43 ++--- scripts/remove | 18 +- scripts/restore | 21 ++- scripts/upgrade | 38 ++-- 9 files changed, 120 insertions(+), 496 deletions(-) diff --git a/README.md b/README.md index 8d128e6..52d7b90 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# Biboumi app for Yunohost +# Biboumi for YunoHost -[![Integration level](https://dash.yunohost.org/integration/biboumi.svg)](https://dash.yunohost.org/appci/app/biboumi) -[![Install Biboumi with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=biboumi) +[![Integration level](https://dash.yunohost.org/integration/biboumi.svg)](https://dash.yunohost.org/appci/app/biboumi) ![](https://ci-apps.yunohost.org/ci/badges/biboumi.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/biboumi.maintain.svg) +[![Install biboumi with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=biboumi) > *This package allows you to install Biboumi quickly and simply on a YunoHost server. If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* @@ -10,20 +10,16 @@ If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to Biboumi is an XMPP gateway for the IRC network. -Once biboumi_ynh is installed you can use any XMMP client software to -join IRC channels. Any IRC channel is seen as a standard XMMP chatroom -(aka MUC) with a special name. +Once biboumi_ynh is installed you can use any XMPP client software to join IRC channels. Any IRC channel is seen as a standard XMPP chatroom (aka MUC) with a special name. The the name is formatted like this: `#channelname%ircservername@biboumi.yourdomain.tld`. -For example, if you have a yunohost server hosting domain *example.net* -and you want to join the channel *#yunohost* on *irc.freenode.net* you -simply need to join the MUC `#yunohost%irc.freenode.net@biboumi.example.net`. +For example, if you have a YunoHost server hosting domain *example.net* and you want to join the channel *#yunohost* on *irc.freenode.net* you simply need to join the MUC `#yunohost%irc.freenode.net@biboumi.example.net`. **Shipped version:** 8.3 ## Configuration -You can configure this app by the file `/etc/biboumi/biboumi.cfg`. +You can configure Biboumi with the file `/etc/biboumi/biboumi.cfg`. ## Documentation @@ -31,16 +27,29 @@ You can configure this app by the file `/etc/biboumi/biboumi.cfg`. #### Supported architectures -* x86-64b - [![](https://ci-apps.yunohost.org/ci/logs/biboumi%20%28Community%29.svg)](https://ci-apps.yunohost.org/ci/apps/biboumi/) -* ARMv8-A - [![](https://ci-apps-arm.yunohost.org/ci/logs/biboumi%20%28Community%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/biboumi/) -* Jessie x86-64b - [![](https://ci-stretch.nohost.me/ci/logs/biboumi%20%28Community%29.svg)](https://ci-stretch.nohost.me/ci/apps/biboumi/) +* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/biboumi%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/biboumi/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/biboumi%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/biboumi/) ## Limitations -* Currently, biboumi is only tested with one domain and it must be the main domain of your yunohost server. +* Currently, Biboumi is only tested with one domain and it must be the main domain of your YunoHost server. ## Links - * Report a bug: https://github.com/pitchum/biboumi_ynh + * Report a bug: https://github.com/YunoHost-Apps/biboumi_ynh/issues * App website: https://biboumi.louiz.org/ + * Upstream app repository: https://lab.louiz.org/louiz/biboumi/-/issues * YunoHost website: https://yunohost.org/ + + --- + +## Developer info + +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/biboumi_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/biboumi_ynh/tree/testing --debug +or +sudo yunohost app upgrade biboumi -u https://github.com/YunoHost-Apps/biboumi_ynh/tree/testing --debug +``` diff --git a/check_process b/check_process index 48691a0..993a0d6 100644 --- a/check_process +++ b/check_process @@ -12,21 +12,8 @@ upgrade=1 backup_restore=1 multi_instance=0 - incorrect_path=0 port_already_use=1 (113) change_url=0 -;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto -# biboumi is kinda "plugin" for metronome and metronome itself supports LDAP - Level 4=1 - Level 5=auto - Level 6=auto - Level 7=auto - Level 8=0 - Level 9=0 - Level 10=0 ;;; Options Email=pitchum@gramaton.org Notification=none diff --git a/manifest.json b/manifest.json index 621114b..f779701 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "XMPP gateway for the IRC network.", "fr": "Passerelle XMPP pour le réseau IRC." }, - "version": "8~ynh2", + "version": "8.3~ynh1", "url": "https://biboumi.louiz.org/", "license": "Zlib", "maintainer": { @@ -14,7 +14,7 @@ "email": "pitchum@yunohost.org" }, "requirements": { - "yunohost": ">= 3.3.3" + "yunohost": ">= 4.0.3" }, "multi_instance": false, "services": [ @@ -26,8 +26,8 @@ "name": "domain", "type": "domain", "ask": { - "en": "Choose the domain that will host biboumi.", - "fr": "Choisissez le nom de domaine qui hébergera biboumi." + "en": "Choose a domain name for Biboumi.", + "fr": "Choisissez un nom de domaine pour Biboumi." }, "example": "example.com" }, diff --git a/scripts/_common.sh b/scripts/_common.sh index 505893d..9b9cd1b 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,426 +1,20 @@ #!/bin/bash #================================================= -# FUTUR OFFICIAL HELPERS +# COMMON VARIABLES #================================================= -# Internal helper design to allow helpers to use getopts to manage their arguments -# -# [internal] -# -# example: function my_helper() -# { -# declare -Ar args_array=( [a]=arg1= [b]=arg2= [c]=arg3 ) -# local arg1 -# local arg2 -# local arg3 -# ynh_handle_getopts_args "$@" -# -# [...] -# } -# my_helper --arg1 "val1" -b val2 -c -# -# usage: ynh_handle_getopts_args "$@" -# | arg: $@ - Simply "$@" to tranfert all the positionnal arguments to the function -# -# This helper need an array, named "args_array" with all the arguments used by the helper -# that want to use ynh_handle_getopts_args -# Be carreful, this array has to be an associative array, as the following example: -# declare -Ar args_array=( [a]=arg1 [b]=arg2= [c]=arg3 ) -# Let's explain this array: -# a, b and c are short options, -a, -b and -c -# arg1, arg2 and arg3 are the long options associated to the previous short ones. --arg1, --arg2 and --arg3 -# For each option, a short and long version has to be defined. -# Let's see something more significant -# declare -Ar args_array=( [u]=user [f]=finalpath= [d]=database ) -# -# NB: Because we're using 'declare' without -g, the array will be declared as a local variable. -# -# Please keep in mind that the long option will be used as a variable to store the values for this option. -# For the previous example, that means that $finalpath will be fill with the value given as argument for this option. -# -# Also, in the previous example, finalpath has a '=' at the end. That means this option need a value. -# So, the helper has to be call with --finalpath /final/path, --finalpath=/final/path or -f /final/path, the variable $finalpath will get the value /final/path -# If there's many values for an option, -f /final /path, the value will be separated by a ';' $finalpath=/final;/path -# For an option without value, like --user in the example, the helper can be called only with --user or -u. $user will then get the value 1. -# -# To keep a retrocompatibility, a package can still call a helper, using getopts, with positional arguments. -# The "legacy mode" will manage the positional arguments and fill the variable in the same order than they are given in $args_array. -# e.g. for `my_helper "val1" val2`, arg1 will be filled with val1, and arg2 with val2. -ynh_handle_getopts_args () { - # Manage arguments only if there's some provided - set +x - if [ $# -ne 0 ] - then - # Store arguments in an array to keep each argument separated - local arguments=("$@") - - # For each option in the array, reduce to short options for getopts (e.g. for [u]=user, --user will be -u) - # And built parameters string for getopts - # ${!args_array[@]} is the list of all option_flags in the array (An option_flag is 'u' in [u]=user, user is a value) - local getopts_parameters="" - local option_flag="" - for option_flag in "${!args_array[@]}" - do - # Concatenate each option_flags of the array to build the string of arguments for getopts - # Will looks like 'abcd' for -a -b -c -d - # If the value of an option_flag finish by =, it's an option with additionnal values. (e.g. --user bob or -u bob) - # Check the last character of the value associate to the option_flag - if [ "${args_array[$option_flag]: -1}" = "=" ] - then - # For an option with additionnal values, add a ':' after the letter for getopts. - getopts_parameters="${getopts_parameters}${option_flag}:" - else - getopts_parameters="${getopts_parameters}${option_flag}" - fi - # Check each argument given to the function - local arg="" - # ${#arguments[@]} is the size of the array - for arg in `seq 0 $(( ${#arguments[@]} - 1 ))` - do - # And replace long option (value of the option_flag) by the short option, the option_flag itself - # (e.g. for [u]=user, --user will be -u) - # Replace long option with = - arguments[arg]="${arguments[arg]//--${args_array[$option_flag]}/-${option_flag} }" - # And long option without = - arguments[arg]="${arguments[arg]//--${args_array[$option_flag]%=}/-${option_flag}}" - done - done - - # Read and parse all the arguments - # Use a function here, to use standart arguments $@ and be able to use shift. - parse_arg () { - # Read all arguments, until no arguments are left - while [ $# -ne 0 ] - do - # Initialize the index of getopts - OPTIND=1 - # Parse with getopts only if the argument begin by -, that means the argument is an option - # getopts will fill $parameter with the letter of the option it has read. - local parameter="" - getopts ":$getopts_parameters" parameter || true - - if [ "$parameter" = "?" ] - then - ynh_die --message="Invalid argument: -${OPTARG:-}" - elif [ "$parameter" = ":" ] - then - ynh_die --message="-$OPTARG parameter requires an argument." - else - local shift_value=1 - # Use the long option, corresponding to the short option read by getopts, as a variable - # (e.g. for [u]=user, 'user' will be used as a variable) - # Also, remove '=' at the end of the long option - # The variable name will be stored in 'option_var' - local option_var="${args_array[$parameter]%=}" - # If this option doesn't take values - # if there's a '=' at the end of the long option name, this option takes values - if [ "${args_array[$parameter]: -1}" != "=" ] - then - # 'eval ${option_var}' will use the content of 'option_var' - eval ${option_var}=1 - else - # Read all other arguments to find multiple value for this option. - # Load args in a array - local all_args=("$@") - - # If the first argument is longer than 2 characters, - # There's a value attached to the option, in the same array cell - if [ ${#all_args[0]} -gt 2 ]; then - # Remove the option and the space, so keep only the value itself. - all_args[0]="${all_args[0]#-${parameter} }" - # Reduce the value of shift, because the option has been removed manually - shift_value=$(( shift_value - 1 )) - fi - - # Declare the content of option_var as a variable. - eval ${option_var}="" - # Then read the array value per value - local i - for i in `seq 0 $(( ${#all_args[@]} - 1 ))` - do - # If this argument is an option, end here. - if [ "${all_args[$i]:0:1}" == "-" ] - then - # Ignore the first value of the array, which is the option itself - if [ "$i" -ne 0 ]; then - break - fi - else - # Else, add this value to this option - # Each value will be separated by ';' - if [ -n "${!option_var}" ] - then - # If there's already another value for this option, add a ; before adding the new value - eval ${option_var}+="\;" - fi - eval ${option_var}+=\"${all_args[$i]}\" - shift_value=$(( shift_value + 1 )) - fi - done - fi - fi - - # Shift the parameter and its argument(s) - shift $shift_value - done - } - - # LEGACY MODE - # Check if there's getopts arguments - if [ "${arguments[0]:0:1}" != "-" ] - then - # If not, enter in legacy mode and manage the arguments as positionnal ones.. - # Dot not echo, to prevent to go through a helper output. But print only in the log. - set -x; echo "! Helper used in legacy mode !" > /dev/null; set +x - local i - for i in `seq 0 $(( ${#arguments[@]} -1 ))` - do - # Try to use legacy_args as a list of option_flag of the array args_array - # Otherwise, fallback to getopts_parameters to get the option_flag. But an associative arrays isn't always sorted in the correct order... - # Remove all ':' in getopts_parameters - getopts_parameters=${legacy_args:-${getopts_parameters//:}} - # Get the option_flag from getopts_parameters, by using the option_flag according to the position of the argument. - option_flag=${getopts_parameters:$i:1} - if [ -z "$option_flag" ]; then - ynh_print_warn --message="Too many arguments ! \"${arguments[$i]}\" will be ignored." - continue - fi - # Use the long option, corresponding to the option_flag, as a variable - # (e.g. for [u]=user, 'user' will be used as a variable) - # Also, remove '=' at the end of the long option - # The variable name will be stored in 'option_var' - local option_var="${args_array[$option_flag]%=}" - - # Store each value given as argument in the corresponding variable - # The values will be stored in the same order than $args_array - eval ${option_var}+=\"${arguments[$i]}\" - done - unset legacy_args - else - # END LEGACY MODE - # Call parse_arg and pass the modified list of args as an array of arguments. - parse_arg "${arguments[@]}" - fi - fi - set -x -} +# dependencies used by the app +pkg_dependencies="biboumi" #================================================= - -# Read the value of a key in a ynh manifest file -# -# usage: ynh_read_manifest manifest key -# | arg: -m, --manifest= - Path of the manifest to read -# | arg: -k, --key= - Name of the key to find -ynh_read_manifest () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [m]=manifest= [k]=manifest_key= ) - local manifest - local manifest_key - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - python3 -c "import sys, json;print(json.load(open('$manifest', encoding='utf-8'))['$manifest_key'])" -} - -# Read the upstream version from the manifest -# The version number in the manifest is defined by ~ynh -# For example : 4.3-2~ynh3 -# This include the number before ~ynh -# In the last example it return 4.3-2 -# -# usage: ynh_app_upstream_version [-m manifest] -# | arg: -m, --manifest= - Path of the manifest to read -ynh_app_upstream_version () { - declare -Ar args_array=( [m]=manifest= ) - local manifest - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - manifest="${manifest:-../manifest.json}" - if [ ! -e "$manifest" ]; then - manifest="../settings/manifest.json" # Into the restore script, the manifest is not at the same place - fi - version_key=$(ynh_read_manifest --manifest="$manifest" --manifest_key="version") - echo "${version_key/~ynh*/}" -} - -# Read package version from the manifest -# The version number in the manifest is defined by ~ynh -# For example : 4.3-2~ynh3 -# This include the number after ~ynh -# In the last example it return 3 -# -# usage: ynh_app_package_version [-m manifest] -# | arg: -m, --manifest= - Path of the manifest to read -ynh_app_package_version () { - declare -Ar args_array=( [m]=manifest= ) - local manifest - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - manifest="${manifest:-../manifest.json}" - if [ ! -e "$manifest" ]; then - manifest="../settings/manifest.json" # Into the restore script, the manifest is not at the same place - fi - version_key=$(ynh_read_manifest --manifest="$manifest" --manifest_key="version") - echo "${version_key/*~ynh/}" -} - -# Checks the app version to upgrade with the existing app version and returns: -# - UPGRADE_APP if the upstream app version has changed -# - UPGRADE_PACKAGE if only the YunoHost package has changed -# -## It stops the current script without error if the package is up-to-date -# -# This helper should be used to avoid an upgrade of an app, or the upstream part -# of it, when it's not needed -# -# To force an upgrade, even if the package is up to date, -# you have to set the variable YNH_FORCE_UPGRADE before. -# example: sudo YNH_FORCE_UPGRADE=1 yunohost app upgrade MyApp -# -# usage: ynh_check_app_version_changed -ynh_check_app_version_changed () { - local force_upgrade=${YNH_FORCE_UPGRADE:-0} - local package_check=${PACKAGE_CHECK_EXEC:-0} - - # By default, upstream app version has changed - local return_value="UPGRADE_APP" - - local current_version=$(ynh_read_manifest --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json" --manifest_key="version" || echo 1.0) - local current_upstream_version="$(ynh_app_upstream_version --manifest="/etc/yunohost/apps/$YNH_APP_INSTANCE_NAME/manifest.json")" - local update_version=$(ynh_read_manifest --manifest="../manifest.json" --manifest_key="version" || echo 1.0) - local update_upstream_version="$(ynh_app_upstream_version)" - - if [ "$current_version" == "$update_version" ] ; then - # Complete versions are the same - if [ "$force_upgrade" != "0" ] - then - echo "Upgrade forced by YNH_FORCE_UPGRADE." >&2 - unset YNH_FORCE_UPGRADE - elif [ "$package_check" != "0" ] - then - echo "Upgrade forced for package check." >&2 - else - ynh_die "Up-to-date, nothing to do" 0 - fi - elif [ "$current_upstream_version" == "$update_upstream_version" ] ; then - # Upstream versions are the same, only YunoHost package versions differ - return_value="UPGRADE_PACKAGE" - fi - echo $return_value -} - +# PERSONAL HELPERS #================================================= -# Delete a file checksum from the app settings -# -# $app should be defined when calling this helper -# -# usage: ynh_remove_file_checksum file -# | arg: -f, --file= - The file for which the checksum will be deleted -ynh_delete_file_checksum () { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [f]=file= ) - local file - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - local checksum_setting_name=checksum_${file//[\/ ]/_} # Replace all '/' and ' ' by '_' - ynh_app_setting_delete $app $checksum_setting_name -} - #================================================= # EXPERIMENTAL HELPERS #================================================= -# Start (or other actions) a service, print a log in case of failure and optionnaly wait until the service is completely started -# -# usage: ynh_systemd_action [-n service_name] [-a action] [ [-l "line to match"] [-p log_path] [-t timeout] [-e length] ] -# | arg: -n, --service_name= - Name of the service to reload. Default : $app -# | arg: -a, --action= - Action to perform with systemctl. Default: start -# | arg: -l, --line_match= - Line to match - The line to find in the log to attest the service have finished to boot. -# If not defined it don't wait until the service is completely started. -# | arg: -p, --log_path= - Log file - Path to the log file. Default : /var/log/$app/$app.log -# | arg: -t, --timeout= - Timeout - The maximum time to wait before ending the watching. Default : 300 seconds. -# | arg: -e, --length= - Length of the error log : Default : 20 -ynh_systemd_action() { - # Declare an array to define the options of this helper. - declare -Ar args_array=( [n]=service_name= [a]=action= [l]=line_match= [p]=log_path= [t]=timeout= [e]=length= ) - local service_name - local action - local line_match - local length - local log_path - local timeout - - # Manage arguments with getopts - ynh_handle_getopts_args "$@" - - local service_name="${service_name:-$app}" - local action=${action:-start} - local log_path="${log_path:-/var/log/$service_name/$service_name.log}" - local length=${length:-20} - local timeout=${timeout:-300} - - # Start to read the log - if [[ -n "${line_match:-}" ]] - then - local templog="$(mktemp)" - # Following the starting of the app in its log - if [ "$log_path" == "systemd" ] ; then - # Read the systemd journal - journalctl -u $service_name -f --since=-45 > "$templog" & - else - # Read the specified log file - tail -F -n0 "$log_path" > "$templog" & - fi - # Get the PID of the tail command - local pid_tail=$! - fi - - echo "${action^} the service $service_name" >&2 - systemctl $action $service_name \ - || ( journalctl --lines=$length -u $service_name >&2 \ - ; test -n "$log_path" && echo "--" && tail --lines=$length "$log_path" >&2 \ - ; false ) - - # Start the timeout and try to find line_match - if [[ -n "${line_match:-}" ]] - then - local i=0 - for i in $(seq 1 $timeout) - do - # Read the log until the sentence is found, that means the app finished to start. Or run until the timeout - if grep --quiet "$line_match" "$templog" - then - echo "The service $service_name has correctly started." >&2 - break - fi - echo -n "." >&2 - sleep 1 - done - if [ $i -eq $timeout ] - then - echo "The service $service_name didn't fully started before the timeout." >&2 - echo "Please find here an extract of the end of the log of the service $service_name:" - journalctl --lines=$length -u $service_name >&2 - test -n "$log_path" && echo "--" && tail --lines=$length "$log_path" >&2 - fi - - echo "" - ynh_clean_check_starting - fi -} - -# Clean temporary process and file used by ynh_check_starting -# (usually used in ynh_clean_setup scripts) -# -# usage: ynh_clean_check_starting -ynh_clean_check_starting () { - # Stop the execution of tail. - kill -s 15 $pid_tail 2>&1 - ynh_secure_remove "$templog" 2>&1 -} +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= \ No newline at end of file diff --git a/scripts/backup b/scripts/backup index 36f39b9..ae9538f 100755 --- a/scripts/backup +++ b/scripts/backup @@ -19,13 +19,17 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) +domain=$(ynh_app_setting_get --app=$app --key=domain) #================================================= -# STANDARD BACKUP STEPS +# DECLARE DATA AND CONF FILES TO BACKUP +#================================================= +ynh_print_info --message="Declaring files to be backed up..." + #================================================= # BACKUP THE APP MAIN DIR #================================================= @@ -33,8 +37,6 @@ domain=$(ynh_app_setting_get $app domain) ynh_backup "/etc/biboumi" ynh_backup "/var/lib/biboumi" -#================================================= -# SPECIFIC BACKUP #================================================= # BACKUP LOGROTATE #================================================= @@ -46,3 +48,9 @@ ynh_backup "/etc/logrotate.d/$app" #================================================= ynh_backup "/etc/metronome/conf.d/biboumi.cfg.lua" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info --message="Backup script completed for Biboumi. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/install b/scripts/install index 159e503..363b43e 100755 --- a/scripts/install +++ b/scripts/install @@ -37,32 +37,28 @@ fi #================================================= # STORE SETTINGS FROM MANIFEST #================================================= +ynh_script_progression --message="Storing installation settings..." --weight=1 -ynh_app_setting_set $app domain $domain -ynh_app_setting_set $app admin $admin +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=admin --value=$admin #================================================= # STANDARD MODIFICATIONS #================================================= # FIND AND OPEN A PORT #================================================= +ynh_script_progression --message="Configuring firewall..." --weight=2 # Find a free port -port=$(ynh_find_port 113) -ynh_app_setting_set $app port $port +port=$(ynh_find_port --port=113) +ynh_app_setting_set --app=$app --key=port --value=$port #================================================= # INSTALL DEPENDENCIES #================================================= +ynh_script_progression --message="Installing dependencies..." --weight=9 -# Make sure that stretch-backports is enabled -if ! apt-cache policy | grep 'stretch-backports/main' -then - echo "deb http://ftp.fr.debian.org/debian/ stretch-backports main" | sudo tee /etc/apt/sources.list.d/${app}_needs_stretch-backports.list - echo "Adding stretch-backports repository..." -fi - -ynh_install_app_dependencies biboumi +ynh_install_app_dependencies $pkg_dependencies #================================================= # SPECIFIC SETUP @@ -80,10 +76,10 @@ biboumi_config_file="/etc/biboumi/biboumi.cfg" # Create the biboumi config file. cp ../conf/biboumi.cfg "$biboumi_config_file" -ynh_replace_string __DOMAIN__ "${domain}" "$biboumi_config_file" -ynh_replace_string __SECRET__ "${shared_secret}" "$biboumi_config_file" -ynh_replace_string __PORT__ "${port}" "$biboumi_config_file" -ynh_replace_string __ADMIN_JID__ "${admin_jid}" "$biboumi_config_file" +ynh_replace_string --match_string="__DOMAIN__" --replace_string="${domain}" --target_file="$biboumi_config_file" +ynh_replace_string --match_string="__SECRET__" --replace_string="${shared_secret}" --target_file="$biboumi_config_file" +ynh_replace_string --match_string="__PORT__" --replace_string="${port}" --target_file="$biboumi_config_file" +ynh_replace_string --match_string="__ADMIN_JID__" --replace_string="${admin_jid}" --target_file="$biboumi_config_file" # Calculate and store the config file checksum into the app settings ynh_store_file_checksum "$biboumi_config_file" @@ -94,8 +90,8 @@ ynh_store_file_checksum "$biboumi_config_file" # Add metronome component cp ../conf/biboumi.cfg.lua /etc/metronome/conf.d/ -ynh_replace_string __DOMAIN__ "${domain}" /etc/metronome/conf.d/biboumi.cfg.lua -ynh_replace_string __SECRET__ "${shared_secret}" /etc/metronome/conf.d/biboumi.cfg.lua +ynh_replace_string --match_string="__DOMAIN__" --replace_string="${domain}" --target_file="/etc/metronome/conf.d/biboumi.cfg.lua" +ynh_replace_string --match_string="__SECRET__" --replace_string="${shared_secret}" --target_file="/etc/metronome/conf.d/biboumi.cfg.lua" #================================================= # CREATE DIRECTORIES @@ -109,6 +105,7 @@ chown _biboumi /var/log/biboumi /var/lib/biboumi /etc/biboumi #================================================= # SETUP LOGROTATE #================================================= +ynh_script_progression --message="Configuring log rotation..." --weight=1 # Use logrotate to manage application logfile(s) ynh_use_logrotate /var/log/biboumi/ @@ -117,14 +114,14 @@ ynh_use_logrotate /var/log/biboumi/ # ADVERTISE SERVICE IN ADMIN PANEL #================================================= -yunohost service add biboumi --log "/var/log/biboumi/biboumi.log" +yunohost service add biboumi --description="XMPP gateway for the IRC network" --log="/var/log/biboumi/biboumi.log" #================================================= # SET THE APP AS NOT USING THE SSO #================================================= # Prevent conflict with other apps on the same domain -ynh_app_setting_set $app no_sso 1 +ynh_app_setting_set --app=$app --key=no_sso --value=1 #================================================= # RELOAD SERVICES @@ -132,3 +129,9 @@ ynh_app_setting_set $app no_sso 1 ynh_systemd_action --action=restart --service_name=metronome ynh_systemd_action --action=restart --service_name=biboumi + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Installation of Biboumi completed" --last diff --git a/scripts/remove b/scripts/remove index af8a6a3..ea6203b 100755 --- a/scripts/remove +++ b/scripts/remove @@ -12,6 +12,7 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME @@ -24,13 +25,14 @@ app=$YNH_APP_INSTANCE_NAME # Remove a service from the admin panel, added by `yunohost service add` if yunohost service status | grep -q $app then - echo "Remove $app service" + ynh_script_progression --message="Removing $app service integration..." --weight=1 yunohost service remove $app fi #================================================= # REMOVE DEPENDENCIES #================================================= +ynh_script_progression --message="Removing dependencies..." --weight=4 # Remove metapackage and its dependencies ynh_remove_app_dependencies @@ -38,6 +40,7 @@ ynh_remove_app_dependencies #================================================= # REMOVE APP MAIN DIR #================================================= +ynh_script_progression --message="Removing Biboumi directory..." --weight=2 # Remove the app directory securely ynh_secure_remove "/etc/biboumi" @@ -46,6 +49,7 @@ ynh_secure_remove "/var/lib/biboumi" #================================================= # REMOVE LOGROTATE CONFIGURATION #================================================= +ynh_script_progression --message="Removing logrotate configuration..." --weight=1 # Remove the app-specific logrotate config ynh_remove_logrotate @@ -58,14 +62,14 @@ ynh_remove_logrotate ynh_secure_remove "/var/log/biboumi" -#================================================= -# REMOVE BACKPORTS LIST -#================================================= - -ynh_secure_remove "/etc/apt/sources.list.d/${app}_needs_stretch-backports.list" - #================================================= # REMOVE METRONOME COMPONENT #================================================= ynh_secure_remove "/etc/metronome/conf.d/biboumi.cfg.lua" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of Biboumi completed" --last diff --git a/scripts/restore b/scripts/restore index 1210ef4..2b221bb 100755 --- a/scripts/restore +++ b/scripts/restore @@ -19,14 +19,16 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) +domain=$(ynh_app_setting_get --app=$app --key=domain) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= +ynh_script_progression --message="Validating restoration parameters..." --weight=1 if dpkg --compare-versions "$(uname -r)" "<=" "4.0" then @@ -38,15 +40,10 @@ fi #================================================= # REINSTALL DEPENDENCIES #================================================= +ynh_script_progression --message="Reinstalling dependencies..." --weight=9 # Make sure that stretch-backports is enabled -if ! apt-cache policy | grep 'stretch-backports/main' -then - echo "deb http://ftp.fr.debian.org/debian/ stretch-backports main" | sudo tee /etc/apt/sources.list.d/${app}_needs_stretch-backports.list - echo "Adding stretch-backports repository..." -fi - -ynh_install_app_dependencies biboumi +ynh_install_app_dependencies $pkg_dependencies #================================================= # RESTORE THE APP MAIN DIR @@ -59,7 +56,7 @@ ynh_restore_file "/var/lib/biboumi" # ADVERTISE SERVICE IN ADMIN PANEL #================================================= -yunohost service add biboumi --log "/var/log/biboumi/biboumi.log" +yunohost service add biboumi --description="XMPP gateway for the IRC network" --log="/var/log/biboumi/biboumi.log" #================================================= # RESTORE THE LOGROTATE CONFIGURATION @@ -89,3 +86,9 @@ ynh_restore_file "/etc/metronome/conf.d/biboumi.cfg.lua" ynh_systemd_action --action=restart --service_name=metronome ynh_systemd_action --action=restart --service_name=biboumi + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Restoration completed for Biboumi" --last diff --git a/scripts/upgrade b/scripts/upgrade index 510d5a6..788b3fe 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,12 +12,13 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --weight=1 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -admin=$(ynh_app_setting_get $app admin) -port=$(ynh_app_setting_get $app port) +domain=$(ynh_app_setting_get --app=$app --key=domain) +admin=$(ynh_app_setting_get --app=$app --key=admin) +port=$(ynh_app_setting_get --app=$app --key=port) #================================================= # CHECK VERSION @@ -28,9 +29,10 @@ upgrade_type=$(ynh_check_app_version_changed) #================================================= # ENSURE DOWNWARD COMPATIBILITY #================================================= +ynh_script_progression --message="Ensuring downward compatibility..." --weight=1 # Prevent conflict with other apps on the same domain -ynh_app_setting_set $app no_sso 1 +ynh_app_setting_set --app=$app --key=no_sso --value=1 #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP @@ -50,8 +52,9 @@ ynh_abort_if_errors #================================================= # UPGRADE DEPENDENCIES #================================================= +ynh_script_progression --message="Upgrading dependencies..." --weight=9 -ynh_install_app_dependencies biboumi +ynh_install_app_dependencies $pkg_dependencies #================================================= # SPECIFIC UPGRADE @@ -72,10 +75,10 @@ admin_jid="${admin}@biboumi.${domain}" # Create the biboumi config file. cp ../conf/biboumi.cfg /etc/biboumi/ -ynh_replace_string __DOMAIN__ "${domain}" "$biboumi_config_file" -ynh_replace_string __SECRET__ "${shared_secret}" "$biboumi_config_file" -ynh_replace_string __PORT__ "${port}" "$biboumi_config_file" -ynh_replace_string __ADMIN_JID__ "${admin_jid}" "$biboumi_config_file" +ynh_replace_string --match_string="__DOMAIN__" --replace_string="${domain}" --target_file="$biboumi_config_file" +ynh_replace_string --match_string="__SECRET__" --replace_string="${shared_secret}" --target_file="$biboumi_config_file" +ynh_replace_string --match_string="__PORT__" --replace_string="${port}" --target_file="$biboumi_config_file" +ynh_replace_string --match_string="__ADMIN_JID__" --replace_string="${admin_jid}" --target_file="$biboumi_config_file" # Recalculate and store the checksum of the file for the next upgrade. ynh_store_file_checksum "$biboumi_config_file" @@ -86,12 +89,13 @@ ynh_store_file_checksum "$biboumi_config_file" # Upgrade metronome component cp ../conf/biboumi.cfg.lua /etc/metronome/conf.d/ -ynh_replace_string __DOMAIN__ "${domain}" /etc/metronome/conf.d/biboumi.cfg.lua -ynh_replace_string __SECRET__ "${shared_secret}" /etc/metronome/conf.d/biboumi.cfg.lua +ynh_replace_string --match_string="__DOMAIN__" --replace_string="${domain}" --target_file="/etc/metronome/conf.d/biboumi.cfg.lua" +ynh_replace_string --match_string="__SECRET__" --replace_string="${shared_secret}" --target_file="/etc/metronome/conf.d/biboumi.cfg.lua" #================================================= # SETUP LOGROTATE #================================================= +ynh_script_progression --message="Upgrading logrotate configuration..." --weight=1 # Use logrotate to manage app-specific logfile(s) ynh_use_logrotate /var/log/biboumi/ --non-append @@ -105,9 +109,21 @@ ynh_use_logrotate /var/log/biboumi/ --non-append # Set permissions on app files chown _biboumi /var/log/biboumi /var/lib/biboumi /etc/biboumi +#================================================= +# ADVERTISE SERVICE IN ADMIN PANEL +#================================================= + +yunohost service add biboumi --description="XMPP gateway for the IRC network" --log="/var/log/biboumi/biboumi.log" + #================================================= # RELOAD SERVICES #================================================= ynh_systemd_action --action=restart --service_name=metronome ynh_systemd_action --action=restart --service_name=biboumi + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Upgrade of Biboumi completed" --last