
* Create docker-transmission-openvpn application * Partially addressed review 1 * Fix: Avoid .env generation error * Add execute right on image scripts * Fix: Force transmission home var * Fix: unsupported custom app path * Review: Make .env generation simpler * Fix: Change cron command causing error due to crlf * Review: Rework fetching WebUI * Improve cleaning up * Add warning message to setup vpn provider * Rework update function * Fix: Change var_tun default value to yes * Review: Remove Healthcheck cron job * Review: Directly deploy WebUI to /opt/transmission-ui/ * Make custom config persistent when updating * Fix: fetch WebUI from correct URL (old one was invalid) * Fix: resolve conflicting Privoxy instance * Fix: align binary path when fetching branch vs release * Security: Remove old and deprecated WebUI for security reasons * Review: drop unnecessary packages and optimize implementations * Review: Implement local network dynamic detection * CR, OS: Migrate to Debian 13 * Use quiet mode for several commands as recommended * Review: Replace hard coding app name instead of using var $APP * Review: Reduce amount of msg_blocks * refactor * refactor --------- Co-authored-by: Tobias <96661824+CrazyWolf13@users.noreply.github.com>
141 lines
4.0 KiB
Bash
141 lines
4.0 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Copyright (c) 2021-2025 community-scripts ORG
|
|
# Author: SunFlowerOwl
|
|
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
|
|
# Source: https://github.com/haugene/docker-transmission-openvpn
|
|
|
|
# Import Functions und Setup
|
|
source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
|
|
color
|
|
verb_ip6
|
|
catch_errors
|
|
setting_up_container
|
|
network_check
|
|
update_os
|
|
|
|
msg_info "Installing Dependencies"
|
|
$STD apt install -y \
|
|
dnsutils \
|
|
iputils-ping \
|
|
ufw \
|
|
iproute2
|
|
mkdir -p /etc/systemd/system-preset
|
|
echo "disable *" > /etc/systemd/system-preset/99-no-autostart.preset
|
|
$STD apt install -y \
|
|
transmission-daemon \
|
|
privoxy
|
|
rm -f /etc/systemd/system-preset/99-no-autostart.preset
|
|
$STD systemctl preset-all
|
|
$STD systemctl disable --now transmission-daemon
|
|
$STD systemctl mask transmission-daemon
|
|
$STD systemctl disable --now privoxy
|
|
$STD systemctl mask privoxy
|
|
$STD apt install -y openvpn
|
|
msg_ok "Installed Dependencies"
|
|
|
|
fetch_and_deploy_gh_release "docker-transmission-openvpn" "haugene/docker-transmission-openvpn" "tarball" "latest" "/opt/docker-transmission-openvpn"
|
|
|
|
msg_info "Configuring transmission-openvpn"
|
|
$STD useradd -u 911 -U -d /config -s /usr/sbin/nologin abc
|
|
mkdir -p /etc/openvpn /etc/transmission /etc/scripts /opt/privoxy
|
|
cp -r /opt/docker-transmission-openvpn/openvpn/* /etc/openvpn/
|
|
cp -r /opt/docker-transmission-openvpn/transmission/* /etc/transmission/
|
|
cp -r /opt/docker-transmission-openvpn/scripts/* /etc/scripts/
|
|
cp -r /opt/docker-transmission-openvpn/privoxy/scripts/* /opt/privoxy/
|
|
chmod +x /etc/openvpn/*.sh
|
|
chmod +x /etc/scripts/*.sh
|
|
chmod +x /opt/privoxy/*.sh
|
|
$STD ln -s /usr/bin/transmission-daemon /usr/local/bin/transmission-daemon
|
|
$STD update-alternatives --set iptables /usr/sbin/iptables-legacy
|
|
$STD update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
|
|
msg_ok "Configured transmission-openvpn"
|
|
|
|
msg_info "Creating Service"
|
|
LOCAL_SUBNETS=$(
|
|
ip -o -4 addr show \
|
|
| awk '!/127.0.0.1/ {
|
|
split($4, a, "/"); ip=a[1]; mask=a[2];
|
|
split(ip, o, ".");
|
|
if (mask < 8) {
|
|
print "*.*.*.*";
|
|
} else if (mask < 16) {
|
|
print o[1]".*.*.*";
|
|
} else if (mask < 24) {
|
|
print o[1]"."o[2]".*.*";
|
|
} else {
|
|
print o[1]"."o[2]"."o[3]".*";
|
|
}
|
|
}' \
|
|
| sort -u | paste -sd, -
|
|
)
|
|
TRANSMISSION_RPC_WHITELIST="127.0.0.*,${LOCAL_SUBNETS}"
|
|
mkdir -p /opt/transmission-openvpn
|
|
cat <<EOF > "/opt/transmission-openvpn/.env"
|
|
OPENVPN_USERNAME="username"
|
|
OPENVPN_PASSWORD="password"
|
|
OPENVPN_PROVIDER="PIA"
|
|
OPENVPN_CONFIG=france
|
|
OPENVPN_OPTS="--inactive 3600 --ping 10 --ping-exit 60 --mute-replay-warnings"
|
|
CUSTOM_OPENVPN_CONFIG_DIR="/opt/transmission-openvpn"
|
|
GLOBAL_APPLY_PERMISSIONS="true"
|
|
TRANSMISSION_HOME="/config/transmission-home"
|
|
TRANSMISSION_RPC_PORT="9091"
|
|
TRANSMISSION_RPC_USERNAME=""
|
|
TRANSMISSION_RPC_PASSWORD=""
|
|
TRANSMISSION_DOWNLOAD_DIR="/data/complete"
|
|
TRANSMISSION_INCOMPLETE_DIR="/data/incomplete"
|
|
TRANSMISSION_WATCH_DIR="/data/watch"
|
|
TRANSMISSION_WEB_UI=""
|
|
TRANSMISSION_UMASK="2"
|
|
TRANSMISSION_RATIO_LIMIT_ENABLED="true"
|
|
TRANSMISSION_RATIO_LIMIT="0"
|
|
TRANSMISSION_RPC_WHITELIST_ENABLED="false"
|
|
TRANSMISSION_RPC_WHITELIST="${TRANSMISSION_RPC_WHITELIST}"
|
|
CREATE_TUN_DEVICE="false"
|
|
ENABLE_UFW="false"
|
|
UFW_ALLOW_GW_NET="false"
|
|
UFW_EXTRA_PORTS=""
|
|
UFW_DISABLE_IPTABLES_REJECT="false"
|
|
PUID="911"
|
|
PGID=""
|
|
PEER_DNS="true"
|
|
PEER_DNS_PIN_ROUTES="true"
|
|
DROP_DEFAULT_ROUTE=""
|
|
WEBPROXY_ENABLED="true"
|
|
WEBPROXY_PORT="8118"
|
|
WEBPROXY_BIND_ADDRESS=""
|
|
WEBPROXY_USERNAME=""
|
|
WEBPROXY_PASSWORD=""
|
|
LOG_TO_STDOUT="false"
|
|
HEALTH_CHECK_HOST="google.com"
|
|
SELFHEAL="false"
|
|
EOF
|
|
cat <<EOF > /etc/systemd/system/openvpn-custom.service
|
|
[Unit]
|
|
Description=Custom OpenVPN start service
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=/etc/openvpn/start.sh
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
EnvironmentFile=/opt/transmission-openvpn/.env
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
systemctl enable --now -q openvpn-custom.service
|
|
msg_ok "Created Service"
|
|
|
|
motd_ssh
|
|
customize
|
|
|
|
msg_info "Cleaning up"
|
|
$STD apt -y autoremove
|
|
$STD apt -y autoclean
|
|
$STD apt -y clean
|
|
rm -rf /opt/docker-transmission-openvpn
|
|
msg_ok "Cleaned"
|