Merge pull request #2706 from alexbelgium/copilot/fix-qbittorrent-wireguard-connection

qbittorrent: Fix WireGuard "RTNETLINK answers: File exists" crash loop on S6 service restart
This commit is contained in:
Alexandre
2026-05-12 08:52:00 +02:00
committed by GitHub
3 changed files with 14 additions and 1 deletions

View File

@@ -1,4 +1,7 @@
## 5.2.0-3 (2026-05-12)
- Fix WireGuard "RTNETLINK answers: File exists" crash loop: clean up stale interface and routing rules before re-establishing the tunnel on S6 service restart
## 5.2.0-2 (2026-05-10)
- Fix startup loop on aarch64: drop s6-notifyoncheck wrapper so s6 supervises qbittorrent-nox directly (LSIO arm64 image has no notification-fd, causing EBADF restart loop)

View File

@@ -143,4 +143,4 @@ schema:
slug: qbittorrent
udev: true
url: https://github.com/alexbelgium/hassio-addons
version: "5.2.0-2"
version: "5.2.0-3"

View File

@@ -279,6 +279,16 @@ _wireguard_up() {
fi
done
# Clean up any leftover state from a previous run (e.g., after an S6 service restart).
# Without this, `ip link add` and `ip rule add` fail with "RTNETLINK answers: File exists"
# when the svc-qbittorrent service is restarted while the WireGuard interface is still up.
if ip link show "${config["Interface"]}" > /dev/null 2>&1; then
bashio::log.info "WireGuard interface ${config["Interface"]} already exists. Cleaning up before re-establishing connection."
ip link set "${config["Interface"]}" down 2>/dev/null || true
ip link del "${config["Interface"]}" 2>/dev/null || true
fi
_routing_del 2>/dev/null || true
_cmd "ip link add ${config["Interface"]} type wireguard" || return 1
mapfile -d ',' -t local_ips < <(echo "${config["Address"]}" | tr -d ' ')