From 12e6378bfe129568826580bdb73b3ede2c4228ee Mon Sep 17 00:00:00 2001 From: Kristian Haugene Date: Sun, 9 Aug 2020 18:02:51 +0200 Subject: [PATCH 1/8] Replace dockerize, make settings persistent, let settings be overridden by env vars --- Dockerfile | 82 +------------------ openvpn/persistEnvironment.py | 30 +++++++ openvpn/start.sh | 2 +- transmission/default-settings.json | 75 ++++++++++++++++++ transmission/environment-variables.tmpl | 101 ------------------------ transmission/settings.tmpl | 75 ------------------ transmission/start.sh | 7 +- transmission/stop.sh | 9 ++- transmission/updateSettings.py | 37 +++++++++ 9 files changed, 157 insertions(+), 261 deletions(-) create mode 100644 openvpn/persistEnvironment.py create mode 100644 transmission/default-settings.json delete mode 100644 transmission/environment-variables.tmpl delete mode 100644 transmission/settings.tmpl create mode 100644 transmission/updateSettings.py diff --git a/Dockerfile b/Dockerfile index a87cc5500..f6a3b66b6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,12 +3,8 @@ FROM alpine:3.12 VOLUME /data VOLUME /config -ARG DOCKERIZE_ARCH=amd64 -ENV DOCKERIZE_VERSION=v0.6.0 RUN echo "@community http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \ && apk --no-cache add bash dumb-init ip6tables ufw@community openvpn shadow transmission-daemon transmission-cli curl jq tzdata openrc tinyproxy tinyproxy-openrc\ - && echo "Install dockerize $DOCKERIZE_VERSION ($DOCKERIZE_ARCH)" \ - && wget -qO- https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-$DOCKERIZE_ARCH-$DOCKERIZE_VERSION.tar.gz | tar xz -C /usr/bin \ && mkdir -p /opt/transmission-ui \ && echo "Install Combustion" \ && wget -qO- https://github.com/Secretmapper/combustion/archive/release.tar.gz | tar xz -C /opt/transmission-ui \ @@ -37,89 +33,13 @@ ENV OPENVPN_USERNAME=**None** \ OPENVPN_PASSWORD=**None** \ OPENVPN_PROVIDER=**None** \ GLOBAL_APPLY_PERMISSIONS=true \ - TRANSMISSION_ALT_SPEED_DOWN=50 \ - TRANSMISSION_ALT_SPEED_ENABLED=false \ - TRANSMISSION_ALT_SPEED_TIME_BEGIN=540 \ - TRANSMISSION_ALT_SPEED_TIME_DAY=127 \ - TRANSMISSION_ALT_SPEED_TIME_ENABLED=false \ - TRANSMISSION_ALT_SPEED_TIME_END=1020 \ - TRANSMISSION_ALT_SPEED_UP=50 \ - TRANSMISSION_BIND_ADDRESS_IPV4=0.0.0.0 \ - TRANSMISSION_BIND_ADDRESS_IPV6=:: \ - TRANSMISSION_BLOCKLIST_ENABLED=false \ - TRANSMISSION_BLOCKLIST_URL=http://www.example.com/blocklist \ - TRANSMISSION_CACHE_SIZE_MB=4 \ - TRANSMISSION_DHT_ENABLED=true \ - TRANSMISSION_DOWNLOAD_DIR=/data/completed \ - TRANSMISSION_DOWNLOAD_LIMIT=100 \ - TRANSMISSION_DOWNLOAD_LIMIT_ENABLED=0 \ - TRANSMISSION_DOWNLOAD_QUEUE_ENABLED=true \ - TRANSMISSION_DOWNLOAD_QUEUE_SIZE=5 \ - TRANSMISSION_ENCRYPTION=1 \ - TRANSMISSION_IDLE_SEEDING_LIMIT=30 \ - TRANSMISSION_IDLE_SEEDING_LIMIT_ENABLED=false \ - TRANSMISSION_INCOMPLETE_DIR=/data/incomplete \ - TRANSMISSION_INCOMPLETE_DIR_ENABLED=true \ - TRANSMISSION_LPD_ENABLED=false \ - TRANSMISSION_MAX_PEERS_GLOBAL=200 \ - TRANSMISSION_MESSAGE_LEVEL=2 \ - TRANSMISSION_PEER_CONGESTION_ALGORITHM= \ - TRANSMISSION_PEER_ID_TTL_HOURS=6 \ - TRANSMISSION_PEER_LIMIT_GLOBAL=200 \ - TRANSMISSION_PEER_LIMIT_PER_TORRENT=50 \ - TRANSMISSION_PEER_PORT=51413 \ - TRANSMISSION_PEER_PORT_RANDOM_HIGH=65535 \ - TRANSMISSION_PEER_PORT_RANDOM_LOW=49152 \ - TRANSMISSION_PEER_PORT_RANDOM_ON_START=false \ - TRANSMISSION_PEER_SOCKET_TOS=default \ - TRANSMISSION_PEX_ENABLED=true \ - TRANSMISSION_PORT_FORWARDING_ENABLED=false \ - TRANSMISSION_PREALLOCATION=1 \ - TRANSMISSION_PREFETCH_ENABLED=1 \ - TRANSMISSION_QUEUE_STALLED_ENABLED=true \ - TRANSMISSION_QUEUE_STALLED_MINUTES=30 \ - TRANSMISSION_RATIO_LIMIT=2 \ - TRANSMISSION_RATIO_LIMIT_ENABLED=false \ - TRANSMISSION_RENAME_PARTIAL_FILES=true \ - TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=false \ - TRANSMISSION_RPC_BIND_ADDRESS=0.0.0.0 \ - TRANSMISSION_RPC_ENABLED=true \ - TRANSMISSION_RPC_HOST_WHITELIST= \ - TRANSMISSION_RPC_HOST_WHITELIST_ENABLED=false \ - TRANSMISSION_RPC_PASSWORD=password \ - TRANSMISSION_RPC_PORT=9091 \ - TRANSMISSION_RPC_URL=/transmission/ \ - TRANSMISSION_RPC_USERNAME=username \ - TRANSMISSION_RPC_WHITELIST=127.0.0.1 \ - TRANSMISSION_RPC_WHITELIST_ENABLED=false \ - TRANSMISSION_SCRAPE_PAUSED_TORRENTS_ENABLED=true \ - TRANSMISSION_SCRIPT_TORRENT_DONE_ENABLED=false \ - TRANSMISSION_SCRIPT_TORRENT_DONE_FILENAME= \ - TRANSMISSION_SEED_QUEUE_ENABLED=false \ - TRANSMISSION_SEED_QUEUE_SIZE=10 \ - TRANSMISSION_SPEED_LIMIT_DOWN=100 \ - TRANSMISSION_SPEED_LIMIT_DOWN_ENABLED=false \ - TRANSMISSION_SPEED_LIMIT_UP=100 \ - TRANSMISSION_SPEED_LIMIT_UP_ENABLED=false \ - TRANSMISSION_START_ADDED_TORRENTS=true \ - TRANSMISSION_TRASH_ORIGINAL_TORRENT_FILES=false \ - TRANSMISSION_UMASK=2 \ - TRANSMISSION_UPLOAD_LIMIT=100 \ - TRANSMISSION_UPLOAD_LIMIT_ENABLED=0 \ - TRANSMISSION_UPLOAD_SLOTS_PER_TORRENT=14 \ - TRANSMISSION_UTP_ENABLED=false \ - TRANSMISSION_WATCH_DIR=/data/watch \ - TRANSMISSION_WATCH_DIR_ENABLED=true \ TRANSMISSION_HOME=/data/transmission-home \ - TRANSMISSION_WATCH_DIR_FORCE_GENERIC=false \ ENABLE_UFW=false \ UFW_ALLOW_GW_NET=false \ UFW_EXTRA_PORTS= \ UFW_DISABLE_IPTABLES_REJECT=false \ - TRANSMISSION_WEB_UI= \ PUID= \ PGID= \ - TRANSMISSION_WEB_HOME= \ DROP_DEFAULT_ROUTE= \ WEBPROXY_ENABLED=false \ WEBPROXY_PORT=8888 \ @@ -128,7 +48,7 @@ ENV OPENVPN_USERNAME=**None** \ DOCKER_LOG=false \ HEALTH_CHECK_HOST=google.com -HEALTHCHECK --interval=5m CMD /etc/scripts/healthcheck.sh +HEALTHCHECK --interval=1m CMD /etc/scripts/healthcheck.sh # Expose port and run EXPOSE 9091 diff --git a/openvpn/persistEnvironment.py b/openvpn/persistEnvironment.py new file mode 100644 index 000000000..9e4b97c72 --- /dev/null +++ b/openvpn/persistEnvironment.py @@ -0,0 +1,30 @@ +import os +import sys +import json + + +# Verify script arguments +if len(sys.argv) != 2: + sys.exit( + 'Invalid number of arguments. Usage:\n persistEnvironment.py /path/to/varibles-script.sh') + +envVarsScriptFile = sys.argv[1] + +wantedVariables = ['OPENVPN_PROVIDER', 'ENABLE_UFW', 'PUID', 'PGID', 'DROP_DEFAULT_ROUTE', 'GLOBAL_APPLY_PERMISSIONS', 'DOCKER_LOG'] + +variablesToPersist = {} + +for variable in os.environ: + if variable.startswith('TRANSMISSION_'): + variablesToPersist[variable] = os.environ.get(variable) + if variable.startswith('WEBPROXY_'): + variablesToPersist[variable] = os.environ.get(variable) + if variable in wantedVariables: + variablesToPersist[variable] = os.environ.get(variable) + + +# Dump resulting settings to file +with open(envVarsScriptFile, 'w') as file: + for variable in variablesToPersist: + file.write('export ' + variable + '=' + + variablesToPersist[variable] + '\n') diff --git a/openvpn/start.sh b/openvpn/start.sh index 132743b47..dcc2416ac 100755 --- a/openvpn/start.sh +++ b/openvpn/start.sh @@ -124,7 +124,7 @@ echo "${TRANSMISSION_RPC_USERNAME}" > /config/transmission-credentials.txt echo "${TRANSMISSION_RPC_PASSWORD}" >> /config/transmission-credentials.txt # Persist transmission settings for use by transmission-daemon -dockerize -template /etc/transmission/environment-variables.tmpl:/etc/transmission/environment-variables.sh +python3 /etc/openvpn/persistEnvironment.py /etc/transmission/environment-variables.sh TRANSMISSION_CONTROL_OPTS="--script-security 2 --up-delay --up /etc/openvpn/tunnelUp.sh --down /etc/openvpn/tunnelDown.sh" diff --git a/transmission/default-settings.json b/transmission/default-settings.json new file mode 100644 index 000000000..3089d376c --- /dev/null +++ b/transmission/default-settings.json @@ -0,0 +1,75 @@ +{ + "alt-speed-down": 50, + "alt-speed-enabled": false, + "alt-speed-time-begin": 540, + "alt-speed-time-day": 127, + "alt-speed-time-enabled": false, + "alt-speed-time-end": 1020, + "alt-speed-up": 50, + "bind-address-ipv4": "0.0.0.0", + "bind-address-ipv6": "::", + "blocklist-enabled": false, + "blocklist-url": "http://www.example.com/blocklist", + "cache-size-mb": 4, + "dht-enabled": true, + "download-dir": "/data/completed", + "download-limit": 100, + "download-limit-enabled": 0, + "download-queue-enabled": true, + "download-queue-size": 5, + "encryption": 1, + "idle-seeding-limit": 30, + "idle-seeding-limit-enabled": false, + "incomplete-dir": "/data/incomplete", + "incomplete-dir-enabled": true, + "lpd-enabled": false, + "max-peers-global": 240, + "message-level": 2, + "peer-congestion-algorithm": "", + "peer-id-ttl-hours": 6, + "peer-limit-global": 200, + "peer-limit-per-torrent": 50, + "peer-port": 51413, + "peer-port-random-high": 65535, + "peer-port-random-low": 49152, + "peer-port-random-on-start": false, + "peer-socket-tos": "default", + "pex-enabled": true, + "port-forwarding-enabled": false, + "preallocation": 1, + "prefetch-enabled": true, + "queue-stalled-enabled": true, + "queue-stalled-minutes": 30, + "ratio-limit": 2, + "ratio-limit-enabled": false, + "rename-partial-files": true, + "rpc-authentication-required": false, + "rpc-bind-address": "0.0.0.0", + "rpc-enabled": true, + "rpc-host-whitelist": "", + "rpc-host-whitelist-enabled": false, + "rpc-password": "password", + "rpc-port": 9091, + "rpc-url": "/transmission/", + "rpc-username": "username", + "rpc-whitelist": "127.0.0.1,::1", + "rpc-whitelist-enabled": false, + "scrape-paused-torrents-enabled": true, + "script-torrent-done-enabled": false, + "script-torrent-done-filename": "", + "seed-queue-enabled": false, + "seed-queue-size": 10, + "speed-limit-down": 100, + "speed-limit-down-enabled": false, + "speed-limit-up": 100, + "speed-limit-up-enabled": false, + "start-added-torrents": true, + "trash-original-torrent-files": false, + "umask": 2, + "upload-slots-per-torrent": 14, + "utp-enabled": false, + "watch-dir": "/data/watch", + "watch-dir-enabled": true, + "watch-dir-force-generic": false +} + diff --git a/transmission/environment-variables.tmpl b/transmission/environment-variables.tmpl deleted file mode 100644 index 556104793..000000000 --- a/transmission/environment-variables.tmpl +++ /dev/null @@ -1,101 +0,0 @@ -#! /bin/bash -export TRANSMISSION_HOME={{ .Env.TRANSMISSION_HOME }} -export TRANSMISSION_ALT_SPEED_DOWN={{ .Env.TRANSMISSION_ALT_SPEED_DOWN }} -export TRANSMISSION_ALT_SPEED_ENABLED={{ .Env.TRANSMISSION_ALT_SPEED_ENABLED }} -export TRANSMISSION_ALT_SPEED_TIME_BEGIN={{ .Env.TRANSMISSION_ALT_SPEED_TIME_BEGIN }} -export TRANSMISSION_ALT_SPEED_TIME_DAY={{ .Env.TRANSMISSION_ALT_SPEED_TIME_DAY }} -export TRANSMISSION_ALT_SPEED_TIME_ENABLED={{ .Env.TRANSMISSION_ALT_SPEED_TIME_ENABLED }} -export TRANSMISSION_ALT_SPEED_TIME_END={{ .Env.TRANSMISSION_ALT_SPEED_TIME_END }} -export TRANSMISSION_ALT_SPEED_UP={{ .Env.TRANSMISSION_ALT_SPEED_UP }} -export TRANSMISSION_BIND_ADDRESS_IPV4={{ .Env.TRANSMISSION_BIND_ADDRESS_IPV4 }} -export TRANSMISSION_BIND_ADDRESS_IPV6={{ .Env.TRANSMISSION_BIND_ADDRESS_IPV6 }} -export TRANSMISSION_BLOCKLIST_ENABLED={{ .Env.TRANSMISSION_BLOCKLIST_ENABLED }} -export TRANSMISSION_BLOCKLIST_URL={{ .Env.TRANSMISSION_BLOCKLIST_URL }} -export TRANSMISSION_CACHE_SIZE_MB={{ .Env.TRANSMISSION_CACHE_SIZE_MB }} -export TRANSMISSION_DHT_ENABLED={{ .Env.TRANSMISSION_DHT_ENABLED }} -export TRANSMISSION_DOWNLOAD_DIR={{ .Env.TRANSMISSION_DOWNLOAD_DIR }} -export TRANSMISSION_DOWNLOAD_LIMIT={{ .Env.TRANSMISSION_DOWNLOAD_LIMIT }} -export TRANSMISSION_DOWNLOAD_LIMIT_ENABLED={{ .Env.TRANSMISSION_DOWNLOAD_LIMIT_ENABLED }} -export TRANSMISSION_DOWNLOAD_QUEUE_ENABLED={{ .Env.TRANSMISSION_DOWNLOAD_QUEUE_ENABLED }} -export TRANSMISSION_DOWNLOAD_QUEUE_SIZE={{ .Env.TRANSMISSION_DOWNLOAD_QUEUE_SIZE }} -export TRANSMISSION_ENCRYPTION={{ .Env.TRANSMISSION_ENCRYPTION }} -export TRANSMISSION_IDLE_SEEDING_LIMIT={{ .Env.TRANSMISSION_IDLE_SEEDING_LIMIT }} -export TRANSMISSION_IDLE_SEEDING_LIMIT_ENABLED={{ .Env.TRANSMISSION_IDLE_SEEDING_LIMIT_ENABLED }} -export TRANSMISSION_INCOMPLETE_DIR={{ .Env.TRANSMISSION_INCOMPLETE_DIR }} -export TRANSMISSION_INCOMPLETE_DIR_ENABLED={{ .Env.TRANSMISSION_INCOMPLETE_DIR_ENABLED }} -export TRANSMISSION_LPD_ENABLED={{ .Env.TRANSMISSION_LPD_ENABLED }} -export TRANSMISSION_MAX_PEERS_GLOBAL={{ .Env.TRANSMISSION_MAX_PEERS_GLOBAL }} -export TRANSMISSION_MESSAGE_LEVEL={{ .Env.TRANSMISSION_MESSAGE_LEVEL }} -export TRANSMISSION_PEER_CONGESTION_ALGORITHM={{ .Env.TRANSMISSION_PEER_CONGESTION_ALGORITHM }} -export TRANSMISSION_PEER_ID_TTL_HOURS={{ .Env.TRANSMISSION_PEER_ID_TTL_HOURS }} -export TRANSMISSION_PEER_LIMIT_GLOBAL={{ .Env.TRANSMISSION_PEER_LIMIT_GLOBAL }} -export TRANSMISSION_PEER_LIMIT_PER_TORRENT={{ .Env.TRANSMISSION_PEER_LIMIT_PER_TORRENT }} -export TRANSMISSION_PEER_PORT={{ .Env.TRANSMISSION_PEER_PORT }} -export TRANSMISSION_PEER_PORT_RANDOM_HIGH={{ .Env.TRANSMISSION_PEER_PORT_RANDOM_HIGH }} -export TRANSMISSION_PEER_PORT_RANDOM_LOW={{ .Env.TRANSMISSION_PEER_PORT_RANDOM_LOW }} -export TRANSMISSION_PEER_PORT_RANDOM_ON_START={{ .Env.TRANSMISSION_PEER_PORT_RANDOM_ON_START }} -export TRANSMISSION_PEER_SOCKET_TOS={{ .Env.TRANSMISSION_PEER_SOCKET_TOS }} -export TRANSMISSION_PEX_ENABLED={{ .Env.TRANSMISSION_PEX_ENABLED }} -export TRANSMISSION_PORT_FORWARDING_ENABLED={{ .Env.TRANSMISSION_PORT_FORWARDING_ENABLED }} -export TRANSMISSION_PREALLOCATION={{ .Env.TRANSMISSION_PREALLOCATION }} -export TRANSMISSION_PREFETCH_ENABLED={{ .Env.TRANSMISSION_PREFETCH_ENABLED }} -export TRANSMISSION_QUEUE_STALLED_ENABLED={{ .Env.TRANSMISSION_QUEUE_STALLED_ENABLED }} -export TRANSMISSION_QUEUE_STALLED_MINUTES={{ .Env.TRANSMISSION_QUEUE_STALLED_MINUTES }} -export TRANSMISSION_RATIO_LIMIT={{ .Env.TRANSMISSION_RATIO_LIMIT }} -export TRANSMISSION_RATIO_LIMIT_ENABLED={{ .Env.TRANSMISSION_RATIO_LIMIT_ENABLED }} -export TRANSMISSION_RENAME_PARTIAL_FILES={{ .Env.TRANSMISSION_RENAME_PARTIAL_FILES }} -export TRANSMISSION_RPC_AUTHENTICATION_REQUIRED={{ .Env.TRANSMISSION_RPC_AUTHENTICATION_REQUIRED }} -export TRANSMISSION_RPC_BIND_ADDRESS={{ .Env.TRANSMISSION_RPC_BIND_ADDRESS }} -export TRANSMISSION_RPC_ENABLED={{ .Env.TRANSMISSION_RPC_ENABLED }} -export TRANSMISSION_RPC_HOST_WHITELIST={{ .Env.TRANSMISSION_RPC_HOST_WHITELIST }} -export TRANSMISSION_RPC_HOST_WHITELIST_ENABLED={{ .Env.TRANSMISSION_RPC_HOST_WHITELIST_ENABLED }} -export TRANSMISSION_RPC_PASSWORD="{{ .Env.TRANSMISSION_RPC_PASSWORD }}" -export TRANSMISSION_RPC_PORT={{ .Env.TRANSMISSION_RPC_PORT }} -export TRANSMISSION_RPC_URL={{ .Env.TRANSMISSION_RPC_URL }} -export TRANSMISSION_RPC_USERNAME={{ .Env.TRANSMISSION_RPC_USERNAME }} -export TRANSMISSION_RPC_WHITELIST={{ .Env.TRANSMISSION_RPC_WHITELIST }} -export TRANSMISSION_RPC_WHITELIST_ENABLED={{ .Env.TRANSMISSION_RPC_WHITELIST_ENABLED }} -export TRANSMISSION_SCRAPE_PAUSED_TORRENTS_ENABLED={{ .Env.TRANSMISSION_SCRAPE_PAUSED_TORRENTS_ENABLED }} -export TRANSMISSION_SCRIPT_TORRENT_DONE_ENABLED={{ .Env.TRANSMISSION_SCRIPT_TORRENT_DONE_ENABLED }} -export TRANSMISSION_SCRIPT_TORRENT_DONE_FILENAME={{ .Env.TRANSMISSION_SCRIPT_TORRENT_DONE_FILENAME }} -export TRANSMISSION_SEED_QUEUE_ENABLED={{ .Env.TRANSMISSION_SEED_QUEUE_ENABLED }} -export TRANSMISSION_SEED_QUEUE_SIZE={{ .Env.TRANSMISSION_SEED_QUEUE_SIZE }} -export TRANSMISSION_SPEED_LIMIT_DOWN={{ .Env.TRANSMISSION_SPEED_LIMIT_DOWN }} -export TRANSMISSION_SPEED_LIMIT_DOWN_ENABLED={{ .Env.TRANSMISSION_SPEED_LIMIT_DOWN_ENABLED }} -export TRANSMISSION_SPEED_LIMIT_UP={{ .Env.TRANSMISSION_SPEED_LIMIT_UP }} -export TRANSMISSION_SPEED_LIMIT_UP_ENABLED={{ .Env.TRANSMISSION_SPEED_LIMIT_UP_ENABLED }} -export TRANSMISSION_START_ADDED_TORRENTS={{ .Env.TRANSMISSION_START_ADDED_TORRENTS }} -export TRANSMISSION_TRASH_ORIGINAL_TORRENT_FILES={{ .Env.TRANSMISSION_TRASH_ORIGINAL_TORRENT_FILES }} -export TRANSMISSION_UMASK={{ .Env.TRANSMISSION_UMASK }} -export TRANSMISSION_UPLOAD_SLOTS_PER_TORRENT={{ .Env.TRANSMISSION_UPLOAD_SLOTS_PER_TORRENT }} -export TRANSMISSION_UTP_ENABLED={{ .Env.TRANSMISSION_UTP_ENABLED }} -export TRANSMISSION_WATCH_DIR={{ .Env.TRANSMISSION_WATCH_DIR }} -export TRANSMISSION_WATCH_DIR_ENABLED={{ .Env.TRANSMISSION_WATCH_DIR_ENABLED }} -export TRANSMISSION_WATCH_DIR_FORCE_GENERIC={{ .Env.TRANSMISSION_WATCH_DIR_FORCE_GENERIC }} - -# Transmission needs to know which VPN provider is used -export OPENVPN_PROVIDER={{ .Env.OPENVPN_PROVIDER }} - -export ENABLE_UFW={{ .Env.ENABLE_UFW }} -export TRANSMISSION_WEB_UI={{ .Env.TRANSMISSION_WEB_UI }} - -export PUID={{ .Env.PUID }} -export PGID={{ .Env.PGID }} - -# Need to pass through our tinyproxy settings -export WEBPROXY_ENABLED={{ .Env.WEBPROXY_ENABLED }} -export WEBPROXY_PORT={{ .Env.WEBPROXY_PORT }} -export WEBPROXY_USERNAME={{ .Env.WEBPROXY_USERNAME }} -export WEBPROXY_PASSWORD="{{ .Env.WEBPROXY_PASSWORD }}" - -# Support custom web frontend -{{ if .Env.TRANSMISSION_WEB_HOME }} export TRANSMISSION_WEB_HOME={{ .Env.TRANSMISSION_WEB_HOME }} {{end}} - -# Support dropping the default route after connection -export DROP_DEFAULT_ROUTE={{ .Env.DROP_DEFAULT_ROUTE }} - -# Support using transmission ids for transmission paths -export GLOBAL_APPLY_PERMISSIONS={{ .Env.GLOBAL_APPLY_PERMISSIONS }} - -#Support logging to docker logs -export DOCKER_LOG={{ .Env.DOCKER_LOG }} diff --git a/transmission/settings.tmpl b/transmission/settings.tmpl deleted file mode 100644 index 92fd42de0..000000000 --- a/transmission/settings.tmpl +++ /dev/null @@ -1,75 +0,0 @@ -{ - "alt-speed-down": {{ .Env.TRANSMISSION_ALT_SPEED_DOWN }}, - "alt-speed-enabled": {{ .Env.TRANSMISSION_ALT_SPEED_ENABLED }}, - "alt-speed-time-begin": {{ .Env.TRANSMISSION_ALT_SPEED_TIME_BEGIN }}, - "alt-speed-time-day": {{ .Env.TRANSMISSION_ALT_SPEED_TIME_DAY }}, - "alt-speed-time-enabled": {{ .Env.TRANSMISSION_ALT_SPEED_TIME_ENABLED }}, - "alt-speed-time-end": {{ .Env.TRANSMISSION_ALT_SPEED_TIME_END }}, - "alt-speed-up": {{ .Env.TRANSMISSION_ALT_SPEED_UP }}, - "bind-address-ipv4": "{{ .Env.TRANSMISSION_BIND_ADDRESS_IPV4 }}", - "bind-address-ipv6": "{{ .Env.TRANSMISSION_BIND_ADDRESS_IPV6 }}", - "blocklist-enabled": {{ .Env.TRANSMISSION_BLOCKLIST_ENABLED }}, - "blocklist-url": "{{ .Env.TRANSMISSION_BLOCKLIST_URL }}", - "cache-size-mb": {{ .Env.TRANSMISSION_CACHE_SIZE_MB }}, - "dht-enabled": {{ .Env.TRANSMISSION_DHT_ENABLED }}, - "download-dir": "{{ .Env.TRANSMISSION_DOWNLOAD_DIR }}", - "download-limit": {{ .Env.TRANSMISSION_DOWNLOAD_LIMIT }}, - "download-limit-enabled": {{ .Env.TRANSMISSION_DOWNLOAD_LIMIT_ENABLED }}, - "download-queue-enabled": {{ .Env.TRANSMISSION_DOWNLOAD_QUEUE_ENABLED }}, - "download-queue-size": {{ .Env.TRANSMISSION_DOWNLOAD_QUEUE_SIZE }}, - "encryption": {{ .Env.TRANSMISSION_ENCRYPTION }}, - "idle-seeding-limit": {{ .Env.TRANSMISSION_IDLE_SEEDING_LIMIT }}, - "idle-seeding-limit-enabled": {{ .Env.TRANSMISSION_IDLE_SEEDING_LIMIT_ENABLED }}, - "incomplete-dir": "{{ .Env.TRANSMISSION_INCOMPLETE_DIR }}", - "incomplete-dir-enabled": {{ .Env.TRANSMISSION_INCOMPLETE_DIR_ENABLED }}, - "lpd-enabled": {{ .Env.TRANSMISSION_LPD_ENABLED }}, - "max-peers-global": {{ .Env.TRANSMISSION_MAX_PEERS_GLOBAL }}, - "message-level": {{ .Env.TRANSMISSION_MESSAGE_LEVEL }}, - "peer-congestion-algorithm": "{{ .Env.TRANSMISSION_PEER_CONGESTION_ALGORITHM }}", - "peer-id-ttl-hours": {{ .Env.TRANSMISSION_PEER_ID_TTL_HOURS }}, - "peer-limit-global": {{ .Env.TRANSMISSION_PEER_LIMIT_GLOBAL }}, - "peer-limit-per-torrent": {{ .Env.TRANSMISSION_PEER_LIMIT_PER_TORRENT }}, - "peer-port": {{ .Env.TRANSMISSION_PEER_PORT }}, - "peer-port-random-high": {{ .Env.TRANSMISSION_PEER_PORT_RANDOM_HIGH }}, - "peer-port-random-low": {{ .Env.TRANSMISSION_PEER_PORT_RANDOM_LOW }}, - "peer-port-random-on-start": {{ .Env.TRANSMISSION_PEER_PORT_RANDOM_ON_START }}, - "peer-socket-tos": "{{ .Env.TRANSMISSION_PEER_SOCKET_TOS }}", - "pex-enabled": {{ .Env.TRANSMISSION_PEX_ENABLED }}, - "port-forwarding-enabled": {{ .Env.TRANSMISSION_PORT_FORWARDING_ENABLED }}, - "preallocation": {{ .Env.TRANSMISSION_PREALLOCATION }}, - "prefetch-enabled": {{ .Env.TRANSMISSION_PREFETCH_ENABLED }}, - "queue-stalled-enabled": {{ .Env.TRANSMISSION_QUEUE_STALLED_ENABLED }}, - "queue-stalled-minutes": {{ .Env.TRANSMISSION_QUEUE_STALLED_MINUTES }}, - "ratio-limit": {{ .Env.TRANSMISSION_RATIO_LIMIT }}, - "ratio-limit-enabled": {{ .Env.TRANSMISSION_RATIO_LIMIT_ENABLED }}, - "rename-partial-files": {{ .Env.TRANSMISSION_RENAME_PARTIAL_FILES }}, - "rpc-authentication-required": {{ .Env.TRANSMISSION_RPC_AUTHENTICATION_REQUIRED }}, - "rpc-bind-address": "{{ .Env.TRANSMISSION_RPC_BIND_ADDRESS }}", - "rpc-enabled": {{ .Env.TRANSMISSION_RPC_ENABLED }}, - "rpc-host-whitelist": "{{ .Env.TRANSMISSION_RPC_HOST_WHITELIST }}", - "rpc-host-whitelist-enabled": {{ .Env.TRANSMISSION_RPC_HOST_WHITELIST_ENABLED }}, - "rpc-password": "{{ .Env.TRANSMISSION_RPC_PASSWORD }}", - "rpc-port": {{ .Env.TRANSMISSION_RPC_PORT }}, - "rpc-url": "{{ .Env.TRANSMISSION_RPC_URL }}", - "rpc-username": "{{ .Env.TRANSMISSION_RPC_USERNAME }}", - "rpc-whitelist": "{{ .Env.TRANSMISSION_RPC_WHITELIST }}", - "rpc-whitelist-enabled": {{ .Env.TRANSMISSION_RPC_WHITELIST_ENABLED }}, - "scrape-paused-torrents-enabled": {{ .Env.TRANSMISSION_SCRAPE_PAUSED_TORRENTS_ENABLED }}, - "script-torrent-done-enabled": {{ .Env.TRANSMISSION_SCRIPT_TORRENT_DONE_ENABLED }}, - "script-torrent-done-filename": "{{ .Env.TRANSMISSION_SCRIPT_TORRENT_DONE_FILENAME }}", - "seed-queue-enabled": {{ .Env.TRANSMISSION_SEED_QUEUE_ENABLED }}, - "seed-queue-size": {{ .Env.TRANSMISSION_SEED_QUEUE_SIZE }}, - "speed-limit-down": {{ .Env.TRANSMISSION_SPEED_LIMIT_DOWN }}, - "speed-limit-down-enabled": {{ .Env.TRANSMISSION_SPEED_LIMIT_DOWN_ENABLED }}, - "speed-limit-up": {{ .Env.TRANSMISSION_SPEED_LIMIT_UP }}, - "speed-limit-up-enabled": {{ .Env.TRANSMISSION_SPEED_LIMIT_UP_ENABLED }}, - "start-added-torrents": {{ .Env.TRANSMISSION_START_ADDED_TORRENTS }}, - "trash-original-torrent-files": {{ .Env.TRANSMISSION_TRASH_ORIGINAL_TORRENT_FILES }}, - "umask": {{ .Env.TRANSMISSION_UMASK }}, - "upload-slots-per-torrent": {{ .Env.TRANSMISSION_UPLOAD_SLOTS_PER_TORRENT }}, - "utp-enabled": {{ .Env.TRANSMISSION_UTP_ENABLED }}, - "watch-dir": "{{ .Env.TRANSMISSION_WATCH_DIR }}", - "watch-dir-enabled": {{ .Env.TRANSMISSION_WATCH_DIR_ENABLED }}, - "watch-dir-force-generic": {{ .Env.TRANSMISSION_WATCH_DIR_FORCE_GENERIC }} -} - diff --git a/transmission/start.sh b/transmission/start.sh index b97734530..a9d5bcec6 100755 --- a/transmission/start.sh +++ b/transmission/start.sh @@ -1,5 +1,8 @@ #!/bin/bash +# Fail script on errors +set -e + # Source our persisted env variables from container startup . /etc/transmission/environment-variables.sh @@ -39,10 +42,10 @@ if [[ "transmission-web-control" = "$TRANSMISSION_WEB_UI" ]]; then export TRANSMISSION_WEB_HOME=/opt/transmission-ui/transmission-web-control fi -echo "Generating transmission settings.json from env variables" +echo "Updating Transmission settings.json with values from env variables" # Ensure TRANSMISSION_HOME is created mkdir -p ${TRANSMISSION_HOME} -dockerize -template /etc/transmission/settings.tmpl:${TRANSMISSION_HOME}/settings.json +python3 /etc/transmission/updateSettings.py /etc/transmission/default-settings.json ${TRANSMISSION_HOME}/settings.json echo "sed'ing True to true" sed -i 's/True/true/g' ${TRANSMISSION_HOME}/settings.json diff --git a/transmission/stop.sh b/transmission/stop.sh index 0db720484..41760dd69 100755 --- a/transmission/stop.sh +++ b/transmission/stop.sh @@ -8,7 +8,14 @@ then echo "/scripts/transmission-pre-stop.sh returned $?" fi -kill $(pidof transmission-daemon) +echo "Sending kill signal to transmission-daemon" +PID=$(pidof transmission-daemon) +kill $PID +# Give transmission-daemon time to shut down +for i in {1..10}; do + ps -p $PID &> /dev/null || break + sleep .2 +done # If transmission-post-stop.sh exists, run it if [[ -x /scripts/transmission-post-stop.sh ]] diff --git a/transmission/updateSettings.py b/transmission/updateSettings.py new file mode 100644 index 000000000..332db1025 --- /dev/null +++ b/transmission/updateSettings.py @@ -0,0 +1,37 @@ +import os +import sys +import json + + +# Verify script arguments +if len(sys.argv) != 3: + sys.exit('Invalid number of arguments. Usage:\n updateSettings.py defaultSettingsFile.json outputSettingsFile.json') + +default_settings = sys.argv[1] +transmission_settings = sys.argv[2] + +if not os.path.isfile(default_settings): + sys.exit('Invalid arguments, default settings file does not exist') + +# Define which file to base the config on +if os.path.isfile(transmission_settings): + configuration_baseline=transmission_settings +else: + configuration_baseline=default_settings + +print('Using config baseline ' + configuration_baseline) + +# Read config base +with open(configuration_baseline, 'r') as f: + settings_dict = json.load(f) + +# For each setting, check if an environment variable is set to override it +for setting in settings_dict: + setting_env_name = 'TRANSMISSION_' + setting.upper().replace('-', '_') + if setting_env_name in os.environ: + print('Overriding ' + setting + ' because ' + setting_env_name + ' is set to ' + os.environ.get(setting_env_name)) + settings_dict[setting] = os.environ.get(setting_env_name) + +# Dump resulting settings to file +with open(transmission_settings, 'w') as fp: + json.dump(settings_dict, fp) From 83b6e26446b70c2c721188cfb825eb71ecf63ecb Mon Sep 17 00:00:00 2001 From: Thomas Borgen Date: Sun, 9 Aug 2020 23:02:56 +0200 Subject: [PATCH 2/8] removes unused json import, replaces sys calls with argparse. renames variables with snake case. use preffered .format for string formatting --- openvpn/persistEnvironment.py | 56 ++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/openvpn/persistEnvironment.py b/openvpn/persistEnvironment.py index 9e4b97c72..07c87878e 100644 --- a/openvpn/persistEnvironment.py +++ b/openvpn/persistEnvironment.py @@ -1,30 +1,44 @@ +import argparse import os -import sys -import json +parser = argparse.ArgumentParser( + description='Store env vars into runnable .sh file with export statements', +) +parser.add_argument( + 'env_var_script_file', + type=str, + help='Path to variables-script.sh', +) -# Verify script arguments -if len(sys.argv) != 2: - sys.exit( - 'Invalid number of arguments. Usage:\n persistEnvironment.py /path/to/varibles-script.sh') +args = parser.parse_args() -envVarsScriptFile = sys.argv[1] +wanted_variables = { + 'OPENVPN_PROVIDER', + 'ENABLE_UFW', + 'PUID', + 'PGID', + 'DROP_DEFAULT_ROUTE', + 'GLOBAL_APPLY_PERMISSIONS', + 'DOCKER_LOG', +} -wantedVariables = ['OPENVPN_PROVIDER', 'ENABLE_UFW', 'PUID', 'PGID', 'DROP_DEFAULT_ROUTE', 'GLOBAL_APPLY_PERMISSIONS', 'DOCKER_LOG'] +variables_to_persist = {} -variablesToPersist = {} - -for variable in os.environ: - if variable.startswith('TRANSMISSION_'): - variablesToPersist[variable] = os.environ.get(variable) - if variable.startswith('WEBPROXY_'): - variablesToPersist[variable] = os.environ.get(variable) - if variable in wantedVariables: - variablesToPersist[variable] = os.environ.get(variable) +for env_var in os.environ: + if env_var.startswith('TRANSMISSION_'): + variables_to_persist[env_var] = os.environ.get(env_var) + elif env_var.startswith('WEBPROXY_'): + variables_to_persist[env_var] = os.environ.get(env_var) + elif env_var in wanted_variables: + variables_to_persist[env_var] = os.environ.get(env_var) # Dump resulting settings to file -with open(envVarsScriptFile, 'w') as file: - for variable in variablesToPersist: - file.write('export ' + variable + '=' + - variablesToPersist[variable] + '\n') +with open(args.env_var_script_file, 'w') as script_file: + for var_name, var_value in variables_to_persist.items(): + script_file.write( + 'export {env_var} = {env_var_value}\n'.format( + env_var=var_name, + env_var_value=var_value, + ), + ) From d46fd7631cef079e1ee84a2bdd911493c0b24637 Mon Sep 17 00:00:00 2001 From: Thomas Borgen Date: Sun, 9 Aug 2020 23:12:17 +0200 Subject: [PATCH 3/8] replace calls to sys for arguments with argparse --- transmission/updateSettings.py | 38 ++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/transmission/updateSettings.py b/transmission/updateSettings.py index 332db1025..80ba516be 100644 --- a/transmission/updateSettings.py +++ b/transmission/updateSettings.py @@ -1,23 +1,43 @@ +import argparse +import json import os import sys -import json -# Verify script arguments -if len(sys.argv) != 3: - sys.exit('Invalid number of arguments. Usage:\n updateSettings.py defaultSettingsFile.json outputSettingsFile.json') +parser = argparse.ArgumentParser( + description='Updates output settings file based on a default file', +) -default_settings = sys.argv[1] -transmission_settings = sys.argv[2] +parser.add_argument( + 'input_file', + type=str, + help='Path to default settings json file', +) +parser.add_argument( + 'output_file', + type=str, + help='Path to output settings json file', +) + +args = parser.parse_args() +default_settings = args.input_file +transmission_settings = args.output_file + +# Fail if default settings file doesnt exist. if not os.path.isfile(default_settings): - sys.exit('Invalid arguments, default settings file does not exist') + sys.exit( + 'Invalid arguments, default settings file{file} does not exist'.format( + file=default_settings, + ), + ) + # Define which file to base the config on if os.path.isfile(transmission_settings): - configuration_baseline=transmission_settings + configuration_baseline = transmission_settings else: - configuration_baseline=default_settings + configuration_baseline = default_settings print('Using config baseline ' + configuration_baseline) From c02e6c08cc00b733fe07dd84415d1c5d1abdc16d Mon Sep 17 00:00:00 2001 From: Thomas Borgen Date: Sun, 9 Aug 2020 23:26:34 +0200 Subject: [PATCH 4/8] some cleanup --- transmission/updateSettings.py | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/transmission/updateSettings.py b/transmission/updateSettings.py index 80ba516be..4bb81efb8 100644 --- a/transmission/updateSettings.py +++ b/transmission/updateSettings.py @@ -3,7 +3,6 @@ import json import os import sys - parser = argparse.ArgumentParser( description='Updates output settings file based on a default file', ) @@ -39,18 +38,33 @@ if os.path.isfile(transmission_settings): else: configuration_baseline = default_settings -print('Using config baseline ' + configuration_baseline) +print('Using config baseline', configuration_baseline) # Read config base -with open(configuration_baseline, 'r') as f: - settings_dict = json.load(f) +with open(configuration_baseline, 'r') as input_file: + settings_dict = json.load(input_file) + + +def setting_as_env(setting: str) -> str: + """Get a transmission settings environment variable name.""" + return 'TRANSMISSION_{setting}'.format( + setting=setting.upper().replace('-', '_'), + ) + # For each setting, check if an environment variable is set to override it for setting in settings_dict: - setting_env_name = 'TRANSMISSION_' + setting.upper().replace('-', '_') + setting_env_name = setting_as_env(setting) if setting_env_name in os.environ: - print('Overriding ' + setting + ' because ' + setting_env_name + ' is set to ' + os.environ.get(setting_env_name)) - settings_dict[setting] = os.environ.get(setting_env_name) + env_value = os.environ.get(setting_env_name) + print( + 'Overriding {setting} because {env_name} is set to {value}'.format( + setting=setting, + env_name=setting_env_name, + value=env_value, + ), + ) + settings_dict[setting] = env_value # Dump resulting settings to file with open(transmission_settings, 'w') as fp: From f5a305bb8e39da584b55b4ea8bdc6db967194dee Mon Sep 17 00:00:00 2001 From: Kristian Haugene Date: Sat, 22 Aug 2020 15:24:12 +0200 Subject: [PATCH 5/8] Move port forwarding scripts into provider folders, unify call and fix export syntax of environment variables --- .../perfectprivacy/update-port.sh | 0 openvpn/persistEnvironment.py | 2 +- .../pia/update-port.sh | 0 .../privatevpn/update-port.sh | 0 transmission/start.sh | 22 +++++-------------- 5 files changed, 6 insertions(+), 18 deletions(-) rename transmission/updatePPPort.sh => openvpn/perfectprivacy/update-port.sh (100%) rename transmission/updatePort.sh => openvpn/pia/update-port.sh (100%) rename transmission/updatePrivateVPNPort.sh => openvpn/privatevpn/update-port.sh (100%) diff --git a/transmission/updatePPPort.sh b/openvpn/perfectprivacy/update-port.sh similarity index 100% rename from transmission/updatePPPort.sh rename to openvpn/perfectprivacy/update-port.sh diff --git a/openvpn/persistEnvironment.py b/openvpn/persistEnvironment.py index 07c87878e..14c36ffd8 100644 --- a/openvpn/persistEnvironment.py +++ b/openvpn/persistEnvironment.py @@ -37,7 +37,7 @@ for env_var in os.environ: with open(args.env_var_script_file, 'w') as script_file: for var_name, var_value in variables_to_persist.items(): script_file.write( - 'export {env_var} = {env_var_value}\n'.format( + 'export {env_var}={env_var_value}\n'.format( env_var=var_name, env_var_value=var_value, ), diff --git a/transmission/updatePort.sh b/openvpn/pia/update-port.sh similarity index 100% rename from transmission/updatePort.sh rename to openvpn/pia/update-port.sh diff --git a/transmission/updatePrivateVPNPort.sh b/openvpn/privatevpn/update-port.sh similarity index 100% rename from transmission/updatePrivateVPNPort.sh rename to openvpn/privatevpn/update-port.sh diff --git a/transmission/start.sh b/transmission/start.sh index a9d5bcec6..c348ed53f 100755 --- a/transmission/start.sh +++ b/transmission/start.sh @@ -1,8 +1,5 @@ #!/bin/bash -# Fail script on errors -set -e - # Source our persisted env variables from container startup . /etc/transmission/environment-variables.sh @@ -72,20 +69,11 @@ fi echo "STARTING TRANSMISSION" exec su --preserve-environment ${RUN_AS} -s /bin/bash -c "/usr/bin/transmission-daemon -g ${TRANSMISSION_HOME} --logfile $LOGFILE" & -if [[ "${OPENVPN_PROVIDER^^}" = "PIA" ]] -then - echo "CONFIGURING PORT FORWARDING" - exec /etc/transmission/updatePort.sh & -elif [[ "${OPENVPN_PROVIDER^^}" = "PERFECTPRIVACY" ]] -then - echo "CONFIGURING PORT FORWARDING" - exec /etc/transmission/updatePPPort.sh ${TRANSMISSION_BIND_ADDRESS_IPV4} & -elif [[ "${OPENVPN_PROVIDER^^}" = "PRIVATEVPN" ]] -then - echo "CONFIGURING PORT FORWARDING" - exec /etc/transmission/updatePrivateVPNPort.sh & -else - echo "NO PORT UPDATER FOR THIS PROVIDER" +# Configure port forwarding if applicable +if [[ -x /etc/openvpn/${OPENVPN_PROVIDER,,}/update-port.sh && -z $DISABLE_PORT_UPDATER ]]; then + echo "Provider ${OPENVPN_PROVIDER^^} has a script for automatic port forwarding. Will run it now." + echo "If you want to disable this, set environment variable DISABLE_PORT_UPDATER=yes" + exec /etc/openvpn/${OPENVPN_PROVIDER,,}/update-port.sh & fi # If transmission-post-start.sh exists, run it From 07484454004150a3104d3db3fec7e021c1b8054f Mon Sep 17 00:00:00 2001 From: Kristian Haugene Date: Sat, 22 Aug 2020 15:24:42 +0200 Subject: [PATCH 6/8] Read from sourced environment variables instead of argument --- openvpn/perfectprivacy/update-port.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openvpn/perfectprivacy/update-port.sh b/openvpn/perfectprivacy/update-port.sh index 27f642f1e..4c6c2f7b9 100755 --- a/openvpn/perfectprivacy/update-port.sh +++ b/openvpn/perfectprivacy/update-port.sh @@ -12,7 +12,7 @@ transmission_settings_file=${TRANSMISSION_HOME}/settings.json # Calculate the port -IPADDRESS=$1 +IPADDRESS=$TRANSMISSION_BIND_ADDRESS_IPV4 echo "ipAddress to calculate port from $IPADDRESS" oct3=$(echo ${IPADDRESS} | tr "." " " | awk '{ print $3 }') oct4=$(echo ${IPADDRESS} | tr "." " " | awk '{ print $4 }') From d763ba4a335d5edc3cc471c0990b5efcfed7d759 Mon Sep 17 00:00:00 2001 From: Kristian Haugene Date: Sat, 22 Aug 2020 15:34:34 +0200 Subject: [PATCH 7/8] Need to persist new bind address for perfect privacy script --- transmission/start.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/transmission/start.sh b/transmission/start.sh index c348ed53f..0970f54b3 100755 --- a/transmission/start.sh +++ b/transmission/start.sh @@ -23,6 +23,9 @@ fi echo "Updating TRANSMISSION_BIND_ADDRESS_IPV4 to the ip of $1 : $4" export TRANSMISSION_BIND_ADDRESS_IPV4=$4 +# Also update the persisted settings in case it is already set. First remove any old value, then add new. +sed -i '/TRANSMISSION_BIND_ADDRESS_IPV4/d' /etc/transmission/environment-variables.sh +echo "export TRANSMISSION_BIND_ADDRESS_IPV4=$4" >> /etc/transmission/environment-variables.sh if [[ "combustion" = "$TRANSMISSION_WEB_UI" ]]; then echo "Using Combustion UI, overriding TRANSMISSION_WEB_HOME" From 26fc8843fb9f09180063e350a86f985885bbe6e3 Mon Sep 17 00:00:00 2001 From: Kristian Haugene Date: Sat, 22 Aug 2020 15:56:12 +0200 Subject: [PATCH 8/8] Better logging --- transmission/updateSettings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/transmission/updateSettings.py b/transmission/updateSettings.py index 4bb81efb8..d5a30e48c 100644 --- a/transmission/updateSettings.py +++ b/transmission/updateSettings.py @@ -35,10 +35,10 @@ if not os.path.isfile(default_settings): # Define which file to base the config on if os.path.isfile(transmission_settings): configuration_baseline = transmission_settings + print('Using existing settings.json for Transmission', transmission_settings) else: configuration_baseline = default_settings - -print('Using config baseline', configuration_baseline) + print('Generating settings.json for Transmission from environment and defaults', default_settings) # Read config base with open(configuration_baseline, 'r') as input_file: