From ecd07200e5d1d1ece816a136b58bf593405aced4 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Sat, 9 Dec 2023 14:02:01 +0100 Subject: [PATCH] New generation --- qbittorrent/CHANGELOG.md | 51 +++++++- qbittorrent/Dockerfile | 43 +++---- qbittorrent/README.md | 81 ++++++------ qbittorrent/build.json | 6 +- qbittorrent/config.json | 36 +++--- .../rootfs/etc/cont-init.d/00-folders.sh | 9 -- .../rootfs/etc/cont-init.d/00-ipleak.sh | 4 + .../rootfs/etc/cont-init.d/00-migration.sh | 96 ++++++++++++++ .../91-qbittorrent_configuration.sh | 70 +++++++---- .../rootfs/etc/cont-init.d/92-qbit_manage.sh | 31 +++++ .../rootfs/etc/cont-init.d/93-openvpn.sh | 118 ------------------ qbittorrent/rootfs/etc/openvpn/down.sh | 36 ------ .../rootfs/etc/openvpn/up-qbittorrent.sh | 9 -- qbittorrent/rootfs/etc/openvpn/up.sh | 97 -------------- .../s6-overlay/s6-rc.d/init-adduser/branding | 11 -- .../s6-overlay/s6-rc.d/svc-qbittorrent/run | 23 ---- qbittorrent/rootfs/etc/services.d/nginx/run | 13 +- qbittorrent/updater.json | 2 +- 18 files changed, 315 insertions(+), 421 deletions(-) delete mode 100755 qbittorrent/rootfs/etc/cont-init.d/00-folders.sh create mode 100644 qbittorrent/rootfs/etc/cont-init.d/00-ipleak.sh create mode 100644 qbittorrent/rootfs/etc/cont-init.d/00-migration.sh create mode 100644 qbittorrent/rootfs/etc/cont-init.d/92-qbit_manage.sh delete mode 100755 qbittorrent/rootfs/etc/cont-init.d/93-openvpn.sh delete mode 100755 qbittorrent/rootfs/etc/openvpn/down.sh delete mode 100755 qbittorrent/rootfs/etc/openvpn/up-qbittorrent.sh delete mode 100755 qbittorrent/rootfs/etc/openvpn/up.sh delete mode 100644 qbittorrent/rootfs/etc/s6-overlay/s6-rc.d/init-adduser/branding delete mode 100644 qbittorrent/rootfs/etc/s6-overlay/s6-rc.d/svc-qbittorrent/run diff --git a/qbittorrent/CHANGELOG.md b/qbittorrent/CHANGELOG.md index 2d566c5af..adb65e46e 100644 --- a/qbittorrent/CHANGELOG.md +++ b/qbittorrent/CHANGELOG.md @@ -1,125 +1,174 @@ +- BREAKING CHANGE : upstream container switched to trigus42/qbittorrentvpn. All options will be migrated. Please double check all your options as the default behavior might have changed. +- BREAKING CHANGE : default password changed from "adminadmin" to "homeassistant". Please change from webui +- MAJOR CHANGE : switch to the new config logic from homeassistant. Your configuration files will have migrated from /config/hassio_addons/qBittorrent et a folder only accessible from my Filebrowser addon called /addon_configs/something-qBittorrent. This avoids the addon to mess with your homeassistant configuration folder, and allows to backup the options. Migration of data, custom configs, and custom scripts should be automatic. Please be sure to update all your links however ! For more information, see here : https://developers.home-assistant.io/blog/2023/11/06/public-addon-config/ +- FEAT : wireguard support, see trigus42/qbittorrentvpn +- FEAT : addition of qbit_manage application through an addon option. Please customize the configuration file in /config/xxx-qBittorrent/qbit_manage/qbit_manage.yml +- Fix : avoid crond messages spaming https://github.com/alexbelgium/hassio-addons/issues/1111 ## 4.6.2 (02-12-2023) + - Update to latest version from linuxserver/docker-qbittorrent ### 4.6.1-6 (22-11-2023) + - Minor bugs fixed ### 4.6.1-5 (22-11-2023) + - Minor bugs fixed - Selecting qbit webui also applies it to ingress. Otherwise, default is vuetorrent ### 4.6.1-3 (22-11-2023) + - Minor bugs fixed - Restart the addon after setting the default password ### 4.6.1-2 (22-11-2023) + - Minor bugs fixed - Re-add default username (admin) and password (homeassistant) ## 4.6.1 (21-11-2023) + - Update to latest version from linuxserver/docker-qbittorrent ### 4.6.0-3 (06-11-2023) + - Minor bugs fixed - Ingress webui update at start ### 4.6.0-2 (30-10-2023) + - Minor bugs fixed ### 4.6.0-WITHOUT_VPN (30-10-2023) + - Minor bugs fixed ## 4.6.0 (28-10-2023) + - Update to latest version from linuxserver/docker-qbittorrent + ### 4.5.5-4 (30-09-2023) + - Minor bugs fixed - Avoid crash when using smbv1 ## 4.5.5 (02-09-2023) + - Update to latest version from linuxserver/docker-qbittorrent + ### 4.5.4-2 (24-06-2023) + - Minor bugs fixed - armv7 not supported anymore by linuxserver, it is pinned to latest working version ## 4.5.4 (24-06-2023) + - Update to latest version from linuxserver/docker-qbittorrent ### 4.5.3-r0-2 (12-06-2023) + - Minor bugs fixed - Evaluate smb v2 before v1 ### 4.5.3-r0 (07-06-2023) + - Minor bugs fixed ## 4.5.3 (03-06-2023) + - Update to latest version from linuxserver/docker-qbittorrent + ### 4.5.2-3 (22-04-2023) + - Minor bugs fixed - Fix multi smb mounts ### 4.5.2-2 (19-03-2023) + - Minor bugs fixed - Align exec code with upstream ## 4.5.2 (18-03-2023) + - Update to latest version from linuxserver/docker-qbittorrent - Correct downloads folder + ### 4.5.2-r0-ls250-2 (13-03-2023) + - Minor bug fixes - Try solving sed error message #755 + ### 4.5.2-r0-ls250-2 (11-03-2023) + - Bug updates - Add lsio branding - Implement healthcheck ## 4.5.2-r0-ls250 (11-03-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.2-r0-ls249 (04-03-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.1-r1-ls246 (25-02-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.1-r1-ls245 (19-02-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r1-ls243 (11-02-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r1-ls242 (04-02-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r1-ls241 (28-01-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r1-ls240 (21-01-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r1-ls239 (14-01-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r1-ls238 (07-01-2023) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r1-ls237 (31-12-2022) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r1-ls236 (25-12-2022) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r0-ls234 (13-12-2022) + - Update to latest version from linuxserver/docker-qbittorrent - Fix : using options Savepath for download folder ## 4.5.0-r0-ls233 (06-12-2022) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r0-ls232 (01-12-2022) + - Update to latest version from linuxserver/docker-qbittorrent ## 4.5.0-r0-ls231 (29-11-2022) + - Update to latest version from linuxserver/docker-qbittorrent - WARNING : update to supervisor 2022.11 before installing @@ -441,7 +490,7 @@ ## 14.3.3.99202101191832-7248-da0b276d5ubuntu18.04.1-ls113 - Update to latest version from linuxserver/docker-qbittorrent -- Whitelist option +- LAN_NETWORK option - Enables PUID/PGID options - Addition of ssl options - Addition of possibility to mount local disc or smb diff --git a/qbittorrent/Dockerfile b/qbittorrent/Dockerfile index 158f0c1a3..61d923c3d 100644 --- a/qbittorrent/Dockerfile +++ b/qbittorrent/Dockerfile @@ -16,7 +16,6 @@ ARG BUILD_FROM ARG BUILD_VERSION -ARG BUILD_UPSTREAM="4.6.2" FROM ${BUILD_FROM} ################## @@ -28,18 +27,8 @@ ENV S6_CMD_WAIT_FOR_SERVICES=1 \ S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \ S6_SERVICES_GRACETIME=0 - -# Environment variables -ENV \ - DEBIAN_FRONTEND="noninteractive"\ - LANG="C.UTF-8" \ - PS1="$(whoami)@$(hostname):$(pwd)$ " \ - S6_BEHAVIOUR_IF_STAGE2_FAILS=2 \ - S6_CMD_WAIT_FOR_SERVICES=1 \ - TERM="xterm-256color" \ - HOME="/config/addons_config" \ - XDG_CONFIG_HOME="/config/addons_config" \ - XDG_DATA_HOME="/config/addons_config" +# GENERAL MODIFICATIONS +####################### # Image specific modifications # hadolint ignore=DL4006 @@ -57,10 +46,21 @@ RUN \ && unzip -o vuetorrent.zip -d / >/dev/null \ && rm vuetorrent.zip >/dev/null -# Global LSIO modifications -ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_lsio.sh" "/ha_lsio.sh" -ARG CONFIGLOCATION="/config/addons_config/qBittorrent" -RUN chmod 744 /ha_lsio.sh && if grep -qr "lsio" /etc; then /ha_lsio.sh "$CONFIGLOCATION"; fi && rm /ha_lsio.sh +# ADD QBIT_MANAGE +################# + +ENV QBM_DOCKER True +ENV QBT_SKIP_QB_VERSION_CHECK True + +RUN \ + # Install qbit_manage + mkdir -p /qbit_manage && \ + curl -o /tmp/qbit_manage.tar.gz -L "https://github.com/StuffAnThings/qbit_manage/archive/master.tar.gz" && \ + tar xf /tmp/qbit_manage.tar.gz -C /qbit_manage --strip-components=1 && \ + \ + # Install dependencies + apk add py3-pip && \ + pip install --no-cache-dir --upgrade --requirement /qbit_manage/requirements.txt --ignore-installed ################## # 3 Install apps # @@ -137,12 +137,3 @@ LABEL \ ################# # 6 Healthcheck # ################# - -ENV HEALTH_PORT="" \ - HEALTH_URL="" -HEALTHCHECK \ - --interval=5s \ - --retries=5 \ - --start-period=30s \ - --timeout=25s \ - CMD pgrep qbittorrent || exit 1 diff --git a/qbittorrent/README.md b/qbittorrent/README.md index bbe1d83e7..cc15f7473 100644 --- a/qbittorrent/README.md +++ b/qbittorrent/README.md @@ -23,21 +23,10 @@ _Thanks to everyone having starred my repo! To star it click on the image below, --- [Qbittorrent](https://github.com/qbittorrent/qBittorrent) is a cross-platform free and open-source BitTorrent client. -This addon is based on the docker image from [linuxserver.io](https://www.linuxserver.io/). - -This addons has several configurable options : - -- allowing to mount local external drive, or smb share from the addon -- [alternative webUI](https://github.com/qbittorrent/qBittorrent/wiki/List-of-known-alternate-WebUIs) -- usage of ssl -- ingress -- optional openvpn support -- allow setting specific DNS servers +This addon is based on the docker image from [trigus42](trigus42/qbittorrentvpn). ## Configuration ---- - Webui can be found at , or in your sidebar using Ingress. The default username/password : described in the startup log. Configurations can be done through the app webUI, except for the following options @@ -46,13 +35,17 @@ Network disk is mounted to /mnt/share name You need to map the exposed port in your router if you want the best speed and connectivity. +Options can be configured through two ways : + +- Addon options + ```yaml PGID: user GPID: user ssl: true/false certfile: fullchain.pem #ssl certificate, must be located in /ssl keyfile: privkey.pem #sslkeyfile, must be located in /ssl -whitelist: "localhost,192.168.0.0/16" # list ip subnets that won't need a password (optional) +LAN_NETWORK: "localhost,192.168.0.0/16" # list ip subnets that won't need a password (optional) customUI: selection from list # alternative webUI can be set here. Latest version set at each addon start. Select 'custom' to fill it yourself in the webui DNS_servers: 8.8.8.8,1.1.1.1 # Keep blank to use router’s DNS, or set custom DNS to avoid spamming in case of local DNS ad-remover SavePath: "/share/qbittorrent" # Define the download directory @@ -61,15 +54,19 @@ networkdisks: "//SERVER/SHARE" # optional, list of smb servers to mount, separat cifsusername: "username" # optional, smb username, same for all smb shares cifspassword: "password" # optional, smb password cifsdomain: "domain" # optional, allow setting the domain for the smb share -openvpn_enabled: true/false # is openvpn required to start qbittorrent -openvpn_config": For example "config.ovpn" # name of the file located in /config/openvpn. -openvpn_username": USERNAME -openvpn_password: YOURPASSWORD -openvpn_alt_mode: bind at container level and not app level +VPN_ENABLED: true/false # is openvpn required to start qbittorrent +VPN_USERNAME": USERNAME +VPN_PASSWORD: YOURPASSWORD run_duration: 12h #for how long should the addon run. Must be formatted as number + time unit (ex : 5s, or 2m, or 12h, or 5d...) silent: true #suppresses debug messages ``` +- Config.yaml (advanced usage) + +Additional variables can be set as ENV variables by adding them in the config.yaml in the location defined in your addon options according to this guide : https://github.com/alexbelgium/hassio-addons/wiki/Add%E2%80%90ons-feature-:-add-env-variables + +The complete list of ENV variables can be seen here : https://github.com/Trigus42/alpine-qbittorrentvpn#environment-variables + ## Installation --- @@ -119,8 +116,10 @@ pull-filter ignore "dhcp-option DNS6" pull-filter ignore "tun-ipv6" pull-filter ignore "ifconfig-ipv6" ``` + +
### Monitored folders (@FaliseDotCom) @@ -130,30 +129,31 @@ pull-filter ignore "ifconfig-ipv6" ```json { - "folder/to/watch": { - "add_torrent_params": { - "category": "", - "content_layout": "Original", - "download_limit": -1, - "download_path": "[folder/for/INCOMPLETE_downloads]", - "operating_mode": "AutoManaged", - "ratio_limit": -2, - "save_path": "[folder/for/COMPLETED_downloads]", - "seeding_time_limit": -2, - "skip_checking": false, - "stopped": false, - "tags": [ - ], - "upload_limit": -1, - "use_auto_tmm": false, - "use_download_path": true - }, - "recursive": false - } + "folder/to/watch": { + "add_torrent_params": { + "category": "", + "content_layout": "Original", + "download_limit": -1, + "download_path": "[folder/for/INCOMPLETE_downloads]", + "operating_mode": "AutoManaged", + "ratio_limit": -2, + "save_path": "[folder/for/COMPLETED_downloads]", + "seeding_time_limit": -2, + "skip_checking": false, + "stopped": false, + "tags": [], + "upload_limit": -1, + "use_auto_tmm": false, + "use_download_path": true + }, + "recursive": false + } } ``` +
+
### nginx error code (@Nanianmichaels) @@ -171,19 +171,24 @@ Wait a couple minutes and restart addon, it could be a temporary unavailability > [cont-init.d] 00-local_mounts.sh: exited 0. Try to mount by putting the partition label in the "localdisks" options instead of the hardware name +
+
### Loss of metadata fetching with openvpn after several days (@almico) Add `ping-restart 60` to your config.ovpn +
+
### Downloads info are empty on small scale window (@aviadlevy) When my window size width is lower than 960 pixels my downloads are empty. Solution is to reset the Vuetorrent settings. +
## Support diff --git a/qbittorrent/build.json b/qbittorrent/build.json index 16ddf9633..586b300ef 100644 --- a/qbittorrent/build.json +++ b/qbittorrent/build.json @@ -1,8 +1,8 @@ { "build_from": { - "aarch64": "lscr.io/linuxserver/qbittorrent:arm64v8-latest", - "amd64": "lscr.io/linuxserver/qbittorrent:amd64-latest", - "armv7": "lscr.io/linuxserver/qbittorrent:arm32v7-4.5.3" + "aarch64": "trigus42/qbittorrentvpn:latest", + "amd64": "trigus42/qbittorrentvpn:latest", + "armv7": "trigus42/qbittorrentvpn:latest" }, "codenotary": { "signer": "alexandrep.github@gmail.com" diff --git a/qbittorrent/config.json b/qbittorrent/config.json index b89c56820..910731de3 100644 --- a/qbittorrent/config.json +++ b/qbittorrent/config.json @@ -62,29 +62,37 @@ "environment": { "PGID": "0", "PUID": "0", - "WEBUI_PORT": "8080" + "WEBUI_PORT": "8080", + "ADDITIONAL_PORTS": "59595,6882", + "DOWNLOAD_DIR_CHOWN": "true", + "SET_FWMARK": "true", + "QBITTORRENTLOGPATH": "/config/qBittorrent/data/logs" }, "image": "ghcr.io/alexbelgium/qbittorrent-{arch}", "ingress": true, "init": false, "map": [ "media:rw", - "config:rw", + "addon_config:rw", + "homeassistant_config:rw", "share:rw", "ssl" ], "name": "Qbittorrent", "options": { + "qbit_manage": false, "DNS_server": "8.8.8.8,1.1.1.1", "PGID": "0", "PUID": "0", "SavePath": "/share/qBittorrent", - "Username": "admin", + "QBT_USERNAME": "admin", + "VPN_TYPE": "openvpn", "certfile": "fullchain.pem", "customUI": "vuetorrent", "keyfile": "privkey.pem", + "VPN_ENABLED": "no", "ssl": false, - "whitelist": "localhost,127.0.0.1,172.30.0.0/16,192.168.0.0/16" + "LAN_NETWORK": "localhost,127.0.0.1,172.30.0.0/16,192.168.0.0/16" }, "panel_icon": "mdi:progress-download", "ports": { @@ -103,16 +111,18 @@ }, "privileged": [ "SYS_ADMIN", + "SYS_MODULE", "DAC_READ_SEARCH", "NET_ADMIN" ], "schema": { "DNS_server": "str?", + "qbit_manage": "bool", "PGID": "int?", "PUID": "int?", "SavePath": "str?", "TZ": "str?", - "Username": "str?", + "QBT_USERNAME": "str?", "certfile": "str", "cifsdomain": "str?", "cifspassword": "str?", @@ -121,19 +131,17 @@ "keyfile": "str", "localdisks": "str?", "networkdisks": "str?", - "openvpn_alt_mode": "bool?", - "openvpn_config": "str?", - "openvpn_enabled": "bool?", - "openvpn_password": "str?", - "openvpn_username": "str?", + "LAN_NETWORK": "str", + "VPN_ENABLED": "list(yes|no)", + "VPN_PASSWORD": "str?", + "VPN_USERNAME": "str?", + "VPN_TYPE": "list(openvpn|wireguard)?", "run_duration": "str?", "silent": "bool?", - "smbv1": "bool?", - "ssl": "bool", - "whitelist": "str?" + "ssl": "bool" }, "slug": "qbittorrent", "udev": true, "url": "https://github.com/alexbelgium/hassio-addons", - "version": "4.6.2" + "version": "4.6.2-wireguard_ovpn" } diff --git a/qbittorrent/rootfs/etc/cont-init.d/00-folders.sh b/qbittorrent/rootfs/etc/cont-init.d/00-folders.sh deleted file mode 100755 index ba5f3bca5..000000000 --- a/qbittorrent/rootfs/etc/cont-init.d/00-folders.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -mkdir -p /config/addons_config/qBittorrent - -if [ -f /config/addons_config/qbittorrent/qBittorrent.conf ] && [ -f /config/addons_config/qBittorrent/qBittorrent.conf ]; then - echo "Restore folders" - mv /config/addons_config/qBittorrent /config/addons_config/qBittorrent_old - mv /config/addons_config/qbittorrent /config/addons_config/qBittorrent -fi diff --git a/qbittorrent/rootfs/etc/cont-init.d/00-ipleak.sh b/qbittorrent/rootfs/etc/cont-init.d/00-ipleak.sh new file mode 100644 index 000000000..f9197a2ab --- /dev/null +++ b/qbittorrent/rootfs/etc/cont-init.d/00-ipleak.sh @@ -0,0 +1,4 @@ +#!/usr/bin/with-contenv bashio +# shellcheck shell=bash + +curl --max-time 10 --connect-timeout 5 -s ipecho.net/plain > /currentip \ No newline at end of file diff --git a/qbittorrent/rootfs/etc/cont-init.d/00-migration.sh b/qbittorrent/rootfs/etc/cont-init.d/00-migration.sh new file mode 100644 index 000000000..ff0e10f93 --- /dev/null +++ b/qbittorrent/rootfs/etc/cont-init.d/00-migration.sh @@ -0,0 +1,96 @@ +#!/usr/bin/with-contenv bashio +# shellcheck shell=bash + +# Create new folders +mkdir -p /config/wireguard +mkdir -p /config/openvpn +mkdir -p /config/qBittorrent/config +mkdir -p /config/qBittorrent/data + +if [ -f /homeassistant/addons_config/qBittorrent/qBittorrent.conf ]; then + bashio::log.warning "----------------------------------------" + bashio::log.warning "Migrating configuration to the new addon" + bashio::log.warning "----------------------------------------" + mv /homeassistant/addons_config/qBittorrent/*.json /config/qBittorrent/config/ + mv /homeassistant/addons_config/qBittorrent/*.conf /config/qBittorrent/config/ + if [ -d /homeassistant/addons_config/qBittorrent/rss ]; then mv /homeassistant/addons_config/qBittorrent/rss /config/qBittorrent/config/; fi + mv /homeassistant/addons_config/qBittorrent/* /config/qBittorrent/data/ + if [ -d /config/qBittorrent/data/addons_config ]; then rm -r /config/qBittorrent/data/addons_config; fi + if [ -d /config/qBittorrent/data/qBittorrent ]; then rm -r /config/qBittorrent/data/qBittorrent; fi + rm -r /homeassistant/addons_config/qBittorrent + bashio::log.yellow "... moved files from /config/addons_config/qBittorrent to /addon_configs/$HOSTNAME/qBitorrent (must be accessed with my Filebrowser addon)" +fi + +if [ -d /homeassistant/openvpn ]; then + if [ "$(ls -A /homeassistant/openvpn)" ]; then + mv /homeassistant/openvpn/* /config/openvpn/ + rm -r /homeassistant/openvpn + bashio::log.yellow "... moved files from /config/openvpn to /addon_configs/$HOSTNAME/openvpn" + fi +fi + +if [ -f /homeassistant/addons_config/qbittorrent/config.yaml ]; then + mv /homeassistant/addons_config/qbittorrent/* /config/ + rm -r /homeassistant/addons_config/qbittorrent + bashio::log.yellow "... moved config.yaml from /config/addons_config/qbittorrent to /addon_configs/$HOSTNAME" +fi + +if [ -f /homeassistant/addons_autoscrips/qbittorrent.sh ]; then + mv /homeassistant/addons_autoscrips/qbittorrent.sh /config/ + bashio::log.yellow "... moved qbittorrent.sh from /config/addons_autoscripts to /addon_configs/$HOSTNAME" +fi + +if bashio::config.has_value 'openvpn_enable'; then + if bashio::config.true 'openvpn_enabled'; then + bashio::addon.option "VPN_ENABLED" "yes" + bashio::log.yellow "... openvpn_enable : was true, VPN_ENABLED set to yes" + bashio::addon.option "VPN_TYPE" "openvpn" + bashio::log.yellow "... openvpn_enable : was true, VPN_TYPE set to openvpn" + fi + bashio::addon.option "openvpn_enable" + bashio::log.yellow "... openvpn_enable : removed as not used anymore" +fi + +if bashio::config.has_value 'openvpn_username'; then + bashio::addon.option "VPN_USERNAME" "$(bashio::config "openvpn_username")" + bashio::log.yellow "... openvpn_username : was set, VPN_USERNAME set to $(bashio::config "openvpn_username")" + bashio::addon.option "openvpn_username" + bashio::log.yellow "... openvpn_username : removed as not used anymore" +fi + +if bashio::config.has_value 'Username'; then + bashio::addon.option "QBT_USERNAME" "$(bashio::config "Username")" + bashio::log.yellow "... Username : was set, QBT_USERNAME set to $(bashio::config "Username")" + bashio::addon.option "Username" + bashio::log.yellow "... Username : removed as not used anymore" +fi + +if bashio::config.has_value 'openvpn_password'; then + bashio::addon.option "VPN_PASSWORD" "$(bashio::config "openvpn_password")" + bashio::log.yellow "... openvpn_password : was set, VPN_PASSWORD set to $(bashio::config "openvpn_password")" + bashio::addon.option "openvpn_password" + bashio::log.yellow "... openvpn_password : removed as not used anymore" +fi + +if bashio::config.has_value 'whitelist'; then + bashio::addon.option "LAN_NETWORK" "$(bashio::config "whitelist")" + bashio::log.yellow "... whitelist : was set, LAN_NETWORK set to $(bashio::config "whitelist")" + bashio::addon.option "whitelist" + bashio::log.yellow "... whitelist : removed as not used anymore" +fi + +if bashio::config.has_value 'smbv1'; then + bashio::addon.option "smbv1" + bashio::log.yellow "... smbv1 : removed as not used anymore" +fi + +if bashio::config.has_value 'openvpn_config'; then + openvpn_config="$(bashio::config "openvpn_config")" + if [ -f "$openvpn_config" ]; then + mv "$openvpn_config" /config/openvpn/ + fi +fi + +if [ -d /config/qBittorrent/qBittorrent ]; then +rm -r /config/qBittorrent/qBittorrent +fi diff --git a/qbittorrent/rootfs/etc/cont-init.d/91-qbittorrent_configuration.sh b/qbittorrent/rootfs/etc/cont-init.d/91-qbittorrent_configuration.sh index 33ee1ce34..7fd425e8a 100755 --- a/qbittorrent/rootfs/etc/cont-init.d/91-qbittorrent_configuration.sh +++ b/qbittorrent/rootfs/etc/cont-init.d/91-qbittorrent_configuration.sh @@ -7,7 +7,7 @@ set -e ########## # Define preferences line -CONFIG_LOCATION=/config/addons_config/qBittorrent +CONFIG_LOCATION=/config/qBittorrent/config/ mkdir -p "$CONFIG_LOCATION" # copy default config @@ -19,9 +19,8 @@ cd "$CONFIG_LOCATION"/ || true LINE=$(sed -n '/\[Preferences\]/=' qBittorrent.conf) || bashio::exit.nok "qBittorrent.conf not valid" LINE=$((LINE + 1)) -# Remove unused folders -if [ -d "$CONFIG_LOCATION"/addons_config ]; then rm -r "$CONFIG_LOCATION"/addons_config; fi -if [ -d "$CONFIG_LOCATION"/qBittorrent ]; then rm -r "$CONFIG_LOCATION"/qBittorrent; fi +# Check file size +ORIGINAL_SIZE="$(wc -c "$CONFIG_LOCATION"/qBittorrent.conf)" ########### # TIMEOUT # @@ -68,20 +67,16 @@ chown -R "$PUID:$PGID" "$DOWNLOADS" || bashio::log.fatal "Error, please check de sed -i -e '/CSRFProtection/d' \ -e '/ClickjackingProtection/d' \ -e '/HostHeaderValidation/d' \ - -e '/WebUI\Address/d' \ + -e '/Address/d' \ -e "$LINE i\WebUI\\\CSRFProtection=false" \ -e "$LINE i\WebUI\\\ClickjackingProtection=false" \ -e "$LINE i\WebUI\\\HostHeaderValidation=false" \ - -e "$LINE i\WebUI\\\Address=*" qBittorrent.conf -#sed -i '/WebUI\ReverseProxySupportEnabled/d' qBittorrent.conf -#sed -i "$LINE i\WebUI\\\ReverseProxySupportEnabled=true" qBittorrent.conf + -e "$LINE i\WebUI\\\Address=\*" qBittorrent.conf ################ # Correct Port # ################ -# sed -i '/PortRangeMin/d' qBittorrent.conf -# sed -i "$LINE i\Connection\\\PortRangeMin=6881" qBittorrent.conf sed -i "s|6881|59595|g" qBittorrent.conf # Correction if required ################ @@ -110,7 +105,7 @@ fi cd "$CONFIG_LOCATION"/ || true -WHITELIST="$(bashio::config 'whitelist')" +WHITELIST="$(bashio::config 'LAN_NETWORK')" #clean data sed -i '/AuthSubnetWhitelist/d' qBittorrent.conf @@ -128,22 +123,45 @@ fi ############### cd "$CONFIG_LOCATION"/ || true -if bashio::config.has_value 'Username'; then - USERNAME=$(bashio::config 'Username') - #clean data - sed -i '/WebUI\\\Username/d' qBittorrent.conf - #add data - sed -i "/\[Preferences\]/a\WebUI\\\Username=$USERNAME" qBittorrent.conf - bashio::log.info "WEBUI username set to $USERNAME" +if bashio::config.has_value 'QBT_USERNAME'; then + QBT_USERNAME=$(bashio::config 'QBT_USERNAME') else - if ! grep -q Username qBittorrent.conf; then - sed -i "/\[Preferences\]/a\WebUI\\\Username=admin" qBittorrent.conf - fi + QBT_USERNAME="admin" fi -LINE2="$(sed -n '/Password_PBKDF2/=' qBittorrent.conf)" -if [[ "$LINE" -gt "$LINE2" ]]; then sed -i '/Password_PBKDF2/d' qBittorrent.conf; fi -if ! grep -q Password_PBKDF2 qBittorrent.conf; then - sed -i "/\[Preferences\]/a\WebUI\\\Password_PBKDF2=\"@ByteArray(cps93Gf8ma8EM3QRon+spg==:wYFoMNVmdiqzWYQ6mFrvET+RRbBSIPVfXFFeEy0ZEagxvNuEF7uGVnG5iq8oeu38kGLtmJqCM2w8cTdtORDP2A==)\"" qBittorrent.conf +#clean data +sed -i '/WebUI\\\Username/d' qBittorrent.conf +#add data +sed -i "/\[Preferences\]/a\WebUI\\\Username=$QBT_USERNAME" qBittorrent.conf +bashio::log.info "WEBUI username set to $QBT_USERNAME" + +############### +# PASSWORD # +############### + +# Set initial password to homeassistant +cd "$CONFIG_LOCATION"/ || true +NEEDREBOOT="" +if ! grep -q "Password_PBKDF2" qBittorrent.conf; then + function escape_special_characters() { + local value="$1" + value=$(echo "$value" | sed 's/[&/\;.<>`$*(){}[\]~^|!?@%#=,:+_-]/\\&/g') + echo "$value" + } + PBKDF2="UDxNW6zG8wJHG9PvnGFP4A==:gJZEXLbR2XYNN042G4ygLMvZi2BhHm2m6Soz6GVCrCuVZH6OSkUan7AvUDEiSodHckUm8oNTkx9atQwcUf/JLQ==" + PBKDF2="$(escape_special_characters "$PBKDF2")" + sed -i "/\[Preferences\]/a\WebUI\\\Password_PBKDF2=\"@ByteArray($PBKDF2)\"" qBittorrent.conf + NEEDREBOOT=true +fi + +#################### +# REBOOT IF NEEDED # +#################### + +# Reboot if first time password is set, or if password is changed + +# Check file size +if [[ "$ORIGINAL_SIZE" != "$(wc -c "$CONFIG_LOCATION"/qBittorrent.conf)" ]]; then + bashio::log.info "Configuration changed, rebooting" bashio::addon.restart fi @@ -217,5 +235,5 @@ fi # CLOSE # ########## -bashio::log.info "Default username/password : $USERNAME/homeassistant" +bashio::log.info "Default username/password : $QBT_USERNAME/homeassistant. Please change your password on first connection" bashio::log.info "Configuration can be found in $CONFIG_LOCATION" diff --git a/qbittorrent/rootfs/etc/cont-init.d/92-qbit_manage.sh b/qbittorrent/rootfs/etc/cont-init.d/92-qbit_manage.sh new file mode 100644 index 000000000..d3d6f298e --- /dev/null +++ b/qbittorrent/rootfs/etc/cont-init.d/92-qbit_manage.sh @@ -0,0 +1,31 @@ +#!/usr/bin/with-contenv bashio +# shellcheck shell=bash +set -e + +if bashio::config.true "qbit_manage"; then + + bashio::log.info "qbit_manage activated, setting system" + + # Set folder + echo "... setting folder" + mkdir -p /config/qbit_manage + chmod -R 777 /config/qbit_manage + + # Create default file + if [ ! -f /config/qbit_manage/qbit_manage.yml ]; then + echo "... create default file" + cp /qbit_manage/config/config.yml.sample /config/qbit_manage/qbit_manage.yml + fi + + # Set qBittorrent options + echo "... align QBT username and password" + sed -i "/host:/c\ host: \"localhost:8080\"" /config/qbit_manage/qbit_manage.yml + sed -i "/user:/c\ user: \"$(bashio::config "QBT_USERNAME")\"" /config/qbit_manage/qbit_manage.yml + sed -i "s=root_dir: \"/data/torrents/\"=$(bashio::config.has_value "SavePath")=g" /config/qbit_manage/qbit_manage.yml + sed -i "s=remote_dir: \"/mnt/user/data/torrents/\"=$(bashio::config.has_value "SavePath")=g" /config/qbit_manage/qbit_manage.yml + + # Startup delay 30s ; config file specific ; log file specific + python /qbit_manage/qbit_manage.py -sd 30 --config-file "/config/qbit_manage/qbit_manage.yml" --log-file "/config/qbit_manage/qbit_manage.log" & true + bashio::log.info "qbit_manage started with config in /addon_configs/$HOSTNAME/qbit_manage/qbit_manage.yaml accessible with the Filebrowser addon" + +fi diff --git a/qbittorrent/rootfs/etc/cont-init.d/93-openvpn.sh b/qbittorrent/rootfs/etc/cont-init.d/93-openvpn.sh deleted file mode 100755 index e6ee8d00e..000000000 --- a/qbittorrent/rootfs/etc/cont-init.d/93-openvpn.sh +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/with-contenv bashio -# shellcheck shell=bash -set -e -# ============================================================================== - -declare openvpn_config -declare openvpn_username -declare openvpn_password - -QBT_CONFIG_FILE="/config/addons_config/qBittorrent/qBittorrent.conf" - -if bashio::config.true 'openvpn_enabled'; then - - bashio::log.info "Configuring openvpn" - - # Get current ip - curl -s ipecho.net/plain > /currentip - - ##################### - # CONFIGURE OPENVPN # - ##################### - - openvpn_config=$(bashio::config 'openvpn_config') - - cp "/config/openvpn/${openvpn_config}" /etc/openvpn/config.ovpn || bashio::log.error "openvpn config file not found in /config/openvpn/${openvpn_config}" - - openvpn_username=$(bashio::config 'openvpn_username') - echo "${openvpn_username}" >/etc/openvpn/credentials - openvpn_password=$(bashio::config 'openvpn_password') - echo "${openvpn_password}" >>/etc/openvpn/credentials - sed -i 's/auth-user-pass.*/auth-user-pass \/etc\/openvpn\/credentials/g' /etc/openvpn/config.ovpn - - # Permissions - chmod 600 /etc/openvpn/credentials - chmod 755 /etc/openvpn/up.sh - chmod 755 /etc/openvpn/down.sh - chmod 755 /etc/openvpn/up-qbittorrent.sh - chmod +x /etc/openvpn/up.sh - chmod +x /etc/openvpn/up-qbittorrent.sh - - bashio::log.info "openvpn correctly set, qbittorrent will run tunnelled through openvpn" - - ######################### - # CONFIGURE QBITTORRENT # - ######################### - - # WITH CONTAINER BINDING - ######################### - # If alternative mode enabled, bind container - if bashio::config.true 'openvpn_alt_mode'; then - echo "Using container binding" - - # Remove interface - echo "... deleting previous interface settings" - sed -i '/Interface/d' "$QBT_CONFIG_FILE" - - # Modify ovpn config - if grep -q route-nopull /etc/openvpn/config.ovpn; then - echo "... removing route-nopull from your config.ovpn" - sed -i '/route-nopull/d' /etc/openvpn/config.ovpn - fi - - # Exit - exit 0 - fi - - # WITH INTERFACE BINDING - ######################### - # Connection with interface binding - echo "Using interface binding in the qBittorrent app" - - # Define preferences line - cd /config/addons_config/qBittorrent/ || exit 1 - LINE=$(sed -n '/\[Preferences\]/=' "$QBT_CONFIG_FILE") - LINE=$((LINE + 1)) - SESSION=$(sed -n '/\[BitTorrent\]/=' "$QBT_CONFIG_FILE") - - # If qBittorrent.conf exists - if [ -f "$QBT_CONFIG_FILE" ]; then - # Remove previous line and bind tun0 - echo "... deleting previous interface settings" - sed -i '/Interface/d' "$QBT_CONFIG_FILE" - - # Bind tun0 - echo "... binding tun0 interface in qBittorrent configuration" - sed -i "$LINE i\Connection\\\Interface=tun0" "$QBT_CONFIG_FILE" - sed -i "$LINE i\Connection\\\InterfaceName=tun0" "$QBT_CONFIG_FILE" - - if [ "$SESSION" != "" ]; then - SESSION=$((SESSION + 1)) - sed -i "$SESSION i\Session\\\Interface=tun0" "$QBT_CONFIG_FILE" - sed -i "$SESSION i\Session\\\InterfaceName=tun0" "$QBT_CONFIG_FILE" - fi - - else - bashio::log.error "qBittorrent config file doesn't exist, openvpn must be added manually to qbittorrent options " - exit 1 - fi - - # Modify ovpn config - if ! grep -q route-nopull /etc/openvpn/config.ovpn; then - echo "... adding route-nopull to your config.ovpn" - sed -i "1a route-nopull" /etc/openvpn/config.ovpn - fi - -else - - ################## - # REMOVE OPENVPN # - ################## - - # Ensure no redirection by removing the direction tag - if [ -f "$QBT_CONFIG_FILE" ]; then - sed -i '/Interface/d' "$QBT_CONFIG_FILE" - fi - bashio::log.info "Direct connection without VPN enabled" - -fi diff --git a/qbittorrent/rootfs/etc/openvpn/down.sh b/qbittorrent/rootfs/etc/openvpn/down.sh deleted file mode 100755 index 8f31dd6b5..000000000 --- a/qbittorrent/rootfs/etc/openvpn/down.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC2154,SC2004,SC2059,SC2086 -# Copyright (c) 2006-2007 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# Contributed by Roy Marples (uberlord@gentoo.org) - -# If we have a service specific script, run this now -if [ -x /etc/openvpn/"${RC_SVCNAME}"-down.sh ] ; then - /etc/openvpn/"${RC_SVCNAME}"-down.sh "$@" -fi - -# Restore resolv.conf to how it was -if [ "${PEER_DNS}" != "no" ]; then - if [ -x /sbin/resolvconf ] ; then - /sbin/resolvconf -d "${dev}" - elif [ -e /etc/resolv.conf-"${dev}".sv ] ; then - # Important that we cat instead of move incase resolv.conf is - # a symlink and not an actual file - cat /etc/resolv.conf-"${dev}".sv > /etc/resolv.conf - rm -f /etc/resolv.conf-"${dev}".sv - fi -fi - -if [ -n "${RC_SVCNAME}" ]; then - # Re-enter the init script to start any dependant services - if /etc/init.d/"${RC_SVCNAME}" --quiet status ; then - export IN_BACKGROUND=true - if [ -d /var/run/s6/container_environment ]; then printf "%s" "true" > /var/run/s6/container_environment/IN_BACKGROUND; fi - printf "%s" "IN_BACKGROUND=\"true\"" >> ~/.bashrc - /etc/init.d/"${RC_SVCNAME}" --quiet stop - fi -fi - -exit 0 - -# vim: ts=4 : diff --git a/qbittorrent/rootfs/etc/openvpn/up-qbittorrent.sh b/qbittorrent/rootfs/etc/openvpn/up-qbittorrent.sh deleted file mode 100755 index 0f0101dbc..000000000 --- a/qbittorrent/rootfs/etc/openvpn/up-qbittorrent.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/with-contenv bashio -# shellcheck shell=bash -set -e - -WEBUI_PORT=${WEBUI_PORT:-8080} - -exec \ - s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost ${WEBUI_PORT}" \ - s6-setuidgid abc /usr/bin/qbittorrent-nox --webui-port="${WEBUI_PORT}" diff --git a/qbittorrent/rootfs/etc/openvpn/up.sh b/qbittorrent/rootfs/etc/openvpn/up.sh deleted file mode 100755 index 33a8b877a..000000000 --- a/qbittorrent/rootfs/etc/openvpn/up.sh +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC2154,SC2004,SC2059,SC2086 - -# launch qbittorrent -/etc/openvpn/up-qbittorrent.sh "${4}" & - -# Copyright (c) 2006-2007 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# Contributed by Roy Marples (uberlord@gentoo.org) - -# Setup our resolv.conf -# Vitally important that we use the domain entry in resolv.conf so we -# can setup the nameservers are for the domain ONLY in resolvconf if -# we're using a decent dns cache/forwarder like dnsmasq and NOT nscd/libc. -# nscd/libc users will get the VPN nameservers before their other ones -# and will use the first one that responds - maybe the LAN ones? -# non resolvconf users just the the VPN resolv.conf - -# FIXME:- if we have >1 domain, then we have to use search :/ -# We need to add a flag to resolvconf to say -# "these nameservers should only be used for the listed search domains -# if other global nameservers are present on other interfaces" -# This however, will break compatibility with Debians resolvconf -# A possible workaround would be to just list multiple domain lines -# and try and let resolvconf handle it - -if [ "${PEER_DNS}" != "no" ]; then - NS= - DOMAIN= - SEARCH= - i=1 - while true ; do - eval opt=\$foreign_option_${i} - [ -z "${opt}" ] && break - if [ "${opt}" != "${opt#dhcp-option DOMAIN *}" ] ; then - if [ -z "${DOMAIN}" ] ; then - DOMAIN="${opt#dhcp-option DOMAIN *}" - else - SEARCH="${SEARCH}${SEARCH:+ }${opt#dhcp-option DOMAIN *}" - fi - elif [ "${opt}" != "${opt#dhcp-option DNS *}" ] ; then - NS="${NS}nameserver ${opt#dhcp-option DNS *}\n" - fi - i=$((${i} + 1)) - done - - if [ -n "${NS}" ] ; then - DNS="# Generated by openvpn for interface ${dev}\n" - if [ -n "${SEARCH}" ] ; then - DNS="${DNS}search ${DOMAIN} ${SEARCH}\n" - elif [ -n "${DOMAIN}" ]; then - DNS="${DNS}domain ${DOMAIN}\n" - fi - DNS="${DNS}${NS}" - if [ -x /sbin/resolvconf ] ; then - printf "${DNS}" | /sbin/resolvconf -a "${dev}" - else - # Preserve the existing resolv.conf - if [ -e /etc/resolv.conf ] ; then - cp /etc/resolv.conf /etc/resolv.conf-"${dev}".sv - fi - printf "${DNS}" > /etc/resolv.conf - chmod 644 /etc/resolv.conf - fi - fi -fi - -# Below section is Gentoo specific -# Quick summary - our init scripts are re-entrant and set the RC_SVCNAME env var -# as we could have >1 openvpn service - -if [ -n "${RC_SVCNAME}" ]; then - # If we have a service specific script, run this now - if [ -x /etc/openvpn/"${RC_SVCNAME}"-up.sh ] ; then - /etc/openvpn/"${RC_SVCNAME}"-up.sh "$@" - fi - - # Re-enter the init script to start any dependant services - if ! /etc/init.d/"${RC_SVCNAME}" --quiet status ; then - export IN_BACKGROUND=true - if [ -d /var/run/s6/container_environment ]; then printf "%s" "true" > /var/run/s6/container_environment/IN_BACKGROUND; fi - printf "%s" "IN_BACKGROUND=\"true\"" >> ~/.bashrc - /etc/init.d/${RC_SVCNAME} --quiet start - fi -fi - -############### -# ALLOW WEBUI # -############### - -ip route add 10.0.0.0/8 via 172.30.32.1 -ip route add 192.168.0.0/16 via 172.30.32.1 -ip route add 172.16.0.0/12 via 172.30.32.1 - -exit 0 - -# vim: ts=4 : diff --git a/qbittorrent/rootfs/etc/s6-overlay/s6-rc.d/init-adduser/branding b/qbittorrent/rootfs/etc/s6-overlay/s6-rc.d/init-adduser/branding deleted file mode 100644 index 07273c0fd..000000000 --- a/qbittorrent/rootfs/etc/s6-overlay/s6-rc.d/init-adduser/branding +++ /dev/null @@ -1,11 +0,0 @@ -#============================# -# ALEXBELGIUM'S ADDONS # -#============================# - _.------. - _.-` ('>.-`"""-. - '.--'` _'` _ .--.) - -' '-.-';` ` - ' - _.' ``'--. - '---` .-'""` - /` -#=== Home Assistant Addon ===# diff --git a/qbittorrent/rootfs/etc/s6-overlay/s6-rc.d/svc-qbittorrent/run b/qbittorrent/rootfs/etc/s6-overlay/s6-rc.d/svc-qbittorrent/run deleted file mode 100644 index 21fa83d60..000000000 --- a/qbittorrent/rootfs/etc/s6-overlay/s6-rc.d/svc-qbittorrent/run +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/with-contenv bashio -# shellcheck shell=bash -set -e - -WEBUI_PORT=${WEBUI_PORT:-8080} - -if bashio::config.true 'silent'; then - sed -i 's|/proc/1/fd/1 hassio;|off;|g' /etc/nginx/nginx.conf -fi - -if bashio::config.true 'openvpn_enabled'; then - exec /usr/sbin/openvpn --config /etc/openvpn/config.ovpn --script-security 2 --up /etc/openvpn/up.sh --down /etc/openvpn/down.sh -else - if bashio::config.true 'silent'; then - exec \ - s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost ${WEBUI_PORT}" \ - s6-setuidgid abc /usr/bin/qbittorrent-nox --webui-port="${WEBUI_PORT}" >/dev/null - else - exec \ - s6-notifyoncheck -d -n 300 -w 1000 -c "nc -z localhost ${WEBUI_PORT}" \ - s6-setuidgid abc /usr/bin/qbittorrent-nox --webui-port="${WEBUI_PORT}" - fi -fi diff --git a/qbittorrent/rootfs/etc/services.d/nginx/run b/qbittorrent/rootfs/etc/services.d/nginx/run index 2c53a31bc..9807d585e 100644 --- a/qbittorrent/rootfs/etc/services.d/nginx/run +++ b/qbittorrent/rootfs/etc/services.d/nginx/run @@ -8,20 +8,15 @@ bashio::net.wait_for 8080 localhost 900 bashio::log.info "Starting NGinx..." -# Check vpn is working -if [ -f /currentip ]; then +if [[ "$(bashio::config 'VPN_ENABLED')" == "yes" ]]; then exec nginx & \ while true; do # Get vpn ip - if bashio::config.true 'openvpn_alt_mode'; then - curl -s ipecho.net/plain > /vpnip - else - curl -s ipecho.net/plain --interface tun0 > /vpnip - fi + curl -s ipecho.net/plain --interface tun0 > /vpnip # Verify ip has changed if [[ "$(cat /vpnip)" = "$(cat /currentip)" ]]; then - bashio::log.fatal "VPN is not properly configured. Your ip is exposed. Please fix this, or do not use the vpn alt mode" + bashio::log.fatal "VPN is not properly configured. Your ip is exposed." bashio::exit.nok fi @@ -32,7 +27,7 @@ if [ -f /currentip ]; then bashio::log.info "VPN is up and running with ip $(cat /vpnip), based in country : $COUNTRY" # Check every 15m - sleep 15m + sleep 30m true done diff --git a/qbittorrent/updater.json b/qbittorrent/updater.json index a95a5707f..e3020f7fe 100644 --- a/qbittorrent/updater.json +++ b/qbittorrent/updater.json @@ -4,6 +4,6 @@ "repository": "alexbelgium/hassio-addons", "slug": "qbittorrent", "source": "github", - "upstream_repo": "linuxserver/docker-qbittorrent", + "upstream_repo": "trigus42/qbittorrentvpn", "upstream_version": "4.6.2" }