This commit is contained in:
Alexandre
2020-12-07 15:48:35 +01:00
parent f7166ad259
commit 32204d4d5b
29 changed files with 117 additions and 194 deletions

127
transmission/DOCS.md Normal file
View File

@@ -0,0 +1,127 @@
# Transmission addon for Hass.io
The torrent client for Hass.io with OpenVPN support.
## Installation
The installation of this add-on is pretty straightforward and not different in
comparison to installing any other Hass.io add-on.
1. Add https://github.com/pierrickrouxel/hassio-addon-transmission.git to your Hass.io instance as a repository.
1. Install the "Transmission" add-on.
1. Start the "Transmission" add-on.
1. Check the logs of the "Tranmission" to see if everything went well.
1. Open the web-ui
## Configuration
**Note**: _Remember to restart the add-on when the configuration is changed._
Transmission add-on configuration:
```json
{
"log_level": "info",
"authentication_required": false,
"username": "",
"password": "",
"openvpn_enabled": false,
"openvpn_config": "",
"openvpn_username": "",
"openvpn_password": ""
}
```
### Option: `log_level`
The `log_level` option controls the level of log output by the addon and can
be changed to be more or less verbose, which might be useful when you are
dealing with an unknown issue. Possible values are:
- `trace`: Show every detail, like all called internal functions.
- `debug`: Shows detailed debug information.
- `info`: Normal (usually) interesting events.
- `warning`: Exceptional occurrences that are not errors.
- `error`: Runtime errors that do not require immediate action.
- `fatal`: Something went terribly wrong. Add-on becomes unusable.
Please note that each level automatically includes log messages from a
more severe level, e.g., `debug` also shows `info` messages. By default,
the `log_level` is set to `info`, which is the recommended setting unless
you are troubleshooting.
### Option: `authentication_required`
This option can be used to password protect the web-ui.
### Option: `username`
The username for authentication.
### Option: `password`
The password for authentication.
### Option: `openvpn_enabled`
Enable OpenVPN to anonymize your torrent activity.
### Option: `openvpn_config`
The name of .ovpn file. You should put it in `/config/openvpn`.
### Option: `openvpn_username`
Your OpenVPN username.
### Option: `openvpn_password`
Your OpenVPN password.
## Embedding into Home Assistant
This addon supports ingress, thus it can simply be integrated into Home Assistant without having to forward any additional ports. Here is an example configuration:
```yaml
transmission:
host: f6fddefc-transmission
```
If you want, you can add an icon to the sidebar by toggling *Show in Sidebar* as well.
## Changelog & Releases
The format of the log is based on
[Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
Releases are based on [Semantic Versioning](http://semver.org/spec/v2.0.0.html), and use the format
of ``MAJOR.MINOR.PATCH``. In a nutshell, the version will be incremented
based on the following:
- ``MAJOR``: Incompatible or major changes.
- ``MINOR``: Backwards-compatible new features and enhancements.
- ``PATCH``: Backwards-compatible bugfixes and package updates.
## License
MIT License
Copyright (c) 2018 Pierrick Rouxel
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,6 +1,59 @@
FROM linuxserver/transmission
ARG BUILD_FROM=hassioaddons/base:8.0.1
# hadolint ignore=DL3006
FROM ${BUILD_FROM}
# MOFIFY DATA PATH
RUN sed -i "s|config|data|g" /etc/services.d/transmission/run
# Copy root filesystem
COPY rootfs /
VOLUME [ "/data" ]
# Setup base
RUN apk add --no-cache \
coreutils \
nginx \
transmission-daemon \
openvpn
# Small hack needed for ingress support
#
# Transmission always uses "transmission" as a subdirectory in the URL, so the web interface can for instance be found at:
#
# http://<server>/transmission/web/
#
# The same goes for the RPC API, which is exposed under /transmission/rpc. When using ingress, this is not the case however
# and "transmission" directory is not part of the URL. So transmission is basically served under the root (/), e.g.:
#
# http://10.0.10.110:8123/api/hassio_ingress/rQEi5X4zJFTmZ82ghplDjsx2AoK3r2lqx0zZHHjZ69Q/
#
# As the web UI uses a relative path when resolving the RPC endpoint, it basically becomes:
#
# http://10.0.10.110:8123/api/hassio_ingress/rQEi5X4zJFTmZ82ghplDjsx2AoK3r2lqx0zZHHjZ69Q/../rpc
#
# which obviously is:
#
# http://10.0.10.110:8123/api/hassio_ingress
#
# This will not work. The sed statement below changes the way the RPC endpoint is determined by keeping the regular endpoint
# when accessing transmission as usual, but stripping the relative part when using ingress.
RUN sed -i 's|'"'"'\.\./rpc'"'"'|window.location.pathname.endsWith("/web/") ? "../rpc" : "rpc"|' /usr/share/transmission/web/javascript/remote.js
# Build arugments
ARG BUILD_ARCH
ARG BUILD_DATE
ARG BUILD_REF
ARG BUILD_VERSION
# Labels
LABEL \
io.hass.name="Transmission" \
io.hass.description="The torrent client for Hass.io with OpenVPN support" \
io.hass.arch="${BUILD_ARCH}" \
io.hass.type="addon" \
io.hass.version=${BUILD_VERSION} \
maintainer="Pierrick Rouxel <pierrickrouxel@addons.community>" \
org.label-schema.description="The torrent client for Hass.io" \
org.label-schema.build-date=${BUILD_DATE} \
org.label-schema.name="Transmission" \
org.label-schema.schema-version="1.0" \
org.label-schema.url="https://github.com/pierrickrouxel" \
org.label-schema.usage="https://github.com/pierrickrouxel/hassio-addon-transmission/tree/master/README.md" \
org.label-schema.vcs-ref=${BUILD_REF} \
org.label-schema.vcs-url="https://github.com/pierrickrouxel" \
org.label-schema.vendor="Community Hass.io Addons"

View File

@@ -1,32 +0,0 @@
# Marcelveldt's Hassio Add-ons: Radarr
## About
Radarr add-on based on the prebuilt docker image from linuxserver
Radarr - A fork of Sonarr to work with movies à la Couchpotato.
## Installation
The installation of this add-on is pretty straightforward and not different in
comparison to installing any other Hass.io add-on.
1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance.
1. Install this add-on.
1. Click the `Save` button to store your configuration.
1. Start the add-on.
1. Check the logs of the add-on to see if everything went well.
1. Carefully configure the add-on to your preferences, see the official documentation for for that.
## Configuration
Webui can be found at <your-ip>:7878
By default hassio folders backup, share and ssl are available within the addon.
You can use the share folder to access/store your media files.
Documentation for Radarr: https://github.com/Radarr/Radarr
[repository]: https://github.com/marcelveldt/hassio-addons-repo

11
transmission/build.json Normal file
View File

@@ -0,0 +1,11 @@
{
"squash": false,
"build_from": {
"aarch64": "hassioaddons/base-aarch64:8.0.1",
"amd64": "hassioaddons/base-amd64:8.0.1",
"armhf": "hassioaddons/base-armhf:8.0.1",
"armv7": "hassioaddons/base-armv7:8.0.1",
"i386": "hassioaddons/base-i386:8.0.1"
},
"args": {}
}

View File

@@ -1,39 +1,65 @@
{
"name": "Transmission without vpn",
"version": "latest",
"slug": "transmission_docker",
"description": "The torrent client for Hass.io with OpenVPN support",
"url": "https://github.com/alexbelgium/hassio-addons",
"startup": "services",
"arch": [
"aarch64",
"amd64",
"armv7",
"armhf"
],
"ports": {
"9091/tcp": 9091,
"name": "Transmission with NAS",
"version": "1.0",
"slug": "transmission",
"description": "The torrent client for Hass.io with OpenVPN support",
"url": "https://github.com/pierrickrouxel/hassio-addon-transmission",
"webui": "http://[HOST]:[PORT:9091]/transmission/web/",
"startup": "services",
"ingress": "true",
"ingress_port": 8099,
"panel_icon": "mdi:progress-download",
"arch": ["armhf", "armv7", "aarch64", "amd64", "i386"],
"map": [
"config:rw",
"share:rw",
"ssl"
],
"boot": "auto",
"ports": {
"9091/tcp": null,
"51413/tcp": 51413,
"51413/udp": 51413
},
"ports_description": {
"9091/tcp": "Web UI port",
},
"ports_description": {
"9091/tcp": "Web UI port (Not required for Hass.io Ingress)",
"51413/tcp": "Peer port (setup port forwarding to this port)",
"51413/udp": "Peer port (setup port forwarding to this port)"
},
"map": [
"backup:rw",
"share:rw",
"ssl"
],
"webui": "http://[HOST]:[PORT:9091]/transmission/web/",
"boot": "auto",
"environment": {
"PUID": "0",
"PGID": "0"
},
"ingress": "true",
"ingress_port": 9091,
"options": {},
"schema": {}
}
},
"privileged": [
"NET_ADMIN"
],
"devices": [
"/dev/net/tun:/dev/net/tun:rwm"
],
"privileged": ["SYS_ADMIN", "DAC_READ_SEARCH"],
"full_access": true,
"hassio_api": true,
"homeassistant_api": false,
"host_network": false,
"options": {
"log_level": "info",
"authentication_required": false,
"username": "",
"password": "",
"localdisks": ["-sda1"],
"openvpn_enabled": false,
"openvpn_config": "",
"openvpn_username": "",
"openvpn_password": ""
},
"schema": {
"log_level": "match(^(trace|debug|info|notice|warning|error|fatal)$)",
"authentication_required": "bool",
"username": "str",
"password": "str",
"localdisks": ["str"],
"openvpn_enabled": "bool",
"openvpn_config": "str",
"openvpn_username": "str",
"openvpn_password": "str"
},
"environment": {
"LOG_FORMAT": "{LEVEL}: {MESSAGE}"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,30 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# This files check if all user configuration requirements are met
# ==============================================================================
# Check authentication requirements, if enabled
if bashio::config.true 'authentication_required'; then
if ! bashio::config.has_value 'username'; then
bashio::exit.nok 'Transmission authentication is enabled, but no username was specified'
fi
if ! bashio::config.has_value 'password'; then
bashio::exit.nok 'Transmission authentication is enabled, but no password was specified'
fi
fi
# Check OpenVPN requirements, if enabled
if bashio::config.true 'openvpn_enabled'; then
if ! bashio::config.has_value 'openvpn_username'; then
bashio::exit.nok 'OpenVPN is enabled, but no username was specified'
fi
if ! bashio::config.has_value 'openvpn_password'; then
bashio::exit.nok 'OpenVPN is enabled, but no password was specified'
fi
if ! bashio::fs.file_exists "/config/openvpn/$(bashio::config 'openvpn_config').ovpn"; then
bashio::exit.nok "The configured /config/openvpn/$(bashio::config 'openvpn_config').ovpn file is not found"
fi
fi

View File

@@ -0,0 +1,38 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
declare CONFIG
declare authentication_required
declare username
declare password
if ! bashio::fs.directory_exists '/data/transmission'; then
mkdir '/data/transmission'
fi
if ! bashio::fs.file_exists '/data/transmission/settings.json'; then
echo "{}" > /data/transmission/settings.json
fi
CONFIG=$(</data/transmission/settings.json)
# Defaults
CONFIG=$(bashio::jq "${CONFIG}" ".\"incomplete-dir\"=\"/share/incomplete\"")
CONFIG=$(bashio::jq "${CONFIG}" ".\"incomplete-dir-enabled\"=true")
CONFIG=$(bashio::jq "${CONFIG}" ".\"download-dir\"=\"/share/downloads\"")
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-whitelist-enabled\"=false")
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-host-whitelist-enabled\"=false")
CONFIG=$(bashio::jq "${CONFIG}" ".\"bind-address-ipv4\"=\"0.0.0.0\"")
authentication_required=$(bashio::config 'authentication_required')
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-authentication-required\"=${authentication_required}")
username=$(bashio::config 'username')
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-username\"=\"${username}\"")
password=$(bashio::config 'password')
CONFIG=$(bashio::jq "${CONFIG}" ".\"rpc-password\"=\"${password}\"")
echo "${CONFIG}" > /data/transmission/settings.json

View File

@@ -0,0 +1,23 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
declare openvpn_config
declare openvpn_username
declare openvpn_password
if bashio::config.true 'openvpn_enabled'; then
openvpn_config=$(bashio::config 'openvpn_config')
cp "/config/openvpn/${openvpn_config}.ovpn" /etc/openvpn/config.ovpn
openvpn_username=$(bashio::config 'openvpn_username')
echo "${openvpn_username}" > /etc/openvpn/credentials
openvpn_password=$(bashio::config 'openvpn_password')
echo "${openvpn_password}" >> /etc/openvpn/credentials
sed -i 's/auth-user-pass.*/auth-user-pass \/etc\/openvpn\/credentials/g' /etc/openvpn/config.ovpn
sed -i "1a\/etc/openvpn/up-transmission.sh \"\${4}\" &\n" /etc/openvpn/up.sh
fi

View File

@@ -0,0 +1,29 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
declare port
declare certfile
declare ingress_interface
declare ingress_port
declare keyfile
port=$(bashio::addon.port 80)
if bashio::var.has_value "${port}"; then
bashio::config.require.ssl
if bashio::config.true 'ssl'; then
certfile=$(bashio::config 'certfile')
keyfile=$(bashio::config 'keyfile')
mv /etc/nginx/servers/direct-ssl.disabled /etc/nginx/servers/direct.conf
sed -i "s/%%certfile%%/${certfile}/g" /etc/nginx/servers/direct.conf
sed -i "s/%%keyfile%%/${keyfile}/g" /etc/nginx/servers/direct.conf
else
mv /etc/nginx/servers/direct.disabled /etc/nginx/servers/direct.conf
fi
fi
ingress_port=$(bashio::addon.ingress_port)
ingress_interface=$(bashio::addon.ip_address)
sed -i "s/%%port%%/${ingress_port}/g" /etc/nginx/servers/ingress.conf
sed -i "s/%%interface%%/${ingress_interface}/g" /etc/nginx/servers/ingress.conf

View File

@@ -0,0 +1,21 @@
#!/usr/bin/with-contenv bashio
bashio::log.info 'Mounting external hdd...'
# Mount local Share if configured and if Protection Mode is active
if bashio::config.has_value 'localdisks'; then
MOREDISKS=$(bashio::config 'localdisks')
bashio::log.info "Local Disks mounting.. ${MOREDISKS}" && \
for disk in $MOREDISKS
do
bashio::log.info "Mount ${disk}"
mkdir -p /share/$disk && \
if [ ! -d /share/$disk ]; then
echo "Creating /share/$disk"
mkdir -p /share/$disk
chown -R abc:abc /share/$disk
fi
mount /dev/$disk /share/$disk && \
bashio::log.info "Success!"
done || \
bashio::log.warning "Protection mode is ON. Unable to mount local drives!"
fi

View File

@@ -0,0 +1,96 @@
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}

View File

@@ -0,0 +1,15 @@
proxy_http_version 1.1;
proxy_ignore_client_abort off;
proxy_read_timeout 86400s;
proxy_redirect off;
proxy_send_timeout 86400s;
proxy_max_temp_file_size 0;
proxy_set_header Accept-Encoding "gzip";
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Real-IP $remote_addr;

View File

@@ -0,0 +1 @@
resolver 127.0.0.11;

View File

@@ -0,0 +1,6 @@
root /dev/null;
server_name $hostname;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;

View File

@@ -0,0 +1,9 @@
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

View File

@@ -0,0 +1,3 @@
upstream backend {
server 127.0.0.1:9091;
}

View File

@@ -0,0 +1,56 @@
# Run nginx in foreground.
daemon off;
# This is run inside Docker.
user root;
# Pid storage location.
pid /var/run/nginx.pid;
# Set number of worker processes.
worker_processes 1;
# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;
# Write error log to Hass.io add-on log.
error_log /proc/1/fd/1 error;
# Load allowed environment vars
env HASSIO_TOKEN;
# Load dynamic modules.
include /etc/nginx/modules/*.conf;
# Max num of simultaneous connections by a worker process.
events {
worker_connections 512;
}
http {
include /etc/nginx/includes/mime.types;
log_format hassio '[$time_local] $status '
'$http_x_forwarded_for($remote_addr) '
'$request ($http_user_agent)';
access_log /proc/1/fd/1 hassio;
client_max_body_size 4G;
default_type application/octet-stream;
gzip on;
keepalive_timeout 65;
sendfile on;
server_tokens off;
tcp_nodelay on;
tcp_nopush on;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
include /etc/nginx/includes/resolver.conf;
include /etc/nginx/includes/upstream.conf;
include /etc/nginx/servers/*.conf;
}

View File

@@ -0,0 +1,23 @@
server {
listen %%interface%%:%%port%% default_server;
include /etc/nginx/includes/server_params.conf;
include /etc/nginx/includes/proxy_params.conf;
location / {
proxy_read_timeout 300;
proxy_pass_header X-Transmission-Session-Id;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend/transmission/web/;
}
location /rpc {
proxy_pass http://backend/transmission/rpc;
}
location /upload {
proxy_pass http://backend/transmission/upload;
}
}

View File

@@ -0,0 +1,11 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
declare CONFIG
CONFIG=$(</data/transmission/settings.json)
CONFIG=$(bashio::jq "${CONFIG}" ".\"bind-address-ipv4\"=\"${1}\"")
echo "${CONFIG}" > /data/transmission/settings.json
exec /usr/bin/transmission-daemon --foreground --config-dir /data/transmission

View File

@@ -0,0 +1,8 @@
#!/usr/bin/execlineb -S0
# ==============================================================================
# Take down the S6 supervision tree when Nginx fails
# ==============================================================================
if -n { s6-test $# -ne 0 }
if -n { s6-test ${1} -eq 256 }
s6-svscanctl -t /var/run/s6/services

View File

@@ -0,0 +1,9 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Wait for transmission to become available
bashio::net.wait_for 9091
bashio::log.info "Starting NGinx..."
exec nginx

View File

@@ -0,0 +1,8 @@
#!/usr/bin/execlineb -S0
# ==============================================================================
# Take down the S6 supervision tree when the server fails
# ==============================================================================
if -n { s6-test $# -ne 0 }
if -n { s6-test ${1} -eq 256 }
s6-svscanctl -t /var/run/s6/services

View File

@@ -0,0 +1,11 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Runs Transmission
# ==============================================================================
bashio::log.info "Starting Transmission..."
if bashio::config.true 'openvpn_enabled'; then
exec /usr/sbin/openvpn --config /etc/openvpn/config.ovpn --script-security 2 --up /etc/openvpn/up.sh --down /etc/openvpn/down.sh
else
exec /usr/bin/transmission-daemon --foreground --config-dir /data/transmission
fi