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