diff --git a/manifest.json b/manifest.json
index 53db638..bd459ff 100644
--- a/manifest.json
+++ b/manifest.json
@@ -19,7 +19,7 @@
}
],
"requirements": {
- "yunohost": ">= 3.4"
+ "yunohost": ">= 3.5"
},
"multi_instance": true,
"services": [
diff --git a/scripts/_common.sh b/scripts/_common.sh
index a1f9ec6..61cb799 100644
--- a/scripts/_common.sh
+++ b/scripts/_common.sh
@@ -18,60 +18,3 @@ pkg_dependencies="postgresql postgresql-contrib openssl g++ redis-server redis-t
#=================================================
# FUTURE OFFICIAL HELPERS
#=================================================
-
-# Send an email to inform the administrator
-#
-# usage: ynh_send_readme_to_admin app_message [recipients]
-# | arg: app_message - The message to send to the administrator.
-# | arg: recipients - The recipients of this email. Use spaces to separate multiples recipients. - default: root
-# example: "root admin@domain"
-# If you give the name of a YunoHost user, ynh_send_readme_to_admin will find its email adress for you
-# example: "root admin@domain user1 user2"
-ynh_send_readme_to_admin() {
- local app_message="${1:-...No specific information...}"
- local recipients="${2:-root}"
-
- # Retrieve the email of users
- find_mails () {
- local list_mails="$1"
- local mail
- local recipients=" "
- # Read each mail in argument
- for mail in $list_mails
- do
- # Keep root or a real email address as it is
- if [ "$mail" = "root" ] || echo "$mail" | grep --quiet "@"
- then
- recipients="$recipients $mail"
- else
- # But replace an user name without a domain after by its email
- if mail=$(ynh_user_get_info "$mail" "mail" 2> /dev/null)
- then
- recipients="$recipients $mail"
- fi
- fi
- done
- echo "$recipients"
- }
- recipients=$(find_mails "$recipients")
-
- local mail_subject="☁️🆈🅽🅷☁️: \`$app\` has important message for you"
-
- local mail_message="This is an automated message from your beloved YunoHost server.
-Specific information for the application $app.
-$app_message
----
-Automatic diagnosis data from YunoHost
-$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')"
-
- # Define binary to use for mail command
- if [ -e /usr/bin/bsd-mailx ]
- then
- local mail_bin=/usr/bin/bsd-mailx
- else
- local mail_bin=/usr/bin/mail.mailutils
- fi
-
- # Send the email to the recipients
- echo "$mail_message" | $mail_bin -a "Content-Type: text/plain; charset=UTF-8" -s "$mail_subject" "$recipients"
-}
diff --git a/scripts/backup b/scripts/backup
index a384c49..48d6c9c 100644
--- a/scripts/backup
+++ b/scripts/backup
@@ -8,7 +8,6 @@
#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
source ../settings/scripts/_common.sh
-source ../settings/scripts/ynh_systemd_action
source /usr/share/yunohost/helpers
#=================================================
@@ -24,69 +23,69 @@ ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
-ynh_print_info "Loading installation settings..."
+ynh_print_info --message="Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
-final_path=$(ynh_app_setting_get "$app" final_path)
-domain=$(ynh_app_setting_get "$app" domain)
-db_name=$(ynh_app_setting_get "$app" psql_db)
-
-#=================================================
-# STOP PEERTUBE FOR BACKUP
-#=================================================
-ynh_print_info "Stop $app service..."
-
-ynh_systemd_action --service_name="$app" --action="stop"
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
+db_name=$(ynh_app_setting_get --app=$app --key=psql_db)
#=================================================
# STANDARD BACKUP STEPS
+#=================================================
+# STOP SYSTEMD SERVICE
+#=================================================
+ynh_print_info --message="Stopping a systemd service..."
+
+ynh_systemd_action --service_name=$app --action="stop"
+
#=================================================
# BACKUP THE APP MAIN DIR
#=================================================
-ynh_print_info "Backing up the main app directory..."
+ynh_print_info --message="Backing up the main app directory..."
-ynh_backup "$final_path"
+ynh_backup --src_path="$final_path"
#=================================================
# BACKUP THE NGINX CONFIGURATION
#=================================================
-ynh_print_info "Backing up nginx web server configuration..."
+ynh_print_info --message="Backing up nginx web server configuration..."
-ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
+ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# BACKUP THE POSTGRESQL DATABASE
#=================================================
-ynh_print_info "Backing up the PostgreSQL database..."
+ynh_print_info --message="Backing up the PostgreSQL database..."
-ynh_psql_dump_db "$db_name" > db.sql
+ynh_psql_dump_db --database="$db_name" > db.sql
#=================================================
# SPECIFIC BACKUP
#=================================================
# BACKUP LOGROTATE
#=================================================
-ynh_print_info "Backing up logrotate configuration..."
+ynh_print_info --message="Backing up logrotate configuration..."
-ynh_backup "/etc/logrotate.d/$app"
+ynh_backup --src_path="/etc/logrotate.d/$app"
#=================================================
# BACKUP SYSTEMD
#=================================================
-ynh_print_info "Backing up systemd configuration..."
+ynh_print_info --message="Backing up systemd configuration..."
-ynh_backup "/etc/systemd/system/$app.service"
+ynh_backup --src_path="/etc/systemd/system/$app.service"
#=================================================
-# START PEERTUBE
+# START SYSTEMD SERVICE
#=================================================
-ynh_print_info "Start $app service..."
+ynh_print_info --message="Starting a systemd service..."
-ynh_systemd_action --service_name="$app" --action="start" --log_path="systemd" --line_match="Server listening on localhost"
+ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Server listening on localhost"
#=================================================
# END OF SCRIPT
#=================================================
-ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."
+ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."
diff --git a/scripts/install b/scripts/install
index 97961c2..1ddc5bb 100644
--- a/scripts/install
+++ b/scripts/install
@@ -8,7 +8,7 @@
source _common.sh
source ynh_add_extra_apt_repos__3
-source ynh_systemd_action
+source ynh_send_readme_to_admin__2
source /usr/share/yunohost/helpers
#=================================================
@@ -16,7 +16,6 @@ source /usr/share/yunohost/helpers
#=================================================
ynh_clean_setup () {
- read-p "key"
ynh_clean_check_starting
}
# Exit if an error occurs during the execution of the script
@@ -29,7 +28,7 @@ ynh_abort_if_errors
domain=$YNH_APP_ARG_DOMAIN
path_url="/"
admin_email=$YNH_APP_ARG_EMAIL
-admin_pass=$(ynh_string_random 24)
+admin_pass=$(ynh_string_random --length=24)
is_public=$YNH_APP_ARG_IS_PUBLIC
app=$YNH_APP_INSTANCE_NAME
@@ -37,42 +36,42 @@ app=$YNH_APP_INSTANCE_NAME
#=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#=================================================
-ynh_print_info "Validating installation parameters..."
+ynh_print_info --message="Validating installation parameters..."
final_path=/var/www/$app
-test ! -e "$final_path" || ynh_die "This path already contains a folder"
+test ! -e "$final_path" || ynh_die --message="This path already contains a folder"
# Register (book) web path
-ynh_webpath_register "$app" "$domain" "$path_url"
+ynh_webpath_register --app=$app --domain=$domain --path_url=$path_url
#=================================================
# STORE SETTINGS FROM MANIFEST
#=================================================
-ynh_print_info "Storing installation settings..."
+ynh_print_info --message="Storing installation settings..."
-ynh_app_setting_set "$app" domain "$domain"
-ynh_app_setting_set "$app" admin_email "$admin_email"
-ynh_app_setting_set "$app" admin_pass "$admin_pass"
-ynh_app_setting_set "$app" is_public "$is_public"
+ynh_app_setting_set --app=$app --key=domain --value=$domain
+ynh_app_setting_set --app=$app --key=admin_email --value=$admin_email
+ynh_app_setting_set --app=$app --key=admin_pass --value=$admin_pass
+ynh_app_setting_set --app=$app --key=is_public --value=$is_public
#=================================================
# STANDARD MODIFICATIONS
#=================================================
# FIND AND OPEN A PORT
#=================================================
-ynh_print_info "Configuring firewall..."
+ynh_print_info --message="Configuring firewall..."
# Find a free port
-port=$(ynh_find_port 9000)
-ynh_app_setting_set "$app" port "$port"
+port=$(ynh_find_port --port=9000)
+ynh_app_setting_set --app=$app --key=port --value=$port
#=================================================
# INSTALL DEPENDENCIES
#=================================================
-ynh_print_info "Installing dependencies..."
+ynh_print_info --message="Installing dependencies..."
# Install nodejs
-ynh_install_nodejs 8
+ynh_install_nodejs --nodejs_version=8
# Install dependencies
ynh_install_app_dependencies $pkg_dependencies
@@ -90,32 +89,32 @@ ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ st
#=================================================
# CREATE A POSTGRESQL DATABASE
#=================================================
-ynh_print_info "Creating a PostgreSQL database..."
+ynh_print_info --message="Creating a PostgreSQL database..."
db_name="peertube_${app}"
-db_pwd=$(ynh_string_random 30)
-ynh_app_setting_set "$app" psql_db "$db_name"
-ynh_app_setting_set "$app" psqlpwd "$db_pwd"
+db_user=$app
+db_pwd=$(ynh_string_random --length=30)
+ynh_app_setting_set --app="$app" --key=psql_db --value="$db_name"
+ynh_app_setting_set --app="$app" --key=psqlpwd --value="$db_pwd"
ynh_psql_test_if_first_run
-ynh_psql_create_user "$app" "$db_pwd"
-ynh_psql_execute_as_root \
-"CREATE DATABASE $db_name ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER $app;"
-ynh_psql_execute_as_root "\connect $db_name
-CREATE EXTENSION IF NOT EXISTS unaccent;CREATE EXTENSION IF NOT EXISTS pg_trgm;"
+ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd
+
+ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS unaccent;" --database=$db_name
+ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;" --database=$db_name
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
-ynh_print_info "Setting up source files..."
+ynh_print_info --message="Setting up source files..."
-ynh_app_setting_set $app final_path $final_path
+ynh_app_setting_set --app=$app --key=final_path --value=$final_path
# Download, check integrity, uncompress and patch the source from app.src
-ynh_setup_source "$final_path"
+ynh_setup_source --dest_dir="$final_path"
#=================================================
# NGINX CONFIGURATION
#=================================================
-ynh_print_info "Configuring nginx web server..."
+ynh_print_info --message="Configuring nginx web server..."
# Create a dedicated nginx config
ynh_add_nginx_config
@@ -123,17 +122,17 @@ ynh_add_nginx_config
#=================================================
# CREATE DEDICATED USER
#=================================================
-ynh_print_info "Configuring system user..."
+ynh_print_info --message="Configuring system user..."
# Create a system user
-ynh_system_user_create "$app"
+ynh_system_user_create --username=$app
#=================================================
# SPECIFIC SETUP
#=================================================
# CREATE THE DATA DIRECTORY
#=================================================
-ynh_print_info "Create the data directory..."
+ynh_print_info --message="Create the data directory..."
# Define app's data directory
datadir="/home/yunohost.app/${app}/storage"
@@ -149,12 +148,12 @@ chown -R "$app":"$app" "$datadir"
#=================================================
cp ../conf/production.yaml "$final_path/config/production.yaml"
-ynh_replace_string "__domain__" "$domain" "$final_path/config/production.yaml"
-ynh_replace_string "__db_name__" "$app" "$final_path/config/production.yaml"
-ynh_replace_string "__app__" "$app" "$final_path/config/production.yaml"
-ynh_replace_string "__db_pwd__" "$db_pwd" "$final_path/config/production.yaml"
-ynh_replace_string "__email__" "$admin_email" "$final_path/config/production.yaml"
-ynh_replace_string "__PORT__" "$port" "$final_path/config/production.yaml"
+ynh_replace_string --match_string="__domain__" --replace_string="$domain" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__db_name__" --replace_string="$app" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__app__" --replace_string="$app" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__db_pwd__" --replace_string="$db_pwd" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__email__" --replace_string="$admin_email" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/config/production.yaml"
#Create the admin settings file
touch "$final_path/config/local-production.json"
@@ -164,8 +163,8 @@ touch "$final_path/config/local-production.json"
#=================================================
# Calculate and store the config file checksum into the app settings
-ynh_store_file_checksum "$final_path/config/production.yaml"
-ynh_store_file_checksum "$final_path/config/local-production.json"
+ynh_store_file_checksum --file="$final_path/config/production.yaml"
+ynh_store_file_checksum --file="$final_path/config/local-production.json"
#=================================================
# BUILD YARN DEPENDENCIES
@@ -179,7 +178,7 @@ popd
# SETUP SYSTEMD
#=================================================
-ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service"
+ynh_replace_string --match_string="__ENV_PATH__" --replace_string="$PATH" --target_file="../conf/systemd.service"
# Create a dedicated systemd config
ynh_add_systemd_config
@@ -195,10 +194,10 @@ chown -R "$app":"$app" $final_path
#=================================================
# SETUP LOGROTATE
#=================================================
-ynh_print_info "Configuring log rotation..."
+ynh_print_info --message="Configuring log rotation..."
# Use logrotate to manage application logfile(s)
-ynh_use_logrotate "/home/yunohost.app/${app}/storage/logs/peertube.log"
+ynh_use_logrotate --logfile="/home/yunohost.app/${app}/storage/logs/peertube.log"
#=================================================
# ADVERTISE SERVICE IN ADMIN PANEL
@@ -207,31 +206,31 @@ ynh_use_logrotate "/home/yunohost.app/${app}/storage/logs/peertube.log"
# if using yunohost version 3.2 or more in the 'manifest.json', a description can be added
yunohost service add $app --description "$app daemon for Peertube" --log "/home/yunohost.app/${app}/storage/logs/peertube.log"
+#=================================================
+# START SYSTEMD SERVICE
+#=================================================
+ynh_print_info --message="Starting a systemd service..."
+
+ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Server listening on localhost"
+
#=================================================
# SETUP SSOWAT
#=================================================
-ynh_print_info "Configuring SSOwat..."
+ynh_print_info --message="Configuring SSOwat..."
# Make app public if necessary
if [ $is_public -eq 1 ]
then
# unprotected_uris allows SSO credentials to be passed anyway.
- ynh_app_setting_set $app unprotected_uris "/"
+ ynh_app_setting_set --app=$app --key=unprotected_uris --value="/"
fi
#=================================================
# RELOAD NGINX
#=================================================
-ynh_print_info "Reloading nginx web server..."
+ynh_print_info --message="Reloading nginx web server..."
-systemctl reload nginx
-
-#=================================================
-# START SERVICE
-#=================================================
-ynh_print_info "Start $app service..."
-
-ynh_systemd_action --service_name="$app" --action="start" --log_path="systemd" --line_match="Server listening on localhost"
+ynh_systemd_action --service_name=nginx --action=reload
#=================================================
# CHANGE PEERTUBE ADMIN PASSWORD AFTER INITIAL GEN
@@ -255,10 +254,10 @@ The admin password is: $admin_pass
If you are facing any problem or want to improve this app, please open a new issue here: https://github.com/YunoHost-Apps/peertube_ynh"
-ynh_send_readme_to_admin "$message"
+ynh_send_readme_to_admin --app_message="$message"
#=================================================
# END OF SCRIPT
#=================================================
-ynh_print_info "Installation of $app completed"
+ynh_print_info --message="Installation of $app completed"
diff --git a/scripts/remove b/scripts/remove
index 58c798d..873f08d 100644
--- a/scripts/remove
+++ b/scripts/remove
@@ -7,19 +7,21 @@
#=================================================
source _common.sh
+source ynh_send_readme_to_admin__2
source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
-ynh_print_info "Loading installation settings..."
+ynh_print_info --message="Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
-domain=$(ynh_app_setting_get "$app" domain)
-port=$(ynh_app_setting_get "$app" port)
-db_name=$(ynh_app_setting_get "$app" psql_db)
-final_path=$(ynh_app_setting_get "$app" final_path)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
+port=$(ynh_app_setting_get --app=$app --key=port)
+db_name=$(ynh_app_setting_get --app=$app --key=psql_db)
+db_user=$app
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
#=================================================
# STANDARD REMOVE
@@ -28,16 +30,16 @@ final_path=$(ynh_app_setting_get "$app" final_path)
#=================================================
# Remove a service from the admin panel, added by `yunohost service add`
-if yunohost service status $app >/dev/null 2>&1
+if ynh_exec_warn_less yunohost service status $app >/dev/null 2>&1
then
- ynh_print_info "Removing $app service"
- yunohost service remove "$app"
+ ynh_print_info --message="Removing $app service..."
+ yunohost service remove $app
fi
#=================================================
# STOP AND REMOVE SERVICE
#=================================================
-ynh_print_info "Stopping and removing the systemd service"
+ynh_print_info --message="Stopping and removing the systemd service..."
# Remove the dedicated systemd config
ynh_remove_systemd_config
@@ -45,18 +47,15 @@ ynh_remove_systemd_config
#=================================================
# REMOVE THE POSTGRESQL DATABASE
#=================================================
-ynh_print_info "Removing the PostgreSQL database"
-
-ynh_psql_execute_as_root "\connect $db_name
-SELECT pg_terminate_backend (pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$db_name';"
+ynh_print_info --message="Removing the PostgreSQL database..."
# Remove a database if it exists, along with the associated user
-ynh_psql_remove_db --db_name="$db_name" --db_user="$app"
+ynh_psql_remove_db --db_user=$db_user --db_name=$db_name
#=================================================
# REMOVE DEPENDENCIES
#=================================================
-ynh_print_info "Removing dependencies"
+ynh_print_info --message="Removing dependencies..."
# Remove metapackage and its dependencies
ynh_remove_app_dependencies
@@ -65,15 +64,15 @@ ynh_remove_nodejs
#=================================================
# REMOVE APP MAIN DIR
#=================================================
-ynh_print_info "Removing app main directory"
+ynh_print_info --message="Removing app main directory..."
# Remove the app directory securely
-ynh_secure_remove "$final_path"
+ynh_secure_remove --file="$final_path"
#=================================================
# REMOVE NGINX CONFIGURATION
#=================================================
-ynh_print_info "Removing nginx web server configuration"
+ynh_print_info --message="Removing nginx web server configuration..."
# Remove the dedicated nginx config
ynh_remove_nginx_config
@@ -81,7 +80,7 @@ ynh_remove_nginx_config
#=================================================
# REMOVE LOGROTATE CONFIGURATION
#=================================================
-ynh_print_info "Removing logrotate configuration"
+ynh_print_info --message="Removing logrotate configuration..."
# Remove the app-specific logrotate config
ynh_remove_logrotate
@@ -92,7 +91,7 @@ ynh_remove_logrotate
if yunohost firewall list | grep -q "\- $port$"
then
- ynh_print_info "Closing port $port"
+ ynh_print_info --message="Closing port $port..."
ynh_exec_warn_less yunohost firewall disallow TCP $port
fi
@@ -105,10 +104,10 @@ fi
#=================================================
# REMOVE DEDICATED USER
#=================================================
-ynh_print_info "Removing the dedicated system user"
+ynh_print_info --message="Removing the dedicated system user..."
# Delete a system user
-ynh_system_user_delete "$app"
+ynh_system_user_delete --username=$app
#=================================================
# SEND A README FOR THE ADMIN
@@ -129,10 +128,10 @@ rm -R /home/yunohost.app/$app -f
If you facing any problem or want to improve this app, please open a new issue here: https://github.com/YunoHost-Apps/peertube_ynh"
-ynh_send_readme_to_admin "$message"
+ynh_send_readme_to_admin --app_message="$message"
#=================================================
# END OF SCRIPT
#=================================================
-ynh_print_info "Removal of $app completed"
+ynh_print_info --message="Removal of $app completed"
diff --git a/scripts/restore b/scripts/restore
index 28cbb06..ec64956 100644
--- a/scripts/restore
+++ b/scripts/restore
@@ -8,7 +8,6 @@
source ../settings/scripts/_common.sh
source ../settings/scripts/ynh_add_extra_apt_repos__3
-source ../settings/scripts/ynh_systemd_action
source /usr/share/yunohost/helpers
#=================================================
@@ -24,26 +23,27 @@ ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
-ynh_print_info "Loading settings..."
+ynh_print_info --message="Loading settings..."
app=$YNH_APP_INSTANCE_NAME
-domain=$(ynh_app_setting_get "$app" domain)
-path_url=$(ynh_app_setting_get $app path)
-final_path=$(ynh_app_setting_get "$app" final_path)
-port=$(ynh_app_setting_get "$app" port)
-db_name=$(ynh_app_setting_get "$app" psql_db)
-db_pwd=$(ynh_app_setting_get "$app" psqlpwd)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
+path_url=$(ynh_app_setting_get --app=$app --key=path)
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+port=$(ynh_app_setting_get --app=$app --key=port)
+db_name=$(ynh_app_setting_get --app=$app --key=psql_db)
+db_user=$app
+db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd)
#=================================================
# CHECK IF THE APP CAN BE RESTORED
#=================================================
-ynh_print_info "Validating restoration parameters..."
+ynh_print_info --message="Validating restoration parameters..."
-ynh_webpath_available "$domain" "$path_url" \
- || ynh_die "Path not available: ${domain}${path_url}"
-test ! -d "$final_path" \
- || ynh_die "There is already a directory: $final_path "
+ynh_webpath_available --domain=$domain --path_url=$path_url \
+ || ynh_die --message="Path not available: ${domain}${path_url}"
+test ! -d $final_path \
+ || ynh_die --message="There is already a directory: $final_path "
#=================================================
# STANDARD RESTORATION STEPS
@@ -51,22 +51,22 @@ test ! -d "$final_path" \
# RESTORE THE NGINX CONFIGURATION
#=================================================
-ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
+ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# RESTORE THE APP MAIN DIR
#=================================================
-ynh_print_info "Restoring the app main directory..."
+ynh_print_info --message="Restoring the app main directory..."
-ynh_restore_file "$final_path"
+ynh_restore_file --origin_path="$final_path"
#=================================================
# RECREATE THE DEDICATED USER
#=================================================
-ynh_print_info "Recreating the dedicated system user..."
+ynh_print_info --message="Recreating the dedicated system user..."
# Create the dedicated user (if not existing)
-ynh_system_user_create "$app"
+ynh_system_user_create --username=$app
#=================================================
# RESTORE USER RIGHTS
@@ -83,10 +83,10 @@ chown -R "$app":"$app" "/home/yunohost.app/${app}/storage"
#=================================================
# REINSTALL DEPENDENCIES
#=================================================
-ynh_print_info "Reinstalling dependencies..."
+ynh_print_info --message="Reinstalling dependencies..."
# Install nodejs
-ynh_install_nodejs 8
+ynh_install_nodejs --nodejs_version=8
# Install dependencies
ynh_install_app_dependencies $pkg_dependencies
@@ -104,21 +104,19 @@ ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ st
#=================================================
# RESTORE THE POSTGRESQL DATABASE
#=================================================
-ynh_print_info "Restoring the PostgreSQL database..."
+ynh_print_info --message="Restoring the PostgreSQL database..."
ynh_psql_test_if_first_run
-ynh_psql_create_user "$app" "$db_pwd"
-ynh_psql_execute_as_root \
-"CREATE DATABASE $db_name ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0 OWNER $app;"
-ynh_psql_execute_file_as_root ./db.sql "$db_name"
+ynh_psql_setup_db --db_user=$db_user --db_name=$db_name --db_pwd=$db_pwd
+ynh_psql_execute_file_as_root --file="./db.sql" --database=$db_name
#=================================================
# RESTORE SYSTEMD
#=================================================
-ynh_print_info "Restoring the systemd configuration..."
+ynh_print_info --message="Restoring the systemd configuration..."
-ynh_restore_file "/etc/systemd/system/$app.service"
-systemctl enable "$app.service"
+ynh_restore_file --origin_path="/etc/systemd/system/$app.service"
+systemctl enable $app.service
#=================================================
# ADVERTISE SERVICE IN ADMIN PANEL
@@ -126,30 +124,30 @@ systemctl enable "$app.service"
yunohost service add $app --description "$app daemon for Peertube" --log "/home/yunohost.app/${app}/storage/logs/peertube.log"
+#=================================================
+# START SYSTEMD SERVICE
+#=================================================
+ynh_print_info --message="Starting a systemd service..."
+
+ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Server listening on localhost"
+
#=================================================
# RESTORE THE LOGROTATE CONFIGURATION
#=================================================
-ynh_restore_file "/etc/logrotate.d/$app"
+ynh_restore_file --origin_path="/etc/logrotate.d/$app"
#=================================================
# GENERIC FINALIZATION
#=================================================
# RELOAD NGINX
#=================================================
-ynh_print_info "Reloading nginx web server..."
+ynh_print_info --message="Reloading nginx web server..."
-systemctl reload nginx
-
-#=================================================
-# START SERVICE
-#=================================================
-ynh_print_info "Start $app service..."
-
-ynh_systemd_action --service_name="$app" --action="start" --log_path="systemd" --line_match="Server listening on localhost"
+ynh_systemd_action --service_name=nginx --action=reload
#=================================================
# END OF SCRIPT
#=================================================
-ynh_print_info "Restoration completed for $app"
+ynh_print_info --message="Restoration completed for $app"
diff --git a/scripts/upgrade b/scripts/upgrade
index 2ca0233..aef0c55 100644
--- a/scripts/upgrade
+++ b/scripts/upgrade
@@ -8,54 +8,68 @@
source _common.sh
source ynh_add_extra_apt_repos__3
-source ynh_systemd_action
source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
-ynh_print_info "Loading installation settings..."
+ynh_print_info --message="Loading installation settings..."
app=$YNH_APP_INSTANCE_NAME
-domain=$(ynh_app_setting_get "$app" domain)
-path_url=$(ynh_app_setting_get $app path)
-is_public=$(ynh_app_setting_get "$app" is_public)
-admin_email=$(ynh_app_setting_get "$app" admin_email)
-final_path=$(ynh_app_setting_get "$app" final_path)
-port=$(ynh_app_setting_get "$app" port)
-db_name=$(ynh_app_setting_get "$app" psql_db)
-db_pwd=$(ynh_app_setting_get "$app" psqlpwd)
+domain=$(ynh_app_setting_get --app=$app --key=domain)
+path_url=$(ynh_app_setting_get --app=$app --key=path)
+is_public=$(ynh_app_setting_get --app=$app --key=is_public)
+admin_email=$(ynh_app_setting_get --app=$app --key=admin_email)
+final_path=$(ynh_app_setting_get --app=$app --key=final_path)
+port=$(ynh_app_setting_get --app=$app --key=port)
+db_name=$(ynh_app_setting_get --app=$app --key=psql_db)
+db_pwd=$(ynh_app_setting_get --app=$app --key=psqlpwd)
+
+#=================================================
+# CHECK VERSION
+#=================================================
+
+upgrade_type=$(ynh_check_app_version_changed)
#=================================================
# ENSURE DOWNWARD COMPATIBILITY
#=================================================
-ynh_print_info "Ensuring downward compatibility..."
+ynh_print_info --message="Ensuring downward compatibility..."
# Fix is_public as a boolean value
if [ "$is_public" = "Yes" ]; then
- ynh_app_setting_set "$app" is_public 1
+ ynh_app_setting_set --app=$app --key=is_public --value=1
is_public=1
elif [ "$is_public" = "No" ]; then
- ynh_app_setting_set "$app" is_public 0
+ ynh_app_setting_set --app=$app --key=is_public --value=0
is_public=0
fi
# Close a port
if yunohost firewall list | grep -q "\- $port$"
then
- ynh_print_info "Closing port $port"
+ ynh_print_info --message="Closing port $port"
ynh_exec_warn_less yunohost firewall disallow TCP $port
fi
-# Remove repository
-ynh_secure_remove /etc/apt/sources.list.d/jessie-backports.list
-ynh_secure_remove /etc/apt/sources.list.d/yarn.list
+# Add PostgreSQL extension for v1.0.0-beta.10.pre.1
+ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS unaccent;" --database=$db_name
+ynh_psql_execute_as_root --sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;" --database=$db_name
+# Remove repository
+ynh_secure_remove --file="/etc/apt/sources.list.d/jessie-backports.list"
+ynh_secure_remove --file="/etc/apt/sources.list.d/yarn.list"
+
+# Define app's data directory
+datadir="/home/yunohost.app/${app}/storage"
+# Create app folders
+mkdir -p "$datadir"
+
#=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#=================================================
-ynh_print_info "Backing up the app before upgrading (may take a while)..."
+ynh_print_info --message="Backing up the app before upgrading (may take a while)..."
# Backup the current version of the app
ynh_backup_before_upgrade
@@ -67,74 +81,48 @@ ynh_clean_setup () {
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
-#=================================================
-# STOP PEERTUBE FOR UPGRADE
-#=================================================
-ynh_print_info "Stop $app service..."
-
-ynh_systemd_action --service_name="$app" --action="stop"
-
-#===================================================
-# Add PostgreSQL extension for v1.0.0-beta.10.pre.1
-#===================================================
-
-ynh_psql_execute_as_root "\connect $db_name
-CREATE EXTENSION IF NOT EXISTS unaccent;CREATE EXTENSION IF NOT EXISTS pg_trgm;"
-
-#=================================================
-# REMOVE APP MAIN DIR
-#=================================================
-
-# Create a temporary directory
-tmpdir="$(mktemp -d)"
-# Backup the config file in the temp dir
-cp -a "$final_path/config/local-production.json" "$tmpdir/local-production.json"
-cp -a "$final_path/config/production.yaml" "$tmpdir/production.yaml"
-# Remove the app directory securely
-ynh_secure_remove "$final_path"
-
-# Define app's data directory
-datadir="/home/yunohost.app/${app}/storage"
-# Create app folders
-mkdir -p "$datadir"
-
#=================================================
# STANDARD UPGRADE STEPS
+#=================================================
+# STOP SYSTEMD SERVICE
+#=================================================
+ynh_print_info --message="Stopping a systemd service..."
+
+ynh_systemd_action --service_name=$app --action="stop"
+
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
-ynh_print_info "Upgrading source files..."
-# Download, check integrity, uncompress and patch the source from app.src
-ynh_setup_source "$final_path"
-
-#=================================================
-# MODIFY A CONFIG FILE
-#=================================================
-
-#Copy the admin saved settings from tmp directory to final path
-cp -a "$tmpdir/local-production.json" "$final_path/config/local-production.json"
-cp -a "$tmpdir/production.yaml" "$final_path/config/production.yaml"
-
-ynh_backup_if_checksum_is_different "$final_path/config/local-production.json"
-ynh_backup_if_checksum_is_different "$final_path/config/production.yaml"
-
-cp ../conf/production.yaml "$final_path/config/production.yaml"
-ynh_replace_string "__domain__" "$domain" "$final_path/config/production.yaml"
-ynh_replace_string "__db_name__" "$app" "$final_path/config/production.yaml"
-ynh_replace_string "__app__" "$app" "$final_path/config/production.yaml"
-ynh_replace_string "__db_pwd__" "$db_pwd" "$final_path/config/production.yaml"
-ynh_replace_string "__email__" "$admin_email" "$final_path/config/production.yaml"
-ynh_replace_string "__PORT__" "$port" "$final_path/config/production.yaml"
-
-
-# Remove the tmp directory securely
-ynh_secure_remove "$tmpdir"
+if [ "$upgrade_type" == "UPGRADE_APP" ]
+then
+ ynh_print_info --message="Upgrading source files..."
+
+ # Create a temporary directory
+ tmpdir="$(mktemp -d)"
+
+ # Backup the config file in the temp dir
+ cp -a "$final_path/config/local-production.json" "$tmpdir/local-production.json"
+ cp -a "$final_path/config/production.yaml" "$tmpdir/production.yaml"
+
+ # Remove the app directory securely
+ ynh_secure_remove --file="$final_path"
+
+ # Download, check integrity, uncompress and patch the source from app.src
+ ynh_setup_source --dest_dir="$final_path"
+
+ #Copy the admin saved settings from tmp directory to final path
+ cp -a "$tmpdir/local-production.json" "$final_path/config/local-production.json"
+ cp -a "$tmpdir/production.yaml" "$final_path/config/production.yaml"
+
+ # Remove the tmp directory securely
+ ynh_secure_remove --file="$tmpdir"
+fi
#=================================================
# NGINX CONFIGURATION
#=================================================
-ynh_print_info "Upgrading nginx web server configuration..."
+ynh_print_info --message="Upgrading nginx web server configuration..."
# Create a dedicated nginx config
ynh_add_nginx_config
@@ -142,10 +130,10 @@ ynh_add_nginx_config
#=================================================
# UPGRADE DEPENDENCIES
#=================================================
-ynh_print_info "Upgrading dependencies..."
+ynh_print_info --message="Upgrading dependencies..."
# Install nodejs
-ynh_install_nodejs 8
+ynh_install_nodejs --nodejs_version=8
# Install dependencies
ynh_install_app_dependencies $pkg_dependencies
@@ -163,13 +151,32 @@ ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ st
#=================================================
# CREATE DEDICATED USER
#=================================================
-ynh_print_info "Making sure dedicated system user exists..."
+ynh_print_info --message="Making sure dedicated system user exists..."
# Create a system user
ynh_system_user_create "$app"
#=================================================
# SPECIFIC UPGRADE
+#=================================================
+# MODIFY A CONFIG FILE
+#=================================================
+
+ynh_backup_if_checksum_is_different --file="$final_path/config/local-production.json"
+ynh_backup_if_checksum_is_different --file="$final_path/config/production.yaml"
+
+cp ../conf/production.yaml "$final_path/config/production.yaml"
+ynh_replace_string --match_string="__domain__" --replace_string="$domain" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__db_name__" --replace_string="$app" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__app__" --replace_string="$app" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__db_pwd__" --replace_string="$db_pwd" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__email__" --replace_string="$admin_email" --target_file="$final_path/config/production.yaml"
+ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="$final_path/config/production.yaml"
+
+# Recalculate and store the checksum of the file for the next upgrade.
+ynh_store_file_checksum "$final_path/config/local-production.json"
+ynh_store_file_checksum "$final_path/config/production.yaml"
+
#=================================================
# BUILD YARN DEPENDENCIES
#=================================================
@@ -178,14 +185,10 @@ pushd "$final_path"
yarn install --production --pure-lockfile
popd
-# Recalculate and store the checksum of the file for the next upgrade.
-ynh_store_file_checksum "$final_path/config/local-production.json"
-ynh_store_file_checksum "$final_path/config/production.yaml"
-
#=================================================
# SETUP LOGROTATE
#=================================================
-ynh_print_info "Upgrading logrotate configuration..."
+ynh_print_info --message="Upgrading logrotate configuration..."
# Use logrotate to manage app-specific logfile(s)
ynh_use_logrotate --non-append
@@ -193,9 +196,9 @@ ynh_use_logrotate --non-append
#=================================================
# SETUP SYSTEMD
#=================================================
-ynh_print_info "Upgrading systemd configuration..."
+ynh_print_info --message="Upgrading systemd configuration..."
-ynh_replace_string "__ENV_PATH__" "$PATH" "../conf/systemd.service"
+ynh_replace_string --match_string="__ENV_PATH__" --replace_string="$PATH" --target_file="../conf/systemd.service"
# Create a dedicated systemd config
ynh_add_systemd_config
@@ -212,31 +215,31 @@ chown -R "$app":"$app" "$datadir"
#=================================================
# SETUP SSOWAT
#=================================================
-ynh_print_info "Upgrading SSOwat configuration..."
+ynh_print_info --message="Upgrading SSOwat configuration..."
# Make app public if necessary
-if [ "$is_public" -eq 1 ]
+if [ $is_public -eq 1 ]
then
# unprotected_uris allows SSO credentials to be passed anyway
- ynh_app_setting_set "$app" unprotected_uris "/"
+ ynh_app_setting_set --app=$app --key=unprotected_uris --value="/"
fi
+#=================================================
+# START SYSTEMD SERVICE
+#=================================================
+ynh_print_info --message="Start $app service..."
+
+ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Server listening on localhost"
+
#=================================================
# RELOAD NGINX
#=================================================
-ynh_print_info "Reloading nginx web server..."
+ynh_print_info --message="Reloading nginx web server..."
-systemctl reload nginx
-
-#=================================================
-# START SERVICE
-#=================================================
-ynh_print_info "Start $app service..."
-
-ynh_systemd_action --service_name="$app" --action="start" --log_path="systemd" --line_match="Server listening on localhost"
+ynh_systemd_action --service_name=nginx --action=reload
#=================================================
# END OF SCRIPT
#=================================================
-ynh_print_info "Upgrade of $app completed"
+ynh_print_info --message="Upgrade of $app completed"
diff --git a/scripts/ynh_send_readme_to_admin__2 b/scripts/ynh_send_readme_to_admin__2
new file mode 100644
index 0000000..06cff8c
--- /dev/null
+++ b/scripts/ynh_send_readme_to_admin__2
@@ -0,0 +1,140 @@
+#!/bin/bash
+
+# Send an email to inform the administrator
+#
+# usage: ynh_send_readme_to_admin --app_message=app_message [--recipients=recipients] [--type=type]
+# | arg: -m --app_message= - The file with the content to send to the administrator.
+# | arg: -r, --recipients= - The recipients of this email. Use spaces to separate multiples recipients. - default: root
+# example: "root admin@domain"
+# If you give the name of a YunoHost user, ynh_send_readme_to_admin will find its email adress for you
+# example: "root admin@domain user1 user2"
+# | arg: -t, --type= - Type of mail, could be 'backup', 'change_url', 'install', 'remove', 'restore', 'upgrade'
+ynh_send_readme_to_admin() {
+ # Declare an array to define the options of this helper.
+ declare -Ar args_array=( [m]=app_message= [r]=recipients= [t]=type= )
+ local app_message
+ local recipients
+ local type
+ # Manage arguments with getopts
+
+ ynh_handle_getopts_args "$@"
+ app_message="${app_message:-}"
+ recipients="${recipients:-root}"
+ type="${type:-install}"
+
+ # Get the value of admin_mail_html
+ admin_mail_html=$(ynh_app_setting_get $app admin_mail_html)
+ admin_mail_html="${admin_mail_html:-0}"
+
+ # Retrieve the email of users
+ find_mails () {
+ local list_mails="$1"
+ local mail
+ local recipients=" "
+ # Read each mail in argument
+ for mail in $list_mails
+ do
+ # Keep root or a real email address as it is
+ if [ "$mail" = "root" ] || echo "$mail" | grep --quiet "@"
+ then
+ recipients="$recipients $mail"
+ else
+ # But replace an user name without a domain after by its email
+ if mail=$(ynh_user_get_info "$mail" "mail" 2> /dev/null)
+ then
+ recipients="$recipients $mail"
+ fi
+ fi
+ done
+ echo "$recipients"
+ }
+ recipients=$(find_mails "$recipients")
+
+ # Subject base
+ local mail_subject="☁️🆈🅽🅷☁️: \`$app\`"
+
+ # Adapt the subject according to the type of mail required.
+ if [ "$type" = "backup" ]; then
+ mail_subject="$mail_subject has just been backup."
+ elif [ "$type" = "change_url" ]; then
+ mail_subject="$mail_subject has just been moved to a new URL!"
+ elif [ "$type" = "remove" ]; then
+ mail_subject="$mail_subject has just been removed!"
+ elif [ "$type" = "restore" ]; then
+ mail_subject="$mail_subject has just been restored!"
+ elif [ "$type" = "upgrade" ]; then
+ mail_subject="$mail_subject has just been upgraded!"
+ else # install
+ mail_subject="$mail_subject has just been installed!"
+ fi
+
+ local mail_message="This is an automated message from your beloved YunoHost server.
+
+Specific information for the application $app.
+
+$(if [ -n "$app_message" ]
+then
+ cat "$app_message"
+else
+ echo "...No specific information..."
+fi)
+
+---
+Automatic diagnosis data from YunoHost
+
+__PRE_TAG1__$(yunohost tools diagnosis | grep -B 100 "services:" | sed '/services:/d')__PRE_TAG2__"
+
+ # Store the message into a file for further modifications.
+ echo "$mail_message" > mail_to_send
+
+ # If a html email is required. Apply html tags to the message.
+ if [ "$admin_mail_html" -eq 1 ]
+ then
+ # Insert 'br' tags at each ending of lines.
+ ynh_replace_string "$" "
" mail_to_send
+
+ # Insert starting HTML tags
+ sed --in-place '1s@^@\n\n
" mail_to_send + ynh_replace_string "__PRE_TAG2__" "<\pre>" mail_to_send + + # Insert finishing HTML tags + echo -e "\n\n" >> mail_to_send + + # Otherwise, remove tags to keep a plain text. + else + # Remove URL tags + ynh_replace_string "__URL_TAG[1,3]__" "" mail_to_send + ynh_replace_string "__URL_TAG2__" ": " mail_to_send + + # Remove PRE tags + ynh_replace_string "__PRE_TAG[1-2]__" "" mail_to_send + fi + + # Define binary to use for mail command + if [ -e /usr/bin/bsd-mailx ] + then + local mail_bin=/usr/bin/bsd-mailx + else + local mail_bin=/usr/bin/mail.mailutils + fi + + if [ "$admin_mail_html" -eq 1 ] + then + content_type="text/html" + else + content_type="text/plain" + fi + + # Send the email to the recipients + cat mail_to_send | $mail_bin -a "Content-Type: $content_type; charset=UTF-8" -s "$mail_subject" "$recipients" +} diff --git a/scripts/ynh_systemd_action b/scripts/ynh_systemd_action deleted file mode 100644 index 6bed6be..0000000 --- a/scripts/ynh_systemd_action +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash - -# 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 - 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 -}