diff --git a/README.md b/README.md index aa8bed4..f74c818 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,66 @@ -Transmission for YunoHost -========================= +# Transmission app for YunoHost -[Yunohost project](https://yunohost.org/#/) +[![Integration level](https://dash.yunohost.org/integration/transmission.svg)](https://dash.yunohost.org/appci/app/transmission) +[![Install Transmission with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=transmission) -[Transmission](http://www.transmissionbt.com/) is a fast, Free/Libre BitTorrent -client. This package install the Transmission web server. +> *This package allow you to install Transmission quickly and simply on a YunoHost server. +If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* -[![Install Wallabag v2 with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=transmission) +## Overview +Transmission is a fast, easy, and free BitTorrent client. -Continuous intergation ----------------------- +**Shipped version:** Debian repository version. -* [Weekly CI report (in french)](https://forum.yunohost.org/t/rapport-hebdomadaire-dintegration-continue/2297) -* [Last CI build](https://ci-apps.yunohost.org/jenkins/job/transmission%20%28Official%29/lastBuild/consoleFull) +## Screenshots + +![](https://transmissionbt.com/images/screenshots/Clutch-Large.jpg) + +## Demo + +* [YunoHost demo](https://demo.yunohost.org/nextcloud/) + +## Configuration + +## Documentation + + * Official documentation: https://github.com/transmission/transmission/wiki + * YunoHost documentation: https://yunohost.org/#/app_transmission + +## YunoHost specific features + + * Integration with YunoHost Multimedia directories + +#### Multi-users support + +#### Supported architectures + +* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/transmission%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/transmission/) +* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/transmission%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/transmission/) +* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/transmission%20%28Apps%29.svg)](https://ci-stretch.nohost.me/ci/apps/transmission/) + +## Limitations + +## Additionnal informations +``` + +## Links + + * Report a bug: https://github.com/YunoHost-Apps/transmission_ynh/issues + * Transmission website: https://transmissionbt.com/ + * Transmission repository: https://github.com/transmission/transmission + * YunoHost website: https://yunohost.org/ + +--- + +Developers infos +---------------- + +Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/transmission_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/transmission_ynh/tree/testing --debug +or +sudo yunohost app upgrade transmission -u https://github.com/YunoHost-Apps/transmission_ynh/tree/testing --debug +``` diff --git a/check_process b/check_process index 2ea5466..43bd8d4 100644 --- a/check_process +++ b/check_process @@ -8,7 +8,7 @@ setup_sub_dir=1 setup_root=1 setup_nourl=0 - setup_private=0 + setup_private=1 setup_public=0 upgrade=1 upgrade=1 from_commit=7d887f6bc1e29ce94de703517d5302580cbb8a7e @@ -16,20 +16,9 @@ multi_instance=0 incorrect_path=1 port_already_use=1 (9091) - change_url=0 + change_url=1 ;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto -# Level 4: No multi-users support - Level 4=na -# Level 5: https://github.com/YunoHost-Apps/transmission_ynh/issues/30 - Level 5=1 - Level 6=auto - Level 7=auto - Level 8=0 - Level 9=0 - Level 10=0 + Level 5=auto ;;; Options Email= Notification=down diff --git a/conf/90-transmission.conf b/conf/90-transmission.conf new file mode 100644 index 0000000..718730e --- /dev/null +++ b/conf/90-transmission.conf @@ -0,0 +1,5 @@ +# These settings affect the size of the buffers for send and receive sockets. +# Size of receive socket buffer +net.core.rmem_max = 4194304 +# Size of send socket buffer +net.core.wmem_max = 1048576 diff --git a/conf/nginx.conf b/conf/nginx.conf index ef2b411..caacf71 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,16 +1,18 @@ -location __PATH__transmission { - proxy_pass http://127.0.0.1:__PORT____PATH__transmission; +location __PATH__/transmission { + proxy_pass http://127.0.0.1:__PORT____PATH__/transmission; + + client_max_body_size 8M; # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; more_clear_input_headers 'Accept-Encoding'; } -location __PATH__ { +location __PATH__/ { proxy_pass http://127.0.0.1:__PORT__/; } -location __PATH__downloads { +location __PATH__/downloads { alias /home/yunohost.transmission/completed/; autoindex on; autoindex_exact_size off; diff --git a/manifest.json b/manifest.json index 644455a..b0ac36a 100644 --- a/manifest.json +++ b/manifest.json @@ -6,16 +6,16 @@ "en": "A Fast, Easy, and Free BitTorrent Client", "fr": "Un client BitTorrent libre et rapide" }, - "version": "1.0", + "version": "1.0~ynh2", "url": "https://www.transmissionbt.com/", - "license": " GPL-3.0", + "license": "GPL-3.0", "maintainer": { "name": "YunoHost Contributors", "email": "apps@yunohost.org" }, - "requirements": { - "yunohost": ">= 2.7.2" - }, + "requirements": { + "yunohost": ">= 3.5" + }, "multi_instance": false, "services": [ "nginx", diff --git a/pull_request_template.md b/pull_request_template.md index 4e9742c..69a2d22 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -19,6 +19,6 @@ - [ ] **Approval (LGTM)** : - [ ] **Approval (LGTM)** : - **CI succeeded** : -[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/transmission_ynh%20PR-NUM-/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/transmission_ynh%20PR-NUM-/) +[![Build Status](https://ci-apps-hq.yunohost.org/jenkins/job/transmission_ynh%20PR-NUM-/badge/icon)](https://ci-apps-hq.yunohost.org/jenkins/job/transmission_ynh%20PR-NUM-/) *Please replace '-NUM-' in this link by the PR number.* When the PR is marked as ready to merge, you have to wait for 3 days before really merging it. diff --git a/scripts/_common.sh b/scripts/_common.sh index adbff7a..75b2cbf 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,37 +1,62 @@ #!/bin/bash #================================================= -# YUNOHOST MULTIMEDIA INTEGRATION +# COMMON VARIABLES #================================================= +# dependencies used by the app +pkg_dependencies="transmission-daemon transmission-cli transmission-common acl" + +#================================================= +# PERSONAL HELPERS +#================================================= + +#================================================= +# EXPERIMENTAL HELPERS +#================================================= + +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= + +# Install or update the main directory yunohost.multimedia +# +# usage: ynh_multimedia_build_main_dir ynh_multimedia_build_main_dir () { - wget -qq https://github.com/YunoHost-Apps/yunohost.multimedia/archive/master.zip - unzip -qq master.zip - ./yunohost.multimedia-master/script/ynh_media_build.sh + local ynh_media_release="v1.2" + local checksum="806a827ba1902d6911095602a9221181" + + # Download yunohost.multimedia scripts + wget -nv https://github.com/YunoHost-Apps/yunohost.multimedia/archive/${ynh_media_release}.tar.gz + + # Check the control sum + echo "${checksum} ${ynh_media_release}.tar.gz" | md5sum -c --status \ + || ynh_die "Corrupt source" + + # Check if the package acl is installed. Or install it. + ynh_package_is_installed 'acl' \ + || ynh_package_install acl + + # Extract + mkdir yunohost.multimedia-master + tar -xf ${ynh_media_release}.tar.gz -C yunohost.multimedia-master --strip-components 1 + ./yunohost.multimedia-master/script/ynh_media_build.sh } +# Add a directory in yunohost.multimedia +# This "directory" will be a symbolic link to a existing directory. +# +# usage: ynh_multimedia_addfolder "Source directory" "Destination directory" +# +# | arg: -s, --source_dir= - Source directory - The real directory which contains your medias. +# | arg: -d, --dest_dir= - Destination directory - The name and the place of the symbolic link, relative to "/home/yunohost.multimedia" ynh_multimedia_addfolder () { - ./yunohost.multimedia-master/script/ynh_media_addfolder.sh --source="$1" --dest="$2" -} - -#================================================= -# BACKUP -#================================================= - -HUMAN_SIZE () { # Transforme une taille en Ko en une taille lisible pour un humain - human=$(numfmt --to=iec --from-unit=1K $1) - echo $human -} - -CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant - file_to_analyse=$1 - backup_size=$(du --summarize "$file_to_analyse" | cut -f1) - free_space=$(df --output=avail "/home/yunohost.backup" | sed 1d) - - if [ $free_space -le $backup_size ] - then - echo "Espace insuffisant pour sauvegarder $file_to_analyse." >&2 - echo "Espace disponible: $(HUMAN_SIZE $free_space)" >&2 - ynh_die "Espace nécessaire: $(HUMAN_SIZE $backup_size)" - fi + # Declare an array to define the options of this helper. + declare -Ar args_array=( [s]=source_dir= [d]=dest_dir= ) + local source_dir + local dest_dir + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + + ./yunohost.multimedia-master/script/ynh_media_addfolder.sh --source="$source_dir" --dest="$dest_dir" } diff --git a/scripts/backup b/scripts/backup index 6fba36d..a20a6a9 100644 --- a/scripts/backup +++ b/scripts/backup @@ -1,64 +1,61 @@ #!/bin/bash #================================================= -# GENERIC STARTING -#================================================= -# MANAGE FAILURE OF THE SCRIPT -#================================================= - -# Exit on command errors and treat unset variables as an error -set -eu - +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= -if [ ! -e _common.sh ]; then - # Get the _common.sh file if it's not in the current directory - cp ../settings/scripts/_common.sh ./_common.sh - chmod a+rx _common.sh -fi -source _common.sh +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) +domain=$(ynh_app_setting_get --app=$app --key=domain) #================================================= # STANDARD BACKUP STEPS #================================================= # BACKUP OF THE NGINX CONFIGURATION #================================================= +ynh_script_progression --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" #================================================= # SPECIFIC BACKUP #================================================= # BACKUP TRANSMISSION CONFIGURATION #================================================= +ynh_script_progression --message="Backing up transmission configuration..." -ynh_backup "/etc/transmission-daemon/settings.json" +ynh_backup --src_path="/etc/transmission-daemon/settings.json" +ynh_backup --src_path="/etc/sysctl.d/90-transmission.conf" #================================================= # BACKUP DATA #================================================= +ynh_script_progression --message="Backing up transmission data..." -ynh_backup "/usr/share/transmission" +ynh_backup --src_path="/usr/share/transmission" +ynh_backup --src_path="/var/lib/transmission-daemon" -ynh_backup "/var/lib/transmission-daemon" +ynh_backup --src_path="/home/yunohost.transmission" --is_big -backup_core_only=$(ynh_app_setting_get $app backup_core_only) -# If backup_core_only have a value in settings.yml, do not backup the data directory -if [ -z $backup_core_only ] -then - CHECK_SIZE "/home/yunohost.transmission" - ynh_backup "/home/yunohost.transmission" -else - echo "Data dir will not saved, because backup_core_only is set." >&2 -fi +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --last diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..7fbfbb2 --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,115 @@ +#!/bin/bash + +#================================================= +# GENERIC STARTING +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS +#================================================= + +old_domain=$YNH_APP_OLD_DOMAIN +old_path=$YNH_APP_OLD_PATH + +new_domain=$YNH_APP_NEW_DOMAIN +new_path=$YNH_APP_NEW_PATH + +app=$YNH_APP_INSTANCE_NAME + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." + +# Needed for helper "ynh_add_nginx_config" +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +port=$(ynh_app_setting_get --app=$app --key=port) + +#================================================= +# CHECK WHICH PARTS SHOULD BE CHANGED +#================================================= + +change_domain=0 +if [ "$old_domain" != "$new_domain" ] +then + change_domain=1 +fi + +change_path=0 +if [ "$old_path" != "$new_path" ] +then + change_path=1 +fi + +#================================================= +# STANDARD MODIFICATIONS +#================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Stopping transmission..." --weight=2 + +ynh_systemd_action --service_name=transmission-daemon --action=stop + +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= +ynh_script_progression --message="Updating nginx web server configuration..." --weight=2 + +nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf + +# Change the path in the nginx config file +if [ $change_path -eq 1 ] +then + # Make a backup of the original nginx config file if modified + ynh_backup_if_checksum_is_different --file="$nginx_conf_path" + # Set global variables for nginx helper + domain="$old_domain" + path_url="$new_path" + # Create a dedicated nginx config + ynh_add_nginx_config +fi + +# Change the domain for nginx +if [ $change_domain -eq 1 ] +then + # Delete file checksum for the old conf file location + ynh_delete_file_checksum --file="$nginx_conf_path" + mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf + # Store file checksum for the new config file location + ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" +fi + +#================================================= +# SPECIFIC MODIFICATIONS +#================================================= +# UPDATE TRANSMISSION CONFIGURATION +#================================================= + +ynh_replace_string --match_string="rpc-url\": \"${old_path%/}/transmission/" --replace_string="rpc-url\": \"${new_path%/}/transmission/" --target_file="/etc/transmission-daemon/settings.json" + +#================================================= +# GENERIC FINALISATION +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting transmission..." --weight=2 + +ynh_systemd_action --service_name=transmission-daemon --action=start + +#================================================= +# RELOAD NGINX +#================================================= +ynh_script_progression --message="Reloading nginx web server..." + +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Change of URL completed for $app" --last diff --git a/scripts/install b/scripts/install index f5d7e6a..d2a7009 100644 --- a/scripts/install +++ b/scripts/install @@ -28,45 +28,47 @@ app=$YNH_APP_INSTANCE_NAME #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THIS ARGS #================================================= +ynh_script_progression --message="Validating installation parameters..." # Normalize the url path syntax path_url=$(ynh_normalize_url_path $path_url) -# Check web path availability -ynh_webpath_available $domain $path_url # 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_script_progression --message="Storing installation settings..." --weight=2 -ynh_app_setting_set $app domain $domain -ynh_app_setting_set $app path $path_url +ynh_app_setting_set --app=$app --key=domain --value=$domain +ynh_app_setting_set --app=$app --key=path --value=$path_url #================================================= # STANDARD MODIFICATIONS #================================================= # FIND AND OPEN PORTS #================================================= +ynh_script_progression --message="Configuring firewall..." --weight=16 # Find a free port -port=$(ynh_find_port 9091) +port=$(ynh_find_port --port=9091) # Open this port -yunohost firewall allow --no-upnp TCP $port >/dev/null 2>&1 -ynh_app_setting_set $app port $port +ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port +ynh_app_setting_set --app=$app --key=port --value=$port # Find a free port -peer_port=$(ynh_find_port 51413) +peer_port=$(ynh_find_port --port=51413) # Open this port -yunohost firewall allow Both $peer_port >/dev/null 2>&1 -ynh_app_setting_set $app peer_port $peer_port +ynh_exec_warn_less yunohost firewall allow Both $peer_port +ynh_app_setting_set --app=$app --key=peer_port --value=$peer_port #================================================= # INSTALL TRANSMISSION #================================================= +ynh_script_progression --message="Installing transmission..." --weight=16 -ynh_install_app_dependencies transmission-daemon transmission-cli transmission-common acl +ynh_install_app_dependencies $pkg_dependencies # Fix a stupid issue which happens sometimes ... # transmission-common is installed (it's a dependency of @@ -82,10 +84,9 @@ fi #================================================= # NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Configuring nginx web server..." --weight=2 -# Add a "/" at the end of path_url for next commands -# To avoid a double / in the nginx config file. -[ "$path_url" = "/" ] || path_url=${path_url}/ +# Create a dedicated nginx config ynh_add_nginx_config #================================================= @@ -108,37 +109,50 @@ chmod -R 777 /home/yunohost.transmission/watched #================================================= # CONFIGURE TRANSMISSION #================================================= +ynh_script_progression --message="Configuring transmission..." --weight=2 # Transmission has to be stopped before modifying its config -systemctl stop transmission-daemon +ynh_systemd_action --service_name=transmission-daemon --action=stop # Create a RPC password rpcpassword=$(ynh_string_random) -ynh_app_setting_set $app rpcpassword "$rpcpassword" +ynh_app_setting_set --app=$app --key=rpcpassword --value="$rpcpassword" -ynh_replace_string "__RPC_PASSWORD_TO_CHANGE__" "$rpcpassword" ../conf/settings.json -ynh_replace_string "__PATH__" "$path_url" ../conf/settings.json -ynh_replace_string "__PEER_PORT__" "$peer_port" ../conf/settings.json -ynh_replace_string "__PORT__" "$port" ../conf/settings.json +ynh_replace_string --match_string="__RPC_PASSWORD_TO_CHANGE__" --replace_string="$rpcpassword" --target_file=../conf/settings.json +if [ "$path_url" != "/" ] +then + ynh_replace_string --match_string="__PATH__" --replace_string="$path_url/" --target_file=../conf/settings.json +else + ynh_replace_string --match_string="__PATH__" --replace_string="$path_url" --target_file=../conf/settings.json +fi +ynh_replace_string --match_string="__PEER_PORT__" --replace_string="$peer_port" --target_file=../conf/settings.json +ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file=../conf/settings.json cp ../conf/settings.json /etc/transmission-daemon/settings.json +cp ../conf/90-transmission.conf /etc/sysctl.d/90-transmission.conf +if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then + sysctl --load=/etc/sysctl.d/90-transmission.conf +fi + #================================================= # STORE THE CHECKSUM OF THE CONFIG FILE #================================================= -ynh_store_file_checksum /etc/transmission-daemon/settings.json +ynh_store_file_checksum --file=/etc/transmission-daemon/settings.json +ynh_store_file_checksum --file=/etc/sysctl.d/90-transmission.conf #================================================= # YUNOHOST MULTIMEDIA INTEGRATION #================================================= +ynh_script_progression --message="Adding multimedia directories..." --weight=4 ynh_multimedia_build_main_dir # Set rights on transmission directory (parent need to be readable by other, and progress need to be writable by multimedia. Because files will move) -ynh_multimedia_addfolder "/home/yunohost.transmission" "share/Torrents" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission" --dest_dir="share/Torrents" # And share completed directory -ynh_multimedia_addfolder "/home/yunohost.transmission/completed" "share/Torrents" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission/completed" --dest_dir="share/Torrents" # Share also watched directory, to allow to use it easily -ynh_multimedia_addfolder "/home/yunohost.transmission/watched" "share/Torrent to download" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission/watched" --dest_dir="share/Torrent to download" #================================================= # PATCH SOURCE TO ADD A DOWNLOAD BUTTON @@ -148,22 +162,30 @@ cp ../sources/extra_files/app/toolbar-downloads.png /usr/share/transmission/web/ cat ../sources/extra_files/app/ynh_common.css >> /usr/share/transmission/web/style/transmission/common.css ynh_replace_string "
" "" /usr/share/transmission/web/index.html +#================================================= +# START TRANSMISSION +#================================================= +ynh_script_progression --message="Starting transmission..." + +ynh_systemd_action --service_name=transmission-daemon --action=start + #================================================= # GENERIC FINALISATION #================================================= -# ENABLE SERVICE IN ADMIN PANEL +# ADVERTISE SERVICE IN ADMIN PANEL #================================================= yunohost service add transmission-daemon --log "/var/log/syslog" -#================================================= -# START TRANSMISSION -#================================================= - -systemctl start transmission-daemon - #================================================= # RELOAD NGINX #================================================= +ynh_script_progression --message="Reloading nginx web server..." -systemctl reload nginx +ynh_systemd_action --service_name=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Installation of $app completed" --last diff --git a/scripts/remove b/scripts/remove index f09a23c..76b964c 100644 --- a/scripts/remove +++ b/scripts/remove @@ -12,50 +12,54 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -port=$(ynh_app_setting_get $app port) -peer_port=$(ynh_app_setting_get $app peer_port) +domain=$(ynh_app_setting_get --app=$app --key=domain) +port=$(ynh_app_setting_get --app=$app --key=port) +peer_port=$(ynh_app_setting_get --app=$app --key=peer_port) #================================================= # STANDARD REMOVE #================================================= -# REMOVE TRANSMISSION-DAEMON +# REMOVE SERVICE FROM ADMIN PANEL #================================================= -ynh_remove_app_dependencies - -#================================================= -# DISABLE SERVICE IN ADMIN PANEL -#================================================= - -if yunohost service status | grep -q transmission-daemon +# Remove a service from the admin panel, added by `yunohost service add` +if yunohost service status transmission-daemon >/dev/null 2>&1 then - echo "Remove transmission-daemon service" + ynh_script_progression --message="Removing $app service..." --weight=8 yunohost service remove transmission-daemon fi +#================================================= +# REMOVE TRANSMISSION-DAEMON +#================================================= +ynh_script_progression --message="Removing transmission..." --weight=9 + +ynh_remove_app_dependencies + #================================================= # CLOSE THE PORTS #================================================= if yunohost firewall list | grep -q "\- $port$" then - echo "Close port $port" - yunohost firewall disallow TCP $port 2>&1 + ynh_script_progression --message="Closing port $port..." + ynh_exec_warn_less yunohost firewall disallow TCP $port fi if yunohost firewall list | grep -q "\- $peer_port$" then - echo "Close port $peer_port" - yunohost firewall disallow Both $peer_port 2>&1 + ynh_script_progression --message="Closing port $peer_port..." + ynh_exec_warn_less yunohost firewall disallow Both $peer_port fi #================================================= # REMOVE THE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Removing nginx web server configuration..." # Remove the dedicated nginx config ynh_remove_nginx_config @@ -65,27 +69,30 @@ ynh_remove_nginx_config #================================================= # REMOVE DATA #================================================= - -backup_core_only=$(ynh_app_setting_get $app backup_core_only) -# If backup_core_only have a value in settings.yml, do not remove the data directory -if [ -z $backup_core_only ] -then - ynh_secure_remove /home/yunohost.transmission -fi - -# And remove the link in yunohost.multimedia -rm "/home/yunohost.multimedia/share/Torrents" -rm "/home/yunohost.multimedia/share/Torrent to download" +ynh_script_progression --message="Removing transmission data..." # Web interface -ynh_secure_remove /usr/share/transmission +ynh_secure_remove --file=/usr/share/transmission # And data -ynh_secure_remove /var/lib/transmission-daemon +ynh_secure_remove --file=/var/lib/transmission-daemon +# Kernel parameters +ynh_secure_remove --file=/etc/sysctl.d/90-transmission.conf +if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then + sysctl --load=/etc/sysctl.d/90-transmission.conf +fi #================================================= # GENERIC FINALISATION #================================================= # REMOVE DEDICATED USER #================================================= +ynh_script_progression --message="Removing the dedicated system user" -ynh_system_user_delete debian-transmission +# Delete a system user +ynh_system_user_delete --username=debian-transmission + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" --last diff --git a/scripts/restore b/scripts/restore index 6139280..a7b7a12 100644 --- a/scripts/restore +++ b/scripts/restore @@ -1,40 +1,37 @@ #!/bin/bash #================================================= -# GENERIC STARTING -#================================================= -# MANAGE FAILURE OF THE SCRIPT -#================================================= - -# Exit on command errors and treat unset variables as an error -set -eu - +# GENERIC START #================================================= # IMPORT GENERIC HELPERS #================================================= -if [ ! -e _common.sh ]; then - # Get the _common.sh file if it's not in the current directory - cp ../settings/scripts/_common.sh ./_common.sh - chmod a+rx _common.sh -fi -source _common.sh +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= + +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading settings..." app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) -port=$(ynh_app_setting_get $app port) -peer_port=$(ynh_app_setting_get $app peer_port) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +port=$(ynh_app_setting_get --app=$app --key=port) +peer_port=$(ynh_app_setting_get --app=$app --key=peer_port) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= +ynh_script_progression --message="Validating restoration parameters..." ynh_webpath_available $domain $path_url \ || ynh_die "Path not available: ${domain}${path_url}" @@ -42,87 +39,106 @@ ynh_webpath_available $domain $path_url \ #================================================= # STANDARD RESTORE STEPS #================================================= -# RESTORE OF THE NGINX CONFIGURATION +# 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" #================================================= # OPEN PORTS #================================================= +ynh_script_progression --message="Configuring firewall..." --weight=13 -yunohost firewall allow --no-upnp TCP $port >/dev/null 2>&1 -yunohost firewall allow Both $peer_port >/dev/null 2>&1 +ynh_exec_warn_less yunohost firewall allow --no-upnp TCP $port +ynh_exec_warn_less yunohost firewall allow Both $peer_port #================================================= # SPECIFIC RESTORE #================================================= # REINSTALL TRANSMISSION #================================================= +ynh_script_progression --message="Reinstalling transmission..." --weight=16 -ynh_install_app_dependencies transmission-daemon transmission-cli transmission-common acl +# Define and install dependencies +ynh_install_app_dependencies $pkg_dependencies #================================================= # RESTORE TRANSMISSION CONFIGURATION #================================================= +ynh_script_progression --message="Restoring transmission configuration..." --weight=2 # Transmission has to be stopped before modifying its config -systemctl stop transmission-daemon +ynh_systemd_action --service_name=transmission-daemon --action=stop -ynh_secure_remove /etc/transmission-daemon/settings.json -ynh_restore_file /etc/transmission-daemon/settings.json +ynh_secure_remove --file=/etc/transmission-daemon/settings.json +ynh_restore_file --origin_path=/etc/transmission-daemon/settings.json + +ynh_restore_file --origin_path="/etc/sysctl.d/90-transmission.conf" +if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then + sysctl --load=/etc/sysctl.d/90-transmission.conf +fi #================================================= # RESTORE DATA #================================================= +ynh_script_progression --message="Restoring transmission data..." -ynh_secure_remove /usr/share/transmission -ynh_restore_file /usr/share/transmission +ynh_secure_remove --file=/usr/share/transmission +ynh_restore_file --origin_path=/usr/share/transmission -ynh_secure_remove /var/lib/transmission-daemon -ynh_restore_file /var/lib/transmission-daemon +ynh_secure_remove --file=/var/lib/transmission-daemon +ynh_restore_file --origin_path=/var/lib/transmission-daemon -# The data directory is restored only if it's in the backup. -# If the backup have made with backup_core_only option, this directory didn't saved. -if [ -d "${YNH_APP_BACKUP_DIR}/home/yunohost.transmission" ] -then - ynh_restore_file "/home/yunohost.transmission" -else - mkdir -p /home/yunohost.transmission/{progress,completed,watched} - chown -R debian-transmission:www-data /home/yunohost.transmission/ - chown -R debian-transmission: /home/yunohost.transmission/{progress,watched} - chmod -R 640 /home/yunohost.transmission - chmod -R 777 /home/yunohost.transmission/watched -fi -# Remove the backup_core_only option from the settings.yml -ynh_app_setting_delete $app backup_core_only +# Use --not_mandatory for the data directory, because if the backup has been made with BACKUP_CORE_ONLY, there's no data into the backup. +ynh_restore_file --origin_path="/home/yunohost.transmission" --not_mandatory + +#================================================= +# RESTORE USER RIGHTS +#================================================= + +mkdir -p /home/yunohost.transmission/{progress,completed,watched} +chown -R debian-transmission:www-data /home/yunohost.transmission/ +chown -R debian-transmission: /home/yunohost.transmission/{progress,watched} +chmod -R 640 /home/yunohost.transmission +chmod -R 777 /home/yunohost.transmission/watched #================================================= # YUNOHOST MULTIMEDIA INTEGRATION #================================================= +ynh_script_progression --message="Adding multimedia directories..." --weight=4 ynh_multimedia_build_main_dir # Set rights on transmission directory (parent need to be readable by other, and progress need to be writable by multimedia. Because files will move) -ynh_multimedia_addfolder "/home/yunohost.transmission" "share/Torrents" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission" --dest_dir="share/Torrents" # And share completed directory -ynh_multimedia_addfolder "/home/yunohost.transmission/completed" "share/Torrents" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission/completed" --dest_dir="share/Torrents" # Share also watched directory, to allow to use it easily -ynh_multimedia_addfolder "/home/yunohost.transmission/watched" "share/Torrent to download" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission/watched" --dest_dir="share/Torrent to download" #================================================= -# ENABLE SERVICE IN ADMIN PANEL +# START TRANSMISSION +#================================================= +ynh_script_progression --message="Starting transmission..." + +ynh_systemd_action --service_name=transmission-daemon --action=start + +#================================================= +# ADVERTISE SERVICE IN ADMIN PANEL #================================================= yunohost service add transmission-daemon --log "/var/log/syslog" #================================================= -# START TRANSMISSION +# GENERIC FINALIZATION #================================================= +# RELOAD NGINX AND PHP-FPM +#================================================= +ynh_script_progression --message="Reloading nginx web server..." --weight=2 -systemctl start transmission-daemon +ynh_systemd_action --service_name=nginx --action=reload #================================================= -# RELOAD NGINX +# END OF SCRIPT #================================================= -systemctl reload nginx +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index 4c07458..9ad3d67 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,65 +12,84 @@ source /usr/share/yunohost/helpers #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --weight=2 app=$YNH_APP_INSTANCE_NAME -domain=$(ynh_app_setting_get $app domain) -path_url=$(ynh_app_setting_get $app path) -port=$(ynh_app_setting_get $app port) -peer_port=$(ynh_app_setting_get $app peer_port) +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +port=$(ynh_app_setting_get --app=$app --key=port) +peer_port=$(ynh_app_setting_get --app=$app --key=peer_port) #================================================= -# FIX OLD THINGS +# CHECK VERSION #================================================= -if [ -z $port ]; then +upgrade_type=$(ynh_check_app_version_changed) + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." --weight=4 + +if [ -z "$port" ]; then port=9091 - ynh_app_setting_set $app port $port + ynh_app_setting_set --app=$app --key=port --value=$port + fi -if [ -z $peer_port ]; then +if [ -z "$peer_port" ]; then peer_port=51413 - ynh_app_setting_set $app peer_port $peer_port + ynh_app_setting_set --app=$app --key=peer_port --value=$peer_port fi # Add peer_port also on UDP. -yunohost firewall allow UDP $peer_port >/dev/null 2>&1 +ynh_exec_warn_less yunohost firewall allow UDP $peer_port #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --weight=3 # Inform the backup/restore process that it should not save the data directory +# Use only for the previous backup script that doesn't set 'is_big' ynh_app_setting_set $app backup_core_only 1 -ynh_backup_before_upgrade # Backup the current version of the app + +# Backup the current version of the app +ynh_backup_before_upgrade + +# Remove the option backup_core_only after the backup. +ynh_app_setting_delete $app backup_core_only + ynh_clean_setup () { - ynh_restore_upgradebackup # restore it if the upgrade fails + # restore it if the upgrade fails + ynh_restore_upgradebackup } -ynh_abort_if_errors # Exit if an error occurs during the execution of the script +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors #================================================= # CHECK THE PATH #================================================= # Normalize the URL path syntax -path_url=$(ynh_normalize_url_path $path_url) +path_url=$(ynh_normalize_url_path --path_url=$path_url) #================================================= # STANDARD UPGRADE STEPS #================================================= # NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Upgrading nginx web server configuration..." --weight=2 -# Add a "/" at the end of path_url for next commands -# To avoid a double / in the nginx config file. -[ "$path_url" = "/" ] || path_url=${path_url}/ +# Create a dedicated nginx config ynh_add_nginx_config #================================================= # INSTALL DEPENDENCIES #================================================= +ynh_script_progression --message="Upgrading dependencies..." --weight=7 -ynh_install_app_dependencies transmission-daemon transmission-cli transmission-common acl +ynh_install_app_dependencies $pkg_dependencies #================================================= # SPECIFIC UPGRADE @@ -92,41 +111,57 @@ chmod -R 777 /home/yunohost.transmission/watched #================================================= # CONFIGURE TRANSMISSION #================================================= +ynh_script_progression --message="Reconfiguring transmission..." --weight=2 # Transmission has to be stopped before modifying its config -systemctl stop transmission-daemon +ynh_systemd_action --service_name=transmission-daemon --action=stop # Verify the checksum and backup the file if it's different -ynh_backup_if_checksum_is_different /etc/transmission-daemon/settings.json +ynh_backup_if_checksum_is_different --file=/etc/transmission-daemon/settings.json # Create a RPC password rpcpassword=$(ynh_string_random) -ynh_app_setting_set $app rpcpassword "$rpcpassword" +ynh_app_setting_set --app=$app --key=rpcpassword --value="$rpcpassword" -ynh_replace_string "__RPC_PASSWORD_TO_CHANGE__" "$rpcpassword" ../conf/settings.json -ynh_replace_string "__PATH__" "$path_url" ../conf/settings.json -ynh_replace_string "__PEER_PORT__" "$peer_port" ../conf/settings.json -ynh_replace_string "__PORT__" "$port" ../conf/settings.json +ynh_replace_string --match_string="__RPC_PASSWORD_TO_CHANGE__" --replace_string="$rpcpassword" --target_file=../conf/settings.json +if [ "$path_url" != "/" ] +then + ynh_replace_string --match_string="__PATH__" --replace_string="$path_url/" --target_file=../conf/settings.json +else + ynh_replace_string --match_string="__PATH__" --replace_string="$path_url" --target_file=../conf/settings.json +fi +ynh_replace_string --match_string="__PEER_PORT__" --replace_string="$peer_port" --target_file=../conf/settings.json +ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file=../conf/settings.json cp ../conf/settings.json /etc/transmission-daemon/settings.json +# Verify the checksum and backup the file if it's different +ynh_backup_if_checksum_is_different --file=/etc/sysctl.d/90-transmission.conf + +cp ../conf/90-transmission.conf /etc/sysctl.d/90-transmission.conf +if [ ${PACKAGE_CHECK_EXEC:-0} -eq 0 ]; then + sysctl --load=/etc/sysctl.d/90-transmission.conf +fi + #================================================= # STORE THE CHECKSUM OF THE CONFIG FILE #================================================= # Recalculate and store the config file checksum into the app settings -ynh_store_file_checksum /etc/transmission-daemon/settings.json +ynh_store_file_checksum --file=/etc/transmission-daemon/settings.json +ynh_store_file_checksum --file=/etc/sysctl.d/90-transmission.conf #================================================= # YUNOHOST MULTIMEDIA INTEGRATION #================================================= +ynh_script_progression --message="Adding multimedia directories..." --weight=3 ynh_multimedia_build_main_dir # Set rights on transmission directory (parent need to be readable by other, and progress need to be writable by multimedia. Because files will move) -ynh_multimedia_addfolder "/home/yunohost.transmission" "share/Torrents" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission" --dest_dir="share/Torrents" # And share completed directory -ynh_multimedia_addfolder "/home/yunohost.transmission/completed" "share/Torrents" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission/completed" --dest_dir="share/Torrents" # Share also watched directory, to allow to use it easily -ynh_multimedia_addfolder "/home/yunohost.transmission/watched" "share/Torrent to download" +ynh_multimedia_addfolder --source_dir="/home/yunohost.transmission/watched" --dest_dir="share/Torrent to download" #================================================= # PATCH SOURCE TO ADD A DOWNLOAD BUTTON @@ -142,17 +177,21 @@ ynh_replace_string "