Merge pull request #1323 from haugene/feature/persistent-settings
WIP: Persistent settings and drop dockerize
This commit is contained in:
		
							
								
								
									
										82
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								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 | ||||
|   | ||||
| @@ -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 }') | ||||
							
								
								
									
										44
									
								
								openvpn/persistEnvironment.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								openvpn/persistEnvironment.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| import argparse | ||||
| import os | ||||
|  | ||||
| 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', | ||||
| ) | ||||
|  | ||||
| args = parser.parse_args() | ||||
|  | ||||
| wanted_variables = { | ||||
|     'OPENVPN_PROVIDER', | ||||
|     'ENABLE_UFW', | ||||
|     'PUID', | ||||
|     'PGID', | ||||
|     'DROP_DEFAULT_ROUTE', | ||||
|     'GLOBAL_APPLY_PERMISSIONS', | ||||
|     'DOCKER_LOG', | ||||
| } | ||||
|  | ||||
| variables_to_persist = {} | ||||
|  | ||||
| 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(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, | ||||
|             ), | ||||
|         ) | ||||
| @@ -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" | ||||
|  | ||||
|   | ||||
							
								
								
									
										75
									
								
								transmission/default-settings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								transmission/default-settings.json
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| } | ||||
|  | ||||
| @@ -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 }} | ||||
| @@ -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 }} | ||||
| } | ||||
|  | ||||
| @@ -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" | ||||
| @@ -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 | ||||
| @@ -69,20 +72,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 | ||||
|   | ||||
| @@ -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 ]] | ||||
|   | ||||
							
								
								
									
										71
									
								
								transmission/updateSettings.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								transmission/updateSettings.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| import argparse | ||||
| import json | ||||
| import os | ||||
| import sys | ||||
|  | ||||
| parser = argparse.ArgumentParser( | ||||
|     description='Updates output settings file based on a default file', | ||||
| ) | ||||
|  | ||||
| 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{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 | ||||
|     print('Using existing settings.json for Transmission', transmission_settings) | ||||
| else: | ||||
|     configuration_baseline = default_settings | ||||
|     print('Generating settings.json for Transmission from environment and defaults', default_settings) | ||||
|  | ||||
| # Read config base | ||||
| 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 = setting_as_env(setting) | ||||
|     if setting_env_name in os.environ: | ||||
|         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: | ||||
|     json.dump(settings_dict, fp) | ||||
		Reference in New Issue
	
	Block a user