From 92644d26f8c1d9645b88ae18d70cbef73f7a6469 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sat, 26 Mar 2022 21:38:22 +0100 Subject: [PATCH 01/10] Apply example_ynh --- .github/ISSUE_TEMPLATE.md | 55 +++++++++ .github/PULL_REQUEST_TEMPLATE.md | 16 +++ check_process | 14 +-- conf/nginx.conf | 3 +- conf/systemd.service | 15 +++ doc/.gitkeep | 0 doc/DESCRIPTION.md | 1 + doc/DISCLAIMER.md | 4 + doc/screenshots/.gitkeep | 0 doc/screenshots/sample.png | Bin 0 -> 176675 bytes manifest.json | 36 +++--- scripts/_common.sh | 21 +++- scripts/backup | 86 +++++++++----- scripts/change_url | 137 ++++++++++++++++++++++ scripts/install | 187 ++++++++++++++++++------------- scripts/remove | 78 ++++++++----- scripts/restore | 157 +++++++++++++++++++------- scripts/upgrade | 150 +++++++++++++++++++------ 18 files changed, 722 insertions(+), 238 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 conf/systemd.service create mode 100644 doc/.gitkeep create mode 100644 doc/DESCRIPTION.md create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/screenshots/.gitkeep create mode 100644 doc/screenshots/sample.png create mode 100644 scripts/change_url diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..2729a6b --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,55 @@ +--- +name: Bug report +about: When creating a bug report, please use the following template to provide all the relevant information and help debugging efficiently. + +--- + +**How to post a meaningful bug report** +1. *Read this whole template first.* +2. *Determine if you are on the right place:* + - *If you were performing an action on the app from the webadmin or the CLI (install, update, backup, restore, change_url...), you are on the right place!* + - *Otherwise, the issue may be due to the app itself. Refer to its documentation or repository for help.* + - *When in doubt, post here and we will figure it out together.* +3. *Delete the italic comments as you write over them below, and remove this guide.* +--- + +### Describe the bug + +*A clear and concise description of what the bug is.* + +### Context + +- Hardware: *VPS bought online / Old laptop or computer / Raspberry Pi at home / Internet Cube with VPN / Other ARM board / ...* +- YunoHost version: x.x.x +- I have access to my server: *Through SSH | through the webadmin | direct access via keyboard / screen | ...* +- Are you in a special context or did you perform some particular tweaking on your YunoHost instance?: *no / yes* + - If yes, please explain: +- Using, or trying to install package version/branch: +- If upgrading, current package version: *can be found in the admin, or with `yunohost app info $app_id`* + +### Steps to reproduce + +- *If you performed a command from the CLI, the command itself is enough. For example:* + ```sh + sudo yunohost app install the_app + ``` +- *If you used the webadmin, please perform the equivalent command from the CLI first.* +- *If the error occurs in your browser, explain what you did:* + 1. *Go to '...'* + 2. *Click on '...'* + 3. *Scroll down to '...'* + 4. *See error* + +### Expected behavior + +*A clear and concise description of what you expected to happen. You can remove this section if the command above is enough to understand your intent.* + +### Logs + +*When an operation fails, YunoHost provides a simple way to share the logs.* +- *In the webadmin, the error message contains a link to the relevant log page. On that page, you will be able to 'Share with Yunopaste'. If you missed it, the logs of previous operations are also available under Tools > Logs.* +- *In command line, the command to share the logs is displayed at the end of the operation and looks like `yunohost log display [log name] --share`. If you missed it, you can find the log ID of a previous operation using `yunohost log list`.* + +*After sharing the log, please copypaste directly the link provided by YunoHost (to help readability, no need to copypaste the entire content of the log here, just the link is enough...)* + +*If applicable and useful, add screenshots to help explain your problem.* diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ef70e18 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,16 @@ +## Problem + +- *Description of why you made this PR* + +## Solution + +- *And how do you fix that problem* + +## PR Status + +- [ ] Code finished and ready to be reviewed/tested +- [ ] The fix/enhancement were manually tested (if applicable) + +## Automatic tests + +Automatic tests can be triggered on https://ci-apps-dev.yunohost.org/ *after creating the PR*, by commenting "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!". (N.B. : for this to work you need to be a member of the Yunohost-Apps organization) diff --git a/check_process b/check_process index 0cbeae3..17956af 100644 --- a/check_process +++ b/check_process @@ -1,16 +1,8 @@ -# See here for more informations -# https://github.com/YunoHost/package_check#syntax-check_process-file - -# Move this file from check_process.default to check_process when you have filled it. - ;; Test complet ; Manifest - domain="domain.tld" (DOMAIN) - path="/" (PATH) - is_public=1 (PUBLIC|public=1|private=0) -# password="pass" -# nextclouddomain="domain.tld" - port="9980" (PORT) + domain="domain.tld" + path="/path" + is_public=1 ; Checks pkg_linter=1 setup_sub_dir=0 diff --git a/conf/nginx.conf b/conf/nginx.conf index 4193bce..217b22f 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,4 +1,5 @@ -location ^~ __PATH__/ { +#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; +location __PATH__/ { proxy_pass http://127.0.0.1:__PORT__; proxy_redirect off; proxy_set_header Host $host; diff --git a/conf/systemd.service b/conf/systemd.service new file mode 100644 index 0000000..fb766fe --- /dev/null +++ b/conf/systemd.service @@ -0,0 +1,15 @@ +[Unit] +Description=Python Downloader +After=network.target + +[Service] +Type=simple +User=__APP__ +Group=__APP__ +WorkingDirectory=__FINALPATH__/ +ExecStart=__FINALPATH__/venv/bin/pyload --storagedir __DATADIR__ +StandardOutput=append:/var/log/__APP__/__APP__.log +StandardError=inherit + +[Install] +WantedBy=multi-user.target diff --git a/doc/.gitkeep b/doc/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..051ceda --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1 @@ +The free and open-source Download Manager written in pure Python diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..3023a28 --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,4 @@ +- Default username: `pyload`. +- Default password: `pyload`. + +**It's highly recommended to change the default access credentials on first start**. diff --git a/doc/screenshots/.gitkeep b/doc/screenshots/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/screenshots/sample.png b/doc/screenshots/sample.png new file mode 100644 index 0000000000000000000000000000000000000000..b47a8612cb667b11143083014a7cbd34df279269 GIT binary patch literal 176675 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

EH9dVx| zKkFAfEi5}IX;=GpXRPP$5U-(kKK@0=-jn$^^v5Ud#957i7en1_XBjacvXe^(5vva9ql@PN*&elN5)&l3Iv6B(Qpz*Z`WZyRj1Ypd z`w8jY=+oBt3RBo+d>E9LV#X=c6~ux>Mu=YYkSVAJ0N`(-M@_x9JUpX?%xeJ08ME@U zTn8nVHa-*k9*B5xp~af+(NUceF;v@f^Fd!k1tWkjnvLs^#GC zY>XqlubQ$Jp!zI2ei(K3A)ml0qge#ltY{RDiifw~3a@}9ne@>>K2!UrdAqKJD*6dM z8}TY@LU~c(aLgPbR4VN87pFZiUW$1-h+t5E zp&^`l&P?VFpgSKA2m-Z%%&{S$J`6WpLR4W4Mf6_cb#WtzWvdm?o}ixAYaKd6Cswbz zSEWflCSFCAi;E)4;g!2Rwvq5)7z`+HCFOrt9|W>gyQ8S?*D@U8t0dGMDZl}?BJ}Eq zBTC2XTh)pB67}x8e`>ZSQHyz(#5S9ofprqp87`l{YDuy)+_~b6qa(n$+3`pTK5hdF z!#eOZt$l_~PXo3XvmXPnWROjfoXCZ`u=A)3a62K@V_jxe8czlX!pO`OG7)Z8L`HDH z_LE0`bk#hn93Ho85Ct-6=(P3aq$ao{hTW$N9QQMMH-;T%xaBipGNQIKj$yZmv&UNdbNI^D7t?q!^+b@CP19n$d3 z-=npXGkCWUdsAPFh&zvfjTA3F+8?Au?wX=kCO9glj0JU=NKt74dqY!weW;n)HE6P- zM4Q1+o?-jCck^9x7h4T0L~n3tb3vy1{zb)5A5VGsEoK+Zp22M2k(@W34uLx%xfyzt z#*>W(AY6piCR@E8Fg{#1Uc|A|i{f#IoR|y?EvJZkqf0@wYZ#zyMS&{7s4~**r7L;%^blGT&6M(=Ge*Rx6=f6sq^0Cm&30%iG*!f9 zy@I_Z{1rs-M9<^G$^YuW#=ee1&+F90nXl)MZmSp{u5^onHt^nRif52emx;;Vt2|8i zcxvs$`fP>OqSS7(HJw2%pQE+w8TDJN@qA=tZ?I)hhOhqlO9`X10f1)t{*jNOjX^&o z%SzwxkN~fjBPE}H?;}s9V%71nr>$u_Jy8rUqoguz+O>LfniRbT5K|wEKi=h+pnJJ| zUyG2Oktd4d@D(o+A#EKl9X(SJ2j!|TO13IKR%9>M7^kv?QH(#=LmJlUjR3i{!;>#0+cQd*hl?XQfRfiYQ&((U9URI=cNR{u4*k41gs-5FOcf9ZXK#qa4`u7l zqM{KxxV}rb*8oqu93c3s%xMptfQ6raYup-0jb$W64iTi*CX#XC5TnljV@~|px$84(OOI! zezmd)F)E8|8Qcd*j2z+At>{L-c&f=cCmE5Ah|BRf1KRcdwo=2wUnG0#zOczPgab&? zNlBb`b>gmMNxHCx53veh{xs2J&Go)3SHA8-f3JJuDrpb)3JzsQjPj6;o-B@CHx2B{ z!wk75yCbqsEtepUEUY8Q+4tB{4D%-0db!dRG(vz9SE}y=RB{Pf`7Y(AizvBKer-G+ z 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 literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index 9b21f8a..9856b8b 100644 --- a/manifest.json +++ b/manifest.json @@ -3,55 +3,45 @@ "id": "pyload", "packaging_format": 1, "description": { - "en": "pyLoad package for YunoHost.", - "fr": "pyLoad pour YunoHost." + "en": "Download Manager written in pure Python." }, - "version": "0.4.9", + "version": "0.4.20~ynh1", "url": "https://pyload.net/", + "upstream": { + "license": "free", + "website": "https://pyload.net", + "admindoc": "https://github.com/pyload/pyload/wiki", + "code": "https://github.com/pyload/pyload" + }, "license": "free", "maintainer": { "name": "liberodark", "email": "liberodark@gmail.com" }, "requirements": { - "yunohost": ">= 2.7.2" + "yunohost": ">= 4.3.0" }, "multi_instance": true, "services": [ "nginx", - "php5-fpm", "mysql" ], "arguments": { - "install": [{ + "install": [ + { "name": "domain", - "type": "domain", - "ask": { - "en": "Choose a domain name for pyLoad", - "fr": "Choisissez un nom de domaine pour pyLoad" - }, - "example": "example.com" + "type": "domain" }, - { "name": "path", "type": "path", - "ask": { - "en": "Choose a path for pyLoad /pyload is accepted", - "fr": "Choisissez un chemin pour pyLoad /pyload est accepté" - }, "example": "/pyload", "default": "/pyload" }, - { "name": "is_public", "type": "boolean", - "ask": { - "en": "Is it a public site ?", - "fr": "Est-ce un site public ?" - }, - "default": "true" + "default": true } ] } diff --git a/scripts/_common.sh b/scripts/_common.sh index cc1f786..e79e441 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1 +1,20 @@ -#!/bin/bash \ No newline at end of file +#!/bin/bash + +#================================================= +# COMMON VARIABLES +#================================================= + +# dependencies used by the app +pkg_dependencies="python3-crypto python3-pycurl python3-venv libcurl4-openssl-dev libssl-dev" + +#================================================= +# PERSONAL HELPERS +#================================================= + +#================================================= +# EXPERIMENTAL HELPERS +#================================================= + +#================================================= +# FUTURE OFFICIAL HELPERS +#================================================= diff --git a/scripts/backup b/scripts/backup index af8ccd9..d8cb0be 100644 --- a/scripts/backup +++ b/scripts/backup @@ -1,33 +1,69 @@ #!/bin/bash -# Exit on command errors and treat unset variables as an error -set -eu +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# See comments in install script -app=$YNH_APP_INSTANCE_NAME - -# Source YunoHost helpers +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -# Backup sources & data -# Note: the last argument is where to save this path, see the restore script. -ynh_backup "/var/www/${app}" "sources" +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= -### MySQL (remove if not used) ### -# If a MySQL database is used: -# # Dump the database -# dbname=$app -# dbuser=$app -# dbpass=$(ynh_app_setting_get "$app" mysqlpwd) -# mysqldump -u "$dbuser" -p"$dbpass" --no-create-db "$dbname" > ./dump.sql -### MySQL end ### +ynh_clean_setup () { + true +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors -# Copy NGINX configuration -domain=$(ynh_app_setting_get "$app" domain) -ynh_backup "/etc/nginx/conf.d/${domain}.d/${app}.conf" "nginx.conf" +#================================================= +# LOAD SETTINGS +#================================================= +ynh_print_info --message="Loading installation settings..." -### PHP (remove if not used) ### -# If a dedicated php-fpm process is used: -# # Copy PHP-FPM pool configuration -# ynh_backup "/etc/php5/fpm/pool.d/${app}.conf" "php-fpm.conf" -### PHP end ### +app=$YNH_APP_INSTANCE_NAME + +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +domain=$(ynh_app_setting_get --app=$app --key=domain) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) + +#================================================= +# DECLARE DATA AND CONF FILES TO BACKUP +#================================================= +ynh_print_info --message="Declaring files to be backed up..." + +#================================================= +# BACKUP THE APP MAIN DIR +#================================================= + +ynh_backup --src_path="$final_path" + +#================================================= +# BACKUP THE DATA DIR +#================================================= + +ynh_backup --src_path="$datadir" --is_big + +#================================================= +# BACKUP THE NGINX CONFIGURATION +#================================================= + +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# SPECIFIC BACKUP +#================================================= +# BACKUP SYSTEMD +#================================================= + +ynh_backup --src_path="/etc/systemd/system/$app.service" + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..4e1c35c --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,137 @@ +#!/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) + +# Add settings here as needed by your application +#db_name=$(ynh_app_setting_get --app=$app --key=db_name) +#db_user=$db_name +#db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) + +#================================================= +# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + ynh_clean_check_starting + # Remove the new domain config file, the remove script won't do it as it doesn't know yet its location. + ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf" + + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# 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 a systemd service..." + +ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log" --line_match="Proxy listening" + +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= +ynh_script_progression --message="Updating NGINX web server configuration..." + +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 A CONFIG FILE +#================================================= +ynh_script_progression --message="Updating a configuration file..." + +#================================================= +# GENERIC FINALISATION +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." + +# Start a systemd service +ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" --line_match="Proxy listening" + +#================================================= +# 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" diff --git a/scripts/install b/scripts/install index 55f3e52..3f8bac2 100644 --- a/scripts/install +++ b/scripts/install @@ -6,7 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= -#source _common.sh +source _common.sh source /usr/share/yunohost/helpers #================================================= @@ -14,8 +14,7 @@ source /usr/share/yunohost/helpers #================================================= ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. - true + ynh_clean_check_starting } # Exit if an error occurs during the execution of the script ynh_abort_if_errors @@ -24,131 +23,169 @@ ynh_abort_if_errors # RETRIEVE ARGUMENTS FROM THE MANIFEST #================================================= -# Retrieve arguments domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC -### If it's a multi-instance app, meaning it can be installed several times independently -### The id of the app as stated in the manifest is available as $YNH_APP_ID -### The instance number is available as $YNH_APP_INSTANCE_NUMBER (equals "1", "2", ...) -### The app instance name is available as $YNH_APP_INSTANCE_NAME -### - the first time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample -### - the second time the app is installed, YNH_APP_INSTANCE_NAME = ynhexample__2 -### - ynhexample__{N} for the subsequent installations, with N=3,4, ... -### The app instance name is probably what interests you most, since this is -### guaranteed to be unique. This is a good unique identifier to define installation path, -### db names, ... app=$YNH_APP_INSTANCE_NAME #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= +ynh_script_progression --message="Validating installation parameters..." -### If the app uses nginx as web server (written in HTML/PHP in most cases), the final path should be "/var/www/$app". -### If the app provides an internal web server (or uses another application server such as uwsgi), the final path should be "/opt/yunohost/$app" -final_path=/opt/yunohost/$app -test ! -e "$final_path" || ynh_die "This path already contains a folder" +final_path=/var/www/$app +test ! -e "$final_path" || ynh_die --message="This path already contains a folder" -# 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..." -ynh_app_setting_set $app domain $domain -ynh_app_setting_set $app path $path_url -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=path --value=$path_url +#================================================= +# STANDARD MODIFICATIONS #================================================= # FIND AND OPEN A PORT #================================================= +ynh_script_progression --message="Finding an available port..." -### Use these lines if you have to open a port for the application -### `ynh_find_port` will find the first available port starting from the given port. -### If you're not using these lines: -### - Remove the section "CLOSE A PORT" in the remove script - -# Find a free port -port=$(ynh_find_port 8000) -# Open this port -yunohost firewall allow --no-upnp TCP $port 2>&1 -ynh_app_setting_set $app port $port - -#============================================== -# INSTALL PYLOAD -#============================================== - -apt install -y python-crypto python-pycurl tesseract-ocr - -#python python-crypto python-pycurl python-openssl python-imaging tesseract-ocr rhino - -wget --no-verbose 'https://github.com/pyload/pyload/releases/download/v0.4.9/pyload_0.4.9_all.deb' -dpkg --install pyload_0.4.9_all.deb +# Find an available port +port=$(ynh_find_port --port=9666) +ynh_app_setting_set --app=$app --key=port --value=$port #================================================= -# NGINX CONFIGURATION +# INSTALL DEPENDENCIES #================================================= +ynh_script_progression --message="Installing dependencies..." -# Create a dedicated nginx config -ynh_add_nginx_config +ynh_install_app_dependencies $pkg_dependencies #================================================= # CREATE DEDICATED USER #================================================= +ynh_script_progression --message="Configuring system user..." # Create a system user -ynh_system_user_create $app +ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= -# MODIFY A CONFIG FILE +# DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -#cp -a ../conf/onlyoffice-documentserver.conf /etc/onlyoffice/documentserver/nginx/onlyoffice-documentserver.conf -#ynh_replace_string "__NEXTCLOUDDOMAIN__" "$nextcloud_domain" "/etc/loolwsd/loolwsd.xml" -#ynh_replace_string "__PASSWORD__" "$password" "/etc/loolwsd/loolwsd.xml" +ynh_script_progression --message="Setting up source files..." + +ynh_app_setting_set --app=$app --key=final_path --value=$final_path +# Download, check integrity, uncompress and patch the source from app.src +mkdir -p "$final_path" + +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" #================================================= -# STORE THE CONFIG FILE CHECKSUM +# NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Configuring NGINX web server..." -### `ynh_store_file_checksum` is used to store the checksum of a file. -### That way, during the upgrade script, by using `ynh_backup_if_checksum_is_different`, -### you can make a backup of this file before modifying it again if the admin had modified it. +# Create a dedicated NGINX config +ynh_add_nginx_config -# Calculate and store the config file checksum into the app settings -#ynh_store_file_checksum "/etc/onlyoffice/documentserver/nginx/onlyoffice-documentserver.conf" +#================================================= +# SPECIFIC SETUP +#================================================= +# INSTALL PYTHON DEPENDENCIES +#================================================= +ynh_script_progression --message="Installing Python dependencies..." +pushd $final_path + python3 -m venv $final_path/venv + source $final_path/venv/bin/activate + pip install --upgrade pip + pip install --upgrade pyyaml + pip install --pre pyload-ng[all] +popd + +#================================================= +# CREATE DATA DIRECTORY +#================================================= +ynh_script_progression --message="Creating a data directory..." + +datadir=/home/yunohost.app/$app +ynh_app_setting_set --app=$app --key=datadir --value=$datadir + +mkdir -p $datadir + +chmod 750 "$datadir" +chmod -R o-rwx "$datadir" +chown -R $app:www-data "$datadir" + +#================================================= +# ADD A CONFIGURATION +#================================================= +ynh_script_progression --message="Adding a configuration file..." + +#================================================= +# SETUP SYSTEMD +#================================================= +ynh_script_progression --message="Configuring a systemd service..." + +# Create a dedicated systemd config +ynh_add_systemd_config #================================================= # GENERIC FINALIZATION #================================================= -# SECURE FILES AND DIRECTORIES +# SETUP LOGROTATE #================================================= +ynh_script_progression --message="Configuring log rotation..." -### For security reason, any app should set the permissions to root: before anything else. -### Then, if write authorization is needed, any access should be given only to directories -### that really need such authorization. +mkdir -p /var/log/$app +chown -R $app:$app "/var/log/$app" +# Use logrotate to manage application logfile(s) +ynh_use_logrotate -# Set permissions to app files -#chown -R root: /etc/loolwsd +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." +yunohost service add $app --log="/var/log/$app/$app.log" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." + +# Start a systemd service +ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" --line_match="Proxy listening" #================================================= # SETUP SSOWAT #================================================= +ynh_script_progression --message="Configuring permissions..." -# If app is public, add url to SSOWat conf as skipped_uris -if [ $is_public -eq 1 ]; then - # unprotected_uris allows SSO credentials to be passed anyway. - ynh_app_setting_set "$app" unprotected_uris "/" +# Make app public if necessary +if [ $is_public -eq 1 ] +then + # Everyone can access the app. + # The "main" permission is automatically created before the install script. + ynh_permission_update --permission="main" --add="visitors" fi -# Reload services -pyLoadCore --daemon -systemctl restart nginx +#================================================= +# 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="Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index 19721ec..f3538fe 100644 --- a/scripts/remove +++ b/scripts/remove @@ -12,71 +12,93 @@ 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) -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) +final_path=$(ynh_app_setting_get --app=$app --key=final_path) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= # STANDARD REMOVE #================================================= - -ynh_package_remove emby-server - -#================================================= -# REMOVE DEPENDENCIES +# REMOVE SERVICE INTEGRATION IN YUNOHOST #================================================= -# Remove metapackage and its dependencies -#ynh_remove_app_dependencies +# Remove the service from the list of services known by YunoHost (added from `yunohost service add`) +if ynh_exec_warn_less yunohost service status $app >/dev/null +then + ynh_script_progression --message="Removing $app service integration..." + yunohost service remove $app +fi + +#================================================= +# STOP AND REMOVE SERVICE +#================================================= +ynh_script_progression --message="Stopping and removing the systemd service..." + +# Remove the dedicated systemd config +ynh_remove_systemd_config #================================================= # REMOVE APP MAIN DIR #================================================= +ynh_script_progression --message="Removing app main directory..." # Remove the app directory securely -ynh_secure_remove "$final_path" +ynh_secure_remove --file="$final_path" + +#================================================= +# REMOVE DATA DIR +#================================================= + +# Remove the data directory if --purge option is used +if [ "${YNH_APP_PURGE:-0}" -eq 1 ] +then + ynh_script_progression --message="Removing app data directory..." + ynh_secure_remove --file="$datadir" +fi #================================================= # REMOVE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Removing NGINX web server configuration..." -# Remove the dedicated nginx config +# Remove the dedicated NGINX config ynh_remove_nginx_config #================================================= -# CLOSE A PORT +# REMOVE DEPENDENCIES #================================================= +ynh_script_progression --message="Removing dependencies..." -if yunohost firewall list | grep -q "\- $port$" -then - echo "Close port $port" >&2 - yunohost firewall disallow TCP $port 2>&1 -fi +# Remove metapackage and its dependencies +ynh_remove_app_dependencies #================================================= # SPECIFIC REMOVE #================================================= -# REMOVE THE CRON FILE +# REMOVE VARIOUS FILES #================================================= - -# Remove a cron file -ynh_secure_remove "/etc/cron.d/$app" - -# Remove a directory securely -ynh_secure_remove "/etc/apt/sources.list.d/onlyoffice.list" - +ynh_script_progression --message="Removing various files..." # Remove the log files -ynh_secure_remove "/var/log/$app/" +ynh_secure_remove --file="/var/log/$app" #================================================= # GENERIC FINALIZATION #================================================= # REMOVE DEDICATED USER #================================================= +ynh_script_progression --message="Removing the dedicated system user..." # Delete a system user -ynh_system_user_delete $app +ynh_system_user_delete --username=$app + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression --message="Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 93169e9..de4cf4f 100644 --- a/scripts/restore +++ b/scripts/restore @@ -1,52 +1,129 @@ #!/bin/bash -# Note: each files and directories you've saved using the ynh_backup helper -# will be located in the current directory, regarding the last argument. +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= -# Exit on command errors and treat unset variables as an error -set -eu - -# See comments in install script -app=$YNH_APP_INSTANCE_NAME - -# Source YunoHost helpers +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers -# Retrieve old app settings -domain=$(ynh_app_setting_get "$app" domain) -path_url=$(ynh_app_setting_get "$app" path_url) +#================================================= +# MANAGE SCRIPT FAILURE +#================================================= -# Check domain/path availability -sudo yunohost app checkurl "${domain}${path_url}" -a "$app" \ - || ynh_die "Path not available: ${domain}${path_url}" +ynh_clean_setup () { + ynh_clean_check_starting +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors -# Restore sources & data -src_path="/var/www/${app}" -sudo cp -a ./sources "$src_path" +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." -# Restore permissions to app files -# you may need to make some file and/or directory writeable by www-data (nginx user) -sudo chown -R root: "$src_path" +app=$YNH_APP_INSTANCE_NAME -### MySQL (remove if not used) ### -# If a MySQL database is used: -# # Create and restore the database -# dbname=$app -# dbuser=$app -# dbpass=$(ynh_app_setting_get "$app" mysqlpwd) -# ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass" -# ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" < ./dump.sql -### MySQL end ### +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) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) -# Restore NGINX configuration -sudo cp -a ./nginx.conf "/etc/nginx/conf.d/${domain}.d/${app}.conf" +#================================================= +# CHECK IF THE APP CAN BE RESTORED +#================================================= +ynh_script_progression --message="Validating restoration parameters..." -### PHP (remove if not used) ### -# If a dedicated php-fpm process is used: -# # Copy PHP-FPM pool configuration and reload the service -# sudo cp -a ./php-fpm.conf "/etc/php5/fpm/pool.d/${app}.conf" -# sudo service php5-fpm reload -### PHP end ### +test ! -d $final_path \ + || ynh_die --message="There is already a directory: $final_path " -# Restart webserver -sudo service nginx reload +#================================================= +# STANDARD RESTORATION STEPS +#================================================= +# RESTORE THE NGINX CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the NGINX web server configuration..." + +ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf" + +#================================================= +# RECREATE THE DEDICATED USER +#================================================= +ynh_script_progression --message="Recreating the dedicated system user..." + +# Create the dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" + +#================================================= +# RESTORE THE APP MAIN DIR +#================================================= +ynh_script_progression --message="Restoring the app main directory..." + +ynh_restore_file --origin_path="$final_path" + +chmod 750 "$final_path" +chmod -R o-rwx "$final_path" +chown -R $app:www-data "$final_path" + +#================================================= +# RESTORE THE DATA DIRECTORY +#================================================= +ynh_script_progression --message="Restoring the data directory..." + +ynh_restore_file --origin_path="$datadir" --not_mandatory + +mkdir -p $datadir + +chmod 750 "$datadir" +chmod -R o-rwx "$datadir" +chown -R $app:www-data "$datadir" + +#================================================= +# SPECIFIC RESTORATION +#================================================= +# REINSTALL DEPENDENCIES +#================================================= +ynh_script_progression --message="Reinstalling dependencies..." + +# Define and install dependencies +ynh_install_app_dependencies $pkg_dependencies + +#================================================= +# RESTORE SYSTEMD +#================================================= +ynh_script_progression --message="Restoring the systemd configuration..." + +ynh_restore_file --origin_path="/etc/systemd/system/$app.service" +systemctl enable $app.service --quiet + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add $app --log="/var/log/$app/$app.log" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." + +ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" --line_match="Proxy listening" + +#================================================= +# GENERIC FINALIZATION +#================================================= +# 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="Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index 3d706e4..4c33ad5 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,57 +1,139 @@ #!/bin/bash -# Exit on command errors and treat unset variables as an error -set -eu +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# LOAD SETTINGS +#================================================= +ynh_script_progression --message="Loading installation settings..." -# See comments in install script app=$YNH_APP_INSTANCE_NAME -# Source YunoHost helpers -source /usr/share/yunohost/helpers -source _common.sh - -# Retrieve app settings -domain=$(ynh_app_setting_get "$app" domain) -password=$(ynh_app_setting_get "$app" password) -is_public=$(ynh_app_setting_get "$app" is_public) -nextclouddomain=$(ynh_app_setting_get "$app" nextclouddomain) - - -# Set permissions to app files -# you may need to make some file and/or directory writeable by www-data (nginx user) -sudo chown -R root: $src_path +domain=$(ynh_app_setting_get --app=$app --key=domain) +path_url=$(ynh_app_setting_get --app=$app --key=path) +datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= -# UPGRADE COLLABORA +# CHECK VERSION #================================================= -ynh_package_update -ynh_install_app_dependencies loolwsd code-brand +ynh_script_progression --message="Checking version..." + +upgrade_type=$(ynh_check_app_version_changed) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= +ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + ynh_clean_check_starting + # Restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + +#================================================= +# STANDARD UPGRADE STEPS +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." + +# Cleaning legacy permissions +if ynh_legacy_permissions_exists; then + ynh_legacy_permissions_delete_all + + ynh_app_setting_delete --app=$app --key=is_public +fi + +#================================================= +# CREATE DEDICATED USER +#================================================= +ynh_script_progression --message="Making sure dedicated system user exists..." + +# Create a dedicated user (if not existing) +ynh_system_user_create --username=$app --home_dir="$final_path" #================================================= # NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Upgrading NGINX web server configuration..." -# Create a dedicated nginx config +# Create a dedicated NGINX config ynh_add_nginx_config +#================================================= +# UPGRADE DEPENDENCIES +#================================================= +ynh_script_progression --message="Upgrading dependencies..." + +ynh_install_app_dependencies $pkg_dependencies #================================================= -# UPGRADE CONFIG +# SPECIFIC UPGRADE #================================================= -cp -a ../conf/loolwsd.xml /etc/loolwsd -ynh_replace_string "__NEXTCLOUDDOMAIN__" "$nextcloud_domain" "/etc/loolwsd/loolwsd.xml" -ynh_replace_string "__PASSWORD__" "$password" "/etc/loolwsd/loolwsd.xml" -systemctl restart loolwsd +# INSTALL PYTHON DEPENDENCIES +#================================================= +ynh_script_progression --message="Installing Python dependencies..." +ynh_secure_remove --file="$final_path/venv" +pushd $final_path + python3 -m venv $final_path/venv + source $final_path/venv/bin/activate + pip install --upgrade pip + pip install --upgrade pyyaml + pip install --pre pyload-ng[all] +popd -# If app is public, add url to SSOWat conf as skipped_uris -if [[ $is_public -eq 1 ]]; then - # See install script - ynh_app_setting_set "$app" unprotected_uris "/" -fi +#================================================= +# UPDATE A CONFIG FILE +#================================================= +ynh_script_progression --message="Updating a configuration file..." -# Reload nginx service -systemctl restart nginx -systemctl restart loolwsd +#================================================= +# SETUP SYSTEMD +#================================================= +ynh_script_progression --message="Upgrading systemd configuration..." +# Create a dedicated systemd config +ynh_add_systemd_config + +#================================================= +# GENERIC FINALIZATION +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + +yunohost service add $app --log="/var/log/$app/$app.log" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression --message="Starting a systemd service..." + +ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log" --line_match="Proxy listening" + +#================================================= +# 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="Upgrade of $app completed" From 47937d5f1895b6970b713a797e1f7d42733ae6d4 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Sat, 26 Mar 2022 20:38:27 +0000 Subject: [PATCH 02/10] Auto-update README --- README.md | 58 ++++++++++++++++++++++++++++++++++++++++------------ README_fr.md | 51 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 13 deletions(-) create mode 100644 README_fr.md diff --git a/README.md b/README.md index 15a9418..11bb3d9 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,55 @@ -# pyLoad app for YunoHost -pyLoad + -- [Yunohost project](https://yunohost.org) -- [pyLoad website](https://pyload.net/) +# pyLoad for YunoHost -![](https://pyload.net/img/banner.png) +[![Integration level](https://dash.yunohost.org/integration/pyload.svg)](https://dash.yunohost.org/appci/app/pyload) ![](https://ci-apps.yunohost.org/ci/badges/pyload.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/pyload.maintain.svg) +[![Install pyLoad with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=pyload) + +*[Lire ce readme en français.](./README_fr.md)* + +> *This package allows you to install pyLoad quickly and simply on a YunoHost server. +If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* + +## Overview + +The free and open-source Download Manager written in pure Python -[![Install pyLoad with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=pyload) +**Shipped version:** 0.4.20~ynh1 -### Installing guide - 1. App can be installed by YunoHost **admin web-interface** or by **running following command**: - $ sudo yunohost app install https://github.com/YunoHost-Apps/pyload_ynh - 1. Admin username is : **root**. +## Screenshots - -### Upgrade this package: +![](./doc/screenshots/sample.png) - $ sudo yunohost app upgrade --verbose example -u https://github.com/YunoHost-Apps/pyload_ynh +## Disclaimers / important information +- Default username: `pyload`. +- Default password: `pyload`. + +**It's highly recommended to change the default access credentials on first start**. + +## Documentation and resources + +* Official app website: https://pyload.net +* Official admin documentation: https://github.com/pyload/pyload/wiki +* Upstream app code repository: https://github.com/pyload/pyload +* YunoHost documentation for this app: https://yunohost.org/app_pyload +* Report a bug: https://github.com/YunoHost-Apps/pyload_ynh/issues + +## Developer info + +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/pyload_ynh/tree/testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/pyload_ynh/tree/testing --debug +or +sudo yunohost app upgrade pyload -u https://github.com/YunoHost-Apps/pyload_ynh/tree/testing --debug +``` + +**More info regarding app packaging:** https://yunohost.org/packaging_apps \ No newline at end of file diff --git a/README_fr.md b/README_fr.md new file mode 100644 index 0000000..00261bd --- /dev/null +++ b/README_fr.md @@ -0,0 +1,51 @@ +# pyLoad pour YunoHost + +[![Niveau d'intégration](https://dash.yunohost.org/integration/pyload.svg)](https://dash.yunohost.org/appci/app/pyload) ![](https://ci-apps.yunohost.org/ci/badges/pyload.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/pyload.maintain.svg) +[![Installer pyLoad avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=pyload) + +*[Read this readme in english.](./README.md)* +*[Lire ce readme en français.](./README_fr.md)* + +> *Ce package vous permet d'installer pyLoad rapidement et simplement sur un serveur YunoHost. +Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* + +## Vue d'ensemble + +The free and open-source Download Manager written in pure Python + + +**Version incluse :** 0.4.20~ynh1 + + + +## Captures d'écran + +![](./doc/screenshots/sample.png) + +## Avertissements / informations importantes + +- Default username: `pyload`. +- Default password: `pyload`. + +**It's highly recommended to change the default access credentials on first start**. + +## Documentations et ressources + +* Site officiel de l'app : https://pyload.net +* Documentation officielle de l'admin : https://github.com/pyload/pyload/wiki +* Dépôt de code officiel de l'app : https://github.com/pyload/pyload +* Documentation YunoHost pour cette app : https://yunohost.org/app_pyload +* Signaler un bug : https://github.com/YunoHost-Apps/pyload_ynh/issues + +## Informations pour les développeurs + +Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/pyload_ynh/tree/testing). + +Pour essayer la branche testing, procédez comme suit. +``` +sudo yunohost app install https://github.com/YunoHost-Apps/pyload_ynh/tree/testing --debug +ou +sudo yunohost app upgrade pyload -u https://github.com/YunoHost-Apps/pyload_ynh/tree/testing --debug +``` + +**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps \ No newline at end of file From e78b3bb8ec9fc0dc0077a8158fb2efec1e42c45d Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 27 Mar 2022 13:01:15 +0200 Subject: [PATCH 03/10] Update manifest.json --- manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 9856b8b..634e9e4 100644 --- a/manifest.json +++ b/manifest.json @@ -8,12 +8,12 @@ "version": "0.4.20~ynh1", "url": "https://pyload.net/", "upstream": { - "license": "free", + "license": "AGPL-3.0-or-later", "website": "https://pyload.net", "admindoc": "https://github.com/pyload/pyload/wiki", "code": "https://github.com/pyload/pyload" }, - "license": "free", + "license": "AGPL-3.0-or-later", "maintainer": { "name": "liberodark", "email": "liberodark@gmail.com" From 2bbfb4de9927bc5d8692bdafcf7507fbd2e195b0 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 27 Mar 2022 13:01:19 +0200 Subject: [PATCH 04/10] Update check_process --- check_process | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/check_process b/check_process index 17956af..0ef21a7 100644 --- a/check_process +++ b/check_process @@ -5,30 +5,17 @@ is_public=1 ; Checks pkg_linter=1 - setup_sub_dir=0 + setup_sub_dir=1 setup_root=1 setup_nourl=0 - setup_private=0 + setup_private=1 setup_public=1 upgrade=1 + #upgrade=1 from_commit=CommitHash backup_restore=1 multi_instance=1 - incorrect_path=1 port_already_use=0 - change_url=0 -;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto -# Level 4: - Level 4=1 (This app supports the Nextcloud LDAP auth) -# Level 5: - Level 5=auto - Level 6=auto - Level 7=auto - Level 8=0 - Level 9=0 - Level 10=0 + change_url=1 ;;; Options Email= Notification=none From 3743c66b3ba4b99fe5df44a9de5cef9f583b8571 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 27 Mar 2022 13:02:48 +0200 Subject: [PATCH 05/10] multiinstance --- check_process | 2 +- manifest.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/check_process b/check_process index 0ef21a7..cfa6790 100644 --- a/check_process +++ b/check_process @@ -13,7 +13,7 @@ upgrade=1 #upgrade=1 from_commit=CommitHash backup_restore=1 - multi_instance=1 + multi_instance=0 port_already_use=0 change_url=1 ;;; Options diff --git a/manifest.json b/manifest.json index 634e9e4..92c1113 100644 --- a/manifest.json +++ b/manifest.json @@ -21,7 +21,7 @@ "requirements": { "yunohost": ">= 4.3.0" }, - "multi_instance": true, + "multi_instance": false, "services": [ "nginx", "mysql" From 63411157a542b37c24c18d8825421a5e3ae7ccee Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 27 Mar 2022 13:03:55 +0200 Subject: [PATCH 06/10] Update restore --- scripts/restore | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scripts/restore b/scripts/restore index de4cf4f..6c90d49 100644 --- a/scripts/restore +++ b/scripts/restore @@ -91,6 +91,19 @@ ynh_script_progression --message="Reinstalling dependencies..." # Define and install dependencies ynh_install_app_dependencies $pkg_dependencies +#================================================= +# INSTALL PYTHON DEPENDENCIES +#================================================= +ynh_script_progression --message="Installing Python dependencies..." + +pushd $final_path + python3 -m venv $final_path/venv + source $final_path/venv/bin/activate + pip install --upgrade pip + pip install --upgrade pyyaml + pip install --pre pyload-ng[all] +popd + #================================================= # RESTORE SYSTEMD #================================================= From 25f05bcea7c9dbeadcf4c8f801a42f8be1dc060e Mon Sep 17 00:00:00 2001 From: yalh76 Date: Sun, 27 Mar 2022 13:04:18 +0200 Subject: [PATCH 07/10] Update upgrade --- scripts/upgrade | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/upgrade b/scripts/upgrade index 4c33ad5..a26fcc5 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -18,6 +18,7 @@ app=$YNH_APP_INSTANCE_NAME 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) datadir=$(ynh_app_setting_get --app=$app --key=datadir) #================================================= From 3463e8e854dc157645907b0c6f9071929dc117b2 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Mon, 28 Mar 2022 18:03:29 +0200 Subject: [PATCH 08/10] Remove path_url --- check_process | 2 +- manifest.json | 6 ------ scripts/change_url | 2 +- scripts/install | 2 +- 4 files changed, 3 insertions(+), 9 deletions(-) diff --git a/check_process b/check_process index cfa6790..264a93e 100644 --- a/check_process +++ b/check_process @@ -5,7 +5,7 @@ is_public=1 ; Checks pkg_linter=1 - setup_sub_dir=1 + setup_sub_dir=0 setup_root=1 setup_nourl=0 setup_private=1 diff --git a/manifest.json b/manifest.json index 92c1113..2c6b79e 100644 --- a/manifest.json +++ b/manifest.json @@ -32,12 +32,6 @@ "name": "domain", "type": "domain" }, - { - "name": "path", - "type": "path", - "example": "/pyload", - "default": "/pyload" - }, { "name": "is_public", "type": "boolean", diff --git a/scripts/change_url b/scripts/change_url index 4e1c35c..7bbce1b 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -17,7 +17,7 @@ old_domain=$YNH_APP_OLD_DOMAIN old_path=$YNH_APP_OLD_PATH new_domain=$YNH_APP_NEW_DOMAIN -new_path=$YNH_APP_NEW_PATH +new_path="/" app=$YNH_APP_INSTANCE_NAME diff --git a/scripts/install b/scripts/install index 3f8bac2..ded3e21 100644 --- a/scripts/install +++ b/scripts/install @@ -24,7 +24,7 @@ ynh_abort_if_errors #================================================= domain=$YNH_APP_ARG_DOMAIN -path_url=$YNH_APP_ARG_PATH +path_url="/" is_public=$YNH_APP_ARG_IS_PUBLIC app=$YNH_APP_INSTANCE_NAME From 4cb622116beb9ca7d985f10451bece5d8cd1adaf Mon Sep 17 00:00:00 2001 From: yalh76 Date: Mon, 28 Mar 2022 18:07:45 +0200 Subject: [PATCH 09/10] Fix logrotate --- scripts/backup | 6 ++++++ scripts/restore | 22 +++++++++------------- scripts/upgrade | 10 ++++++++++ 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/scripts/backup b/scripts/backup index d8cb0be..67278fd 100644 --- a/scripts/backup +++ b/scripts/backup @@ -56,6 +56,12 @@ ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # SPECIFIC BACKUP +#================================================= +# BACKUP LOGROTATE +#================================================= + +ynh_backup --src_path="/etc/logrotate.d/$app" + #================================================= # BACKUP SYSTEMD #================================================= diff --git a/scripts/restore b/scripts/restore index 6c90d49..f1702a4 100644 --- a/scripts/restore +++ b/scripts/restore @@ -91,19 +91,6 @@ ynh_script_progression --message="Reinstalling dependencies..." # Define and install dependencies ynh_install_app_dependencies $pkg_dependencies -#================================================= -# INSTALL PYTHON DEPENDENCIES -#================================================= -ynh_script_progression --message="Installing Python dependencies..." - -pushd $final_path - python3 -m venv $final_path/venv - source $final_path/venv/bin/activate - pip install --upgrade pip - pip install --upgrade pyyaml - pip install --pre pyload-ng[all] -popd - #================================================= # RESTORE SYSTEMD #================================================= @@ -112,6 +99,15 @@ ynh_script_progression --message="Restoring the systemd configuration..." ynh_restore_file --origin_path="/etc/systemd/system/$app.service" systemctl enable $app.service --quiet +#================================================= +# RESTORE THE LOGROTATE CONFIGURATION +#================================================= +ynh_script_progression --message="Restoring the logrotate configuration..." + +mkdir -p /var/log/$app +chown -R $app:$app "/var/log/$app" +ynh_restore_file --origin_path="/etc/logrotate.d/$app" + #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= diff --git a/scripts/upgrade b/scripts/upgrade index a26fcc5..2ff9960 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -112,6 +112,16 @@ ynh_add_systemd_config #================================================= # GENERIC FINALIZATION +#================================================= +# SETUP LOGROTATE +#================================================= +ynh_script_progression --message="Upgrading logrotate configuration..." + +mkdir -p /var/log/$app +chown -R $app:$app "/var/log/$app" +# Use logrotate to manage app-specific logfile(s) +ynh_use_logrotate --non-append + #================================================= # INTEGRATE SERVICE IN YUNOHOST #================================================= From 7ca5eed1abec73eb394ec511e70bcf8b393bebd1 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Mon, 28 Mar 2022 18:09:02 +0200 Subject: [PATCH 10/10] Missing port --- scripts/change_url | 4 +--- scripts/upgrade | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/change_url b/scripts/change_url index 7bbce1b..a3d7544 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -30,9 +30,7 @@ ynh_script_progression --message="Loading installation settings..." final_path=$(ynh_app_setting_get --app=$app --key=final_path) # Add settings here as needed by your application -#db_name=$(ynh_app_setting_get --app=$app --key=db_name) -#db_user=$db_name -#db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd) +port=$(ynh_app_setting_get --app=$app --key=port) #================================================= # BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP diff --git a/scripts/upgrade b/scripts/upgrade index 2ff9960..bb059f8 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -20,6 +20,7 @@ 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) datadir=$(ynh_app_setting_get --app=$app --key=datadir) +port=$(ynh_app_setting_get --app=$app --key=port) #================================================= # CHECK VERSION