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\n\n@' mail_to_send + + # Keep tabulations + ynh_replace_string " " "\ \ " mail_to_send + ynh_replace_string "\t" "\ \ " mail_to_send + + # Insert url links tags + ynh_replace_string "__URL_TAG1__\(.*\)__URL_TAG2__\(.*\)__URL_TAG3__" "\1" mail_to_send + + # Insert pre tags + ynh_replace_string "__PRE_TAG1__" "
" 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
-}