mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-10-28 16:51:44 +00:00
Compare commits
59
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
429c5907e2 | ||
|
|
83c8a53390 | ||
|
|
da144eada7 | ||
|
|
d20d1199fe | ||
|
|
325419d009 | ||
|
|
f6750c806a | ||
|
|
452f3490c4 | ||
|
|
3a78e99c4b | ||
|
|
dd0fed1bd8 | ||
|
|
169eeccc28 | ||
|
|
2203ab4177 | ||
|
|
2e5df8e962 | ||
|
|
7c95c4f104 | ||
|
|
7af8610a25 | ||
|
|
ceab896b46 | ||
|
|
49fa5daa91 | ||
|
|
9da453855e | ||
|
|
d64c940500 | ||
|
|
9cc2633688 | ||
|
|
1c45d0d816 | ||
|
|
56135c39ca | ||
|
|
a5a0862498 | ||
|
|
72641aeb6d | ||
|
|
28fb23a5ce | ||
|
|
13d1777283 | ||
|
|
b856dc37e1 | ||
|
|
930629656c | ||
|
|
0bc3fee0f1 | ||
|
|
5c6c3cc94c | ||
|
|
6643f15cdf | ||
|
|
13cad45bbf | ||
|
|
d3fad638c1 | ||
|
|
02dd8c9e35 | ||
|
|
ef87465f7c | ||
|
|
94c02ef68d | ||
|
|
ca0659f640 | ||
|
|
81db400ff2 | ||
|
|
a773cf8ac8 | ||
|
|
c710429863 | ||
|
|
d3169643a8 | ||
|
|
ada1099a0d | ||
|
|
b76b2d969f | ||
|
|
cfc4dc7d4a | ||
|
|
51b1efd584 | ||
|
|
17c9338e72 | ||
|
|
39b999d94e | ||
|
|
11f88bc894 | ||
|
|
916672c562 | ||
|
|
474f877e2f | ||
|
|
5640de85e9 | ||
|
|
58d8591dfb | ||
|
|
734a824547 | ||
|
|
6af5909628 | ||
|
|
aa5d57d18c | ||
|
|
066f4e1feb | ||
|
|
eb7939eaaa | ||
|
|
78c3231b89 | ||
|
|
c7077fd9d6 | ||
|
|
7816985f22 |
No files matched your search
@@ -1,5 +1,6 @@
|
||||
username,country
|
||||
0ln,
|
||||
0x468,China
|
||||
0xf3f,
|
||||
10tribu,France
|
||||
1333481,United Kingdom
|
||||
@@ -242,6 +243,7 @@ Flipsoo,
|
||||
FloppiTuna,United States
|
||||
Fluffy-Bunny-23,
|
||||
Flydiverny,Sweden
|
||||
FoxLuffy,
|
||||
FrisianOnline,
|
||||
Fruckiwacki,
|
||||
G2740,
|
||||
@@ -252,6 +254,7 @@ Gangol,
|
||||
GaryOG,
|
||||
Germaenace,
|
||||
Getrio,Italy
|
||||
Ghost-Sam1222,
|
||||
GiacoAV,
|
||||
Giga77,
|
||||
GleDel,
|
||||
@@ -463,6 +466,7 @@ MikeVol,
|
||||
Mikefila,
|
||||
Milenco,
|
||||
MilesAheadToo,Portugal
|
||||
MillenniumStorm,
|
||||
Miraculix666,
|
||||
MirekJina,
|
||||
MiroVerleysen,
|
||||
@@ -514,6 +518,7 @@ OsipovOV,
|
||||
Ozzoman30,
|
||||
P4uLT,France
|
||||
PCjabber,United States
|
||||
PINUE,
|
||||
Pacura,
|
||||
Panagiotis-Zachos,Greece
|
||||
Parahassio,
|
||||
@@ -813,6 +818,7 @@ amcort,
|
||||
amineSAPFrance,France
|
||||
amorrigan,
|
||||
amosyuen,
|
||||
amussey,United States
|
||||
an0moly,
|
||||
ananthb,India
|
||||
anarkia47,
|
||||
@@ -1083,6 +1089,7 @@ dadge,
|
||||
dadler,United States
|
||||
daf777,
|
||||
dafunkydan,
|
||||
damianbochekemk70-star,
|
||||
dammro,
|
||||
dan-ee,
|
||||
dan81andrei,
|
||||
@@ -1198,6 +1205,7 @@ dzidza,
|
||||
dzirambola,
|
||||
e45cream,
|
||||
eanavalentin,
|
||||
ebahou,
|
||||
ebertti,Brazil
|
||||
ebonyschneider462359,
|
||||
echauvet,France
|
||||
@@ -1513,6 +1521,7 @@ joh-kro,
|
||||
johanbaaij,
|
||||
john-plowman408a,
|
||||
john5du,
|
||||
johnny234234,
|
||||
johnser,United States
|
||||
johny-mnemonic,
|
||||
jojolll,
|
||||
@@ -1634,6 +1643,7 @@ lguerard,
|
||||
lhimo,
|
||||
liangshao200,
|
||||
lichenophile,
|
||||
ligunn,
|
||||
lijingtong666,
|
||||
lillodipiazza,
|
||||
linjianxangyu,
|
||||
@@ -1719,6 +1729,7 @@ math-eaton,United States
|
||||
mathieudebieuvre,
|
||||
mattashhall,
|
||||
matte-a,Italy
|
||||
matth-av,Australia
|
||||
matthew-hz,
|
||||
matthewturk,United States
|
||||
matthiasfaeth,
|
||||
@@ -2063,6 +2074,7 @@ rmaeder,Switzerland
|
||||
rmtsrc,
|
||||
robertbak,
|
||||
robertodigisi,Switzerland
|
||||
rodolfoconcepcion,
|
||||
roelreijneveld,Netherlands
|
||||
rogertheriault,Mexico
|
||||
rojuvi,
|
||||
|
||||
|
Binary file not shown.
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 331 KiB |
@@ -87,7 +87,7 @@ jobs:
|
||||
IFS='|' read -r CONFIG TYPE <<<"$(get_config "$f")"
|
||||
if [ -n "$CONFIG" ]; then
|
||||
NAME="$(get_raw '.name' "$TYPE" "$CONFIG")"
|
||||
if [ -n "${NAME:-}" ] && [ "$f" != "$NAME" ]; then
|
||||
if [ -n "${NAME:-}" ] && [ "$f" != "$NAME" ] && [ ! -e "$NAME" ]; then
|
||||
echo "$f" > "$f/oldname"
|
||||
mv "$f" "$NAME"
|
||||
fi
|
||||
|
||||
@@ -234,7 +234,7 @@ cp "$ENV_FILE" "$ETC_ENV_FILE"
|
||||
################################################################################
|
||||
# Inject into scripts and shells (best-effort)
|
||||
################################################################################
|
||||
for f in /etc/services.d/*/run /etc/cont-init.d/*.sh /entrypoint.sh /etc/bash.bashrc; do
|
||||
for f in /etc/services.d/*/run /etc/cont-init.d/*.sh /entrypoint.sh /etc/bash.bashrc "${GLOBAL_VAR_FILES:-}"; do
|
||||
[[ -f "$f" ]] && inject_block "$f"
|
||||
done
|
||||
|
||||
|
||||
@@ -57,13 +57,13 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
### Number of addons
|
||||
|
||||
- In the repository : 127
|
||||
- Installed : 116609
|
||||
- Installed : 125333
|
||||
|
||||
### Top 3
|
||||
|
||||
1. Filebrowser (21638x)
|
||||
2. Portainer (13274x)
|
||||
3. Postgres_17 (4976x)
|
||||
1. Filebrowser (24134x)
|
||||
2. Portainer (14344x)
|
||||
3. Postgres_17 (5248x)
|
||||
|
||||
### Architectures used
|
||||
|
||||
@@ -324,7 +324,7 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
![smb][smb-badge]
|
||||
![localdisks][localdisks-badge]
|
||||
|
||||
✓  [Filebrowser (21638x)](filebrowser/) : filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files
|
||||
✓  [Filebrowser (24134x)](filebrowser/) : filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files
|
||||
|
||||
  
|
||||

|
||||
@@ -614,7 +614,16 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
![smb][smb-badge]
|
||||
![localdisks][localdisks-badge]
|
||||
|
||||
✓  [NetAlertX](netalertx_fa/) : 🖧🔍 Centralized network visibility and continuous asset discovery.
|
||||
✓  [NetAlertX](netalertx/) : 🖧🔍 Centralized network visibility and continuous asset discovery.
|
||||
|
||||
  
|
||||

|
||||
![aarch64][aarch64-badge]
|
||||
![amd64][amd64-badge]
|
||||
![ingress][ingress-badge]
|
||||
![mqtt][mqtt-badge]
|
||||
|
||||
✓  [NetAlertX Full Access](netalertx_fa/) : 🖧🔍 Centralized network visibility and continuous asset discovery.
|
||||
|
||||
  
|
||||

|
||||
@@ -728,7 +737,7 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
![smb][smb-badge]
|
||||
![localdisks][localdisks-badge]
|
||||
|
||||
✓  [Portainer (13274x)](portainer/) : Manage your Docker environment with ease
|
||||
✓  [Portainer (14344x)](portainer/) : Manage your Docker environment with ease
|
||||
|
||||
  
|
||||

|
||||
@@ -736,7 +745,7 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
![amd64][amd64-badge]
|
||||
![ingress][ingress-badge]
|
||||
|
||||
✓ [Portainer (13274x) Agent](portainer_agent/) : An agent used to manage all the resources in a Swarm cluster
|
||||
✓ [Portainer (14344x) Agent](portainer_agent/) : An agent used to manage all the resources in a Swarm cluster
|
||||
|
||||
  
|
||||

|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## nightly-20260315 (2026-03-21)
|
||||
- Update to latest version from tphakala/birdnet-go (changelog : https://github.com/tphakala/birdnet-go/releases)
|
||||
|
||||
## nightly-20260311 (2026-03-14)
|
||||
- Update to latest version from tphakala/birdnet-go (changelog : https://github.com/tphakala/birdnet-go/releases)
|
||||
## nightly-20260118-2 (17-02-2026)
|
||||
|
||||
@@ -118,4 +118,4 @@ slug: birdnet-go
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/birdnet-go
|
||||
usb: true
|
||||
version: "nightly-20260311"
|
||||
version: "nightly-20260315"
|
||||
@@ -2,10 +2,10 @@
|
||||
"github_beta": true,
|
||||
"github_fulltag": true,
|
||||
"github_tagfilter": "nightly",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "birdnet-go",
|
||||
"source": "github",
|
||||
"upstream_repo": "tphakala/birdnet-go",
|
||||
"upstream_version": "nightly-20260311"
|
||||
"upstream_version": "nightly-20260315"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 1.88.134-ls84 (2026-03-21)
|
||||
- Update to latest version from linuxserver/docker-brave (changelog : https://github.com/linuxserver/docker-brave/releases)
|
||||
|
||||
## 1.88.130-ls82 (2026-03-14)
|
||||
- Update to latest version from linuxserver/docker-brave (changelog : https://github.com/linuxserver/docker-brave/releases)
|
||||
|
||||
|
||||
@@ -69,5 +69,5 @@ slug: brave
|
||||
tmpfs: true
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "1.88.130-ls82"
|
||||
version: "1.88.134-ls84"
|
||||
video: true
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "brave",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-brave",
|
||||
"upstream_version": "1.88.130-ls82"
|
||||
"upstream_version": "1.88.134-ls84"
|
||||
}
|
||||
@@ -47,6 +47,8 @@ RUN \
|
||||
# Modify commands
|
||||
RUN sed -i '/no-first-run/a\ --remote-debugging-address=0.0.0.0 --remote-debugging-port=9221 \\' /usr/bin/wrapped-*
|
||||
|
||||
ENV GLOBAL_VAR_FILES="/etc/usr/bin/wrapped-chromium"
|
||||
|
||||
# Global LSIO modifications
|
||||
ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_lsio.sh" "/ha_lsio.sh"
|
||||
ARG CONFIGLOCATION="/config"
|
||||
|
||||
@@ -71,5 +71,5 @@ slug: chromium
|
||||
tmpfs: true
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "version-59f04866"
|
||||
version: "version-baf94ebf"
|
||||
video: true
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "chromium",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-chromium",
|
||||
"upstream_version": "version-59f04866"
|
||||
"upstream_version": "version-baf94ebf"
|
||||
}
|
||||
@@ -1,4 +1,9 @@
|
||||
|
||||
## 2.44.0 (2026-03-21)
|
||||
- Update to latest version from browserless/chrome (changelog : https://github.com/browserless/chrome/releases)
|
||||
## 2.43.0-2 (20-03-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
## 2.43.0 (2026-03-14)
|
||||
- Update to latest version from browserless/chrome (changelog : https://github.com/browserless/chrome/releases)
|
||||
|
||||
|
||||
@@ -70,7 +70,8 @@ RUN chmod 777 /ha_entrypoint.sh
|
||||
ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/bashio-standalone.sh" "/usr/local/lib/bashio-standalone.sh"
|
||||
RUN chmod 0755 /usr/local/lib/bashio-standalone.sh
|
||||
|
||||
RUN sed -i "2a /./ha_entrypoint.sh" ./scripts/start.sh
|
||||
RUN sed -i "2a /./ha_entrypoint.sh" ./scripts/start.sh && \
|
||||
sed -i "3a if [ -f /.env ]; then set -a; . /.env; set +a; fi" ./scripts/start.sh
|
||||
|
||||
############
|
||||
# 5 Labels #
|
||||
|
||||
@@ -86,5 +86,5 @@ schema:
|
||||
slug: browserless_chrome
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/browserless_chrome
|
||||
version: "2.43.0"
|
||||
version: "2.44.0"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:3000]/docs"
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_tagfilter": "v",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "browserless_chrome",
|
||||
"source": "github",
|
||||
"upstream_repo": "browserless/chrome",
|
||||
"upstream_version": "2.43.0"
|
||||
"upstream_version": "2.44.0"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 0.54.6 (2026-03-21)
|
||||
- Update to latest version from linuxserver/docker-changedetection.io (changelog : https://github.com/linuxserver/docker-changedetection.io/releases)
|
||||
|
||||
## 0.54.5 (2026-03-14)
|
||||
- Update to latest version from linuxserver/docker-changedetection.io (changelog : https://github.com/linuxserver/docker-changedetection.io/releases)
|
||||
|
||||
|
||||
@@ -34,4 +34,4 @@ schema:
|
||||
slug: changedetection.io
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/changedetection.io
|
||||
version: "0.54.5"
|
||||
version: "0.54.6"
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_fulltag": "false",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "changedetection.io",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-changedetection.io",
|
||||
"upstream_version": "0.54.5"
|
||||
"upstream_version": "0.54.6"
|
||||
}
|
||||
@@ -1,3 +1,6 @@
|
||||
|
||||
## 19.8.0 (2026-03-21)
|
||||
- Update to latest version from coderaiser/cloudcmd (changelog : https://github.com/coderaiser/cloudcmd/releases)
|
||||
## 19.6.8-4 (07-03-2026)
|
||||
- Minor bugs fixed
|
||||
## 19.6.8-3 (06-03-2026)
|
||||
|
||||
@@ -104,4 +104,4 @@ schema:
|
||||
slug: cloudcommander
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/cloudcommander
|
||||
version: "19.6.8-4"
|
||||
version: "19.8.0"
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"last_update": "2026-02-28",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "cloudcommander",
|
||||
"source": "github",
|
||||
"upstream_repo": "coderaiser/cloudcmd",
|
||||
"upstream_version": "19.6.8"
|
||||
"upstream_version": "19.8.0"
|
||||
}
|
||||
@@ -1,3 +1,8 @@
|
||||
## streaming your media (beta version) 4.10.0.6 (21-03-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
## 4.10.0.6 (2026-03-21)
|
||||
- Update to latest version from linuxserver/docker-emby (changelog : https://github.com/linuxserver/docker-emby/releases)
|
||||
## streaming your media (beta version) 4.10.0.5 (14-03-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
ARG BUILD_FROM
|
||||
ARG BUILD_VERSION
|
||||
ARG BUILD_UPSTREAM="4.10.0.5"
|
||||
ARG BUILD_UPSTREAM="4.10.0.6"
|
||||
FROM ${BUILD_FROM}
|
||||
|
||||
##################
|
||||
|
||||
@@ -122,5 +122,5 @@ schema:
|
||||
slug: emby_nas
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/emby
|
||||
version: "4.10.0.5"
|
||||
version: "4.10.0.6"
|
||||
video: true
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_beta": "true",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "emby",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-emby",
|
||||
"upstream_version": "4.10.0.5"
|
||||
"upstream_version": "4.10.0.6"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## debian-2026-03-18 (2026-03-18)
|
||||
- Update to latest version from charlocharlie/epicgames-freegames
|
||||
|
||||
## debian-2026-03-09 (2026-03-09)
|
||||
- Update to latest version from charlocharlie/epicgames-freegames
|
||||
|
||||
|
||||
@@ -88,5 +88,5 @@ schema:
|
||||
slug: epicgamesfree
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "debian-2026-03-09"
|
||||
version: "debian-2026-03-18"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:3000]"
|
||||
@@ -2,10 +2,10 @@
|
||||
"dockerhub_by_date": true,
|
||||
"dockerhub_list_size": 2,
|
||||
"github_exclude": "-",
|
||||
"last_update": "2026-03-09",
|
||||
"last_update": "2026-03-18",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "epicgamesfree",
|
||||
"source": "dockerhub",
|
||||
"upstream_repo": "charlocharlie/epicgames-freegames",
|
||||
"upstream_version": "debian-2026-03-09"
|
||||
"upstream_version": "debian-2026-03-18"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 2.62.1 (2026-03-21)
|
||||
- Update to latest version from filebrowser/filebrowser (changelog : https://github.com/filebrowser/filebrowser/releases)
|
||||
|
||||
## 2.61.2 (2026-03-07)
|
||||
- Update to latest version from filebrowser/filebrowser (changelog : https://github.com/filebrowser/filebrowser/releases)
|
||||
|
||||
|
||||
@@ -123,4 +123,4 @@ schema:
|
||||
slug: filebrowser
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "2.61.2"
|
||||
version: "2.62.1"
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"github_beta": "true",
|
||||
"last_update": "2026-03-07",
|
||||
"last_update": "2026-03-21",
|
||||
"paused": false,
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "filebrowser",
|
||||
"source": "github",
|
||||
"upstream_repo": "filebrowser/filebrowser",
|
||||
"upstream_version": "2.61.2"
|
||||
"upstream_version": "2.62.1"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 6.5.6 (2026-03-21)
|
||||
- Update to latest version from firefly-iii/firefly-iii (changelog : https://github.com/firefly-iii/firefly-iii/releases)
|
||||
|
||||
## 6.5.4 (2026-03-07)
|
||||
- Update to latest version from firefly-iii/firefly-iii (changelog : https://github.com/firefly-iii/firefly-iii/releases)
|
||||
|
||||
|
||||
@@ -104,5 +104,5 @@ slug: fireflyiii
|
||||
startup: services
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "6.5.4"
|
||||
version: "6.5.6"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:8080]"
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_exclude": "develop",
|
||||
"last_update": "2026-03-07",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "fireflyiii",
|
||||
"source": "github",
|
||||
"upstream_repo": "firefly-iii/firefly-iii",
|
||||
"upstream_version": "6.5.4"
|
||||
"upstream_version": "6.5.6"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 3.19.3 (2026-03-21)
|
||||
- Update to latest version from wiserain/flexget
|
||||
|
||||
## 3.19.1 (2026-03-14)
|
||||
- Update to latest version from wiserain/flexget
|
||||
|
||||
|
||||
+1
-1
@@ -95,5 +95,5 @@ schema:
|
||||
slug: flexget
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "3.19.1"
|
||||
version: "3.19.3"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:5050]"
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"dockerhub_list_size": "10",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "flexget",
|
||||
"source": "dockerhub",
|
||||
"upstream_repo": "wiserain/flexget",
|
||||
"upstream_version": "3.19.1"
|
||||
"upstream_version": "3.19.3"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 2.6.1 (2026-03-21)
|
||||
- Update to latest version from imagegenius/docker-immich (changelog : https://github.com/imagegenius/docker-immich/releases)
|
||||
|
||||
## 2.5.6-2 (2026-02-14)
|
||||
- Add `VIPS_NOVECTOR` add-on option to set `VIPS_NOVECTOR=1` for thumbnail generation workaround on aarch64 (issue #2460)
|
||||
|
||||
|
||||
+1
-1
@@ -143,6 +143,6 @@ slug: immich
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
usb: true
|
||||
version: "2.5.6-2"
|
||||
version: "2.6.1"
|
||||
video: true
|
||||
webui: http://[HOST]:[PORT:8080]
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_beta": "false",
|
||||
"last_update": "2026-02-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "immich",
|
||||
"source": "github",
|
||||
"upstream_repo": "imagegenius/docker-immich",
|
||||
"upstream_version": "2.5.6"
|
||||
"upstream_version": "2.6.1"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 2.6.1 (2026-03-21)
|
||||
- Update to latest version from imagegenius/docker-immich (changelog : https://github.com/imagegenius/docker-immich/releases)
|
||||
|
||||
## 2.5.6-2 (2026-02-14)
|
||||
- Add `VIPS_NOVECTOR` add-on option to set `VIPS_NOVECTOR=1` for thumbnail generation workaround on aarch64 (issue #2460)
|
||||
|
||||
|
||||
@@ -141,6 +141,6 @@ slug: immich_cuda
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
usb: true
|
||||
version: "2.5.6-2"
|
||||
version: "2.6.1"
|
||||
video: true
|
||||
webui: http://[HOST]:[PORT:8080]
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_beta": "false",
|
||||
"last_update": "2026-02-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "immich",
|
||||
"source": "github",
|
||||
"upstream_repo": "imagegenius/docker-immich",
|
||||
"upstream_version": "2.5.6"
|
||||
"upstream_version": "2.6.1"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 2.6.1 (2026-03-21)
|
||||
- Update to latest version from imagegenius/docker-immich (changelog : https://github.com/imagegenius/docker-immich/releases)
|
||||
|
||||
## 2.5.6-2 (2026-02-14)
|
||||
- Add `VIPS_NOVECTOR` add-on option to set `VIPS_NOVECTOR=1` for thumbnail generation workaround on aarch64 (issue #2460)
|
||||
|
||||
|
||||
@@ -142,6 +142,6 @@ slug: immich_noml
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
usb: true
|
||||
version: "2.5.6-2"
|
||||
version: "2.6.1"
|
||||
video: true
|
||||
webui: http://[HOST]:[PORT:8080]
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_beta": "false",
|
||||
"last_update": "2026-02-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "immich",
|
||||
"source": "github",
|
||||
"upstream_repo": "imagegenius/docker-immich",
|
||||
"upstream_version": "2.5.6"
|
||||
"upstream_version": "2.6.1"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 2.6.1 (2026-03-21)
|
||||
- Update to latest version from imagegenius/docker-immich (changelog : https://github.com/imagegenius/docker-immich/releases)
|
||||
|
||||
## 2.5.6-3 (2026-02-22)
|
||||
- Increment add-on revision.
|
||||
|
||||
|
||||
@@ -142,6 +142,6 @@ slug: immich_openvino
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
usb: true
|
||||
version: "2.5.6-3"
|
||||
version: "2.6.1"
|
||||
video: true
|
||||
webui: http://[HOST]:[PORT:8080]
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_beta": "false",
|
||||
"last_update": "2026-02-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "immich",
|
||||
"source": "github",
|
||||
"upstream_repo": "imagegenius/docker-immich",
|
||||
"upstream_version": "2.5.6"
|
||||
"upstream_version": "2.6.1"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 0.24.1419 (2026-03-21)
|
||||
- Update to latest version from linuxserver/docker-jackett (changelog : https://github.com/linuxserver/docker-jackett/releases)
|
||||
|
||||
## 0.24.1356 (2026-03-14)
|
||||
- Update to latest version from linuxserver/docker-jackett (changelog : https://github.com/linuxserver/docker-jackett/releases)
|
||||
|
||||
|
||||
+1
-1
@@ -106,5 +106,5 @@ schema:
|
||||
slug: jackett_nas
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/jackett
|
||||
version: "0.24.1356"
|
||||
version: "0.24.1419"
|
||||
webui: http://[HOST]:[PORT:9117]
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "jackett",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-jackett",
|
||||
"upstream_version": "0.24.1356"
|
||||
"upstream_version": "0.24.1419"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## v3.13.1 (2026-03-21)
|
||||
- Update to latest version from mealie-recipes/mealie (changelog : https://github.com/mealie-recipes/mealie/releases)
|
||||
|
||||
## v3.12.0 (2026-03-14)
|
||||
- Update to latest version from mealie-recipes/mealie (changelog : https://github.com/mealie-recipes/mealie/releases)
|
||||
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@ FROM node:20 AS frontend-builder
|
||||
ARG SUB_PATH="/mealie/"
|
||||
ENV SUB_PATH=$SUB_PATH
|
||||
|
||||
ENV MEALIE_VERSION="v3.12.0"
|
||||
ENV MEALIE_VERSION="v3.13.1"
|
||||
|
||||
# Clone the Mealie repository to get the frontend source code
|
||||
WORKDIR /frontend
|
||||
|
||||
+1
-1
@@ -114,4 +114,4 @@ schema:
|
||||
slug: mealie
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "v3.12.0"
|
||||
version: "v3.13.1"
|
||||
+2
-2
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"github_beta": "true",
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"paused": "false",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "mealie",
|
||||
"source": "github",
|
||||
"upstream_repo": "mealie-recipes/mealie",
|
||||
"upstream_version": "v3.12.0"
|
||||
"upstream_version": "v3.13.1"
|
||||
}
|
||||
@@ -1,3 +1,6 @@
|
||||
|
||||
## 26.3.15 (2026-03-21)
|
||||
- Update to latest version from jokob-sk/NetAlertX (changelog : https://github.com/jokob-sk/NetAlertX/releases)
|
||||
## 26.3.16-6 (19-03-2026)
|
||||
- Minor bugs fixed
|
||||
## 26.3.16-5 (19-03-2026)
|
||||
|
||||
@@ -42,4 +42,4 @@ slug: netalertx
|
||||
tmpfs: true
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "26.3.16-6"
|
||||
version: "26.3.15"
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"last_update": "2026-03-07",
|
||||
"last_update": "2026-03-21",
|
||||
"paused": "false",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "netalertx",
|
||||
"source": "github",
|
||||
"upstream_repo": "jokob-sk/NetAlertX",
|
||||
"upstream_version": "26.3.7"
|
||||
"upstream_version": "26.3.15"
|
||||
}
|
||||
@@ -1,3 +1,6 @@
|
||||
|
||||
## 26.3.15 (2026-03-21)
|
||||
- Update to latest version from jokob-sk/NetAlertX (changelog : https://github.com/jokob-sk/NetAlertX/releases)
|
||||
## 26.3.16-6 (19-03-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ init: false
|
||||
full_access: true
|
||||
map:
|
||||
- addon_config:rw
|
||||
name: NetAlertX
|
||||
name: NetAlertX Full Access
|
||||
panel_icon: mdi:wifi-check
|
||||
ports:
|
||||
20211/tcp: 20211
|
||||
@@ -43,4 +43,4 @@ slug: netalertx_fa
|
||||
tmpfs: true
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "26.3.16-6"
|
||||
version: "26.3.15"
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"last_update": "2026-03-07",
|
||||
"last_update": "2026-03-21",
|
||||
"paused": false,
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "netalertx_fa",
|
||||
"source": "github",
|
||||
"upstream_repo": "jokob-sk/NetAlertX",
|
||||
"upstream_version": "26.3.7"
|
||||
"upstream_version": "26.3.15"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## v26.0-ls234 (2026-03-21)
|
||||
- Update to latest version from linuxserver/docker-nzbget (changelog : https://github.com/linuxserver/docker-nzbget/releases)
|
||||
|
||||
## v26.0-ls233 (2026-03-07)
|
||||
- Update to latest version from linuxserver/docker-nzbget (changelog : https://github.com/linuxserver/docker-nzbget/releases)
|
||||
|
||||
|
||||
+1
-1
@@ -104,4 +104,4 @@ schema:
|
||||
slug: nzbget
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "v26.0-ls233"
|
||||
version: "v26.0-ls234"
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-03-07",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "nzbget",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-nzbget",
|
||||
"upstream_version": "v26.0-ls233"
|
||||
"upstream_version": "v26.0-ls234"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 17.2.2 (2026-03-21)
|
||||
- Update to latest version from opf/openproject (changelog : https://github.com/opf/openproject/releases)
|
||||
|
||||
## 17.2.0 (2026-03-14)
|
||||
- Update to latest version from opf/openproject (changelog : https://github.com/opf/openproject/releases)
|
||||
|
||||
|
||||
@@ -34,5 +34,5 @@ schema:
|
||||
slug: openproject
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/openproject
|
||||
version: "17.2.0"
|
||||
version: "17.2.2"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:8080]"
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "openproject",
|
||||
"source": "github",
|
||||
"upstream_repo": "opf/openproject",
|
||||
"upstream_version": "17.2.0"
|
||||
"upstream_version": "17.2.2"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 1.43.0.10492-121068a07-ls296 (2026-03-21)
|
||||
- Update to latest version from linuxserver/docker-plex (changelog : https://github.com/linuxserver/docker-plex/releases)
|
||||
|
||||
## 1.43.0.10492-121068a07-ls295 (2026-03-02)
|
||||
- Update to latest version from linuxserver/docker-plex (changelog : https://github.com/linuxserver/docker-plex/releases)
|
||||
|
||||
|
||||
+1
-1
@@ -175,6 +175,6 @@ slug: plex_nas
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/plex
|
||||
usb: true
|
||||
version: "1.43.0.10492-121068a07-ls295"
|
||||
version: "1.43.0.10492-121068a07-ls296"
|
||||
video: true
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:32400]/web"
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-03-02",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "plex",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-plex",
|
||||
"upstream_version": "1.43.0.10492-121068a07-ls295"
|
||||
"upstream_version": "1.43.0.10492-121068a07-ls296"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 2.39.1 (2026-03-21)
|
||||
- Update to latest version from portainer/portainer (changelog : https://github.com/portainer/portainer/releases)
|
||||
|
||||
## 2.39.0 (2026-02-28)
|
||||
- Update to latest version from portainer/portainer (changelog : https://github.com/portainer/portainer/releases)
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ ENV S6_CMD_WAIT_FOR_SERVICES=1 \
|
||||
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||
|
||||
# Setup base
|
||||
ARG BUILD_UPSTREAM="2.39.0"
|
||||
ARG BUILD_UPSTREAM="2.39.1"
|
||||
|
||||
# spellcheck disable=SC2015
|
||||
# hadolint ignore=SC2015
|
||||
|
||||
@@ -42,4 +42,4 @@ schema:
|
||||
slug: portainer
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "2.39.0"
|
||||
version: "2.39.1"
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_havingasset": "true",
|
||||
"last_update": "2026-02-28",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "portainer",
|
||||
"source": "github",
|
||||
"upstream_repo": "portainer/portainer",
|
||||
"upstream_version": "2.39.0"
|
||||
"upstream_version": "2.39.1"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## nightly-2.3.4.5308-ls226 (2026-03-21)
|
||||
- Update to latest version from linuxserver/docker-prowlarr (changelog : https://github.com/linuxserver/docker-prowlarr/releases)
|
||||
|
||||
## nightly-2.3.3.5300-ls226 (2026-03-14)
|
||||
- Update to latest version from linuxserver/docker-prowlarr (changelog : https://github.com/linuxserver/docker-prowlarr/releases)
|
||||
|
||||
|
||||
@@ -110,5 +110,5 @@ schema:
|
||||
slug: prowlarr
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "nightly-2.3.3.5300-ls226"
|
||||
version: "nightly-2.3.4.5308-ls226"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:9696]"
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"github_beta": "true",
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "prowlarr",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-prowlarr",
|
||||
"upstream_version": "nightly-2.3.3.5300-ls226"
|
||||
"upstream_version": "nightly-2.3.4.5308-ls226"
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
## 5.1.4-18 (22-03-2026)
|
||||
- Minor bugs fixed
|
||||
## 5.1.4-17 (17-02-2026)
|
||||
- Minor bugs fixed
|
||||
## 5.1.4-16 (16-02-2026)
|
||||
|
||||
@@ -113,7 +113,7 @@ RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_auto
|
||||
# && chmod a+x /etc/s6-overlay/s6-rc.d/$SCRIPTSNAME/* ; done; fi
|
||||
|
||||
# Manual apps
|
||||
ARG PACKAGES="ipcalc wireguard-tools"
|
||||
ARG PACKAGES="ipcalc wireguard-tools libnatpmp iptables ip6tables"
|
||||
|
||||
# Automatic apps & bashio
|
||||
ADD "https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/.templates/ha_autoapps.sh" "/ha_autoapps.sh"
|
||||
|
||||
@@ -131,6 +131,7 @@ schema:
|
||||
openvpn_enabled: bool?
|
||||
openvpn_password: str?
|
||||
openvpn_username: str?
|
||||
vpn_upnp_enabled: bool?
|
||||
qbit_manage: bool?
|
||||
run_duration: str?
|
||||
silent: bool?
|
||||
@@ -142,4 +143,4 @@ schema:
|
||||
slug: qbittorrent
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "5.1.4-17"
|
||||
version: "5.1.4-18"
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
set -euo pipefail
|
||||
|
||||
if ! bashio::config.true 'openvpn_enabled' && ! bashio::config.true 'wireguard_enabled'; then
|
||||
# No VPN enabled: remove UPnP service to avoid unnecessary restarts
|
||||
rm -rf /etc/services.d/vpn-upnp
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! bashio::config.true 'vpn_upnp_enabled'; then
|
||||
# UPnP not enabled: remove UPnP service to avoid unnecessary restarts
|
||||
rm -rf /etc/services.d/vpn-upnp
|
||||
exit 0
|
||||
fi
|
||||
@@ -178,7 +178,7 @@ read -r VPN_IP VPN_COUNTRY <<< "${VPN_INFO_OUT}"
|
||||
bashio::log.info "VPN external IP: ${VPN_IP} (${VPN_COUNTRY})"
|
||||
|
||||
while true; do
|
||||
sleep "${VPN_CHECK_INTERVAL}"
|
||||
sleep "${VPN_CHECK_INTERVAL}" & wait $!
|
||||
|
||||
if ! current_out="$(get_ip_info)"; then
|
||||
bashio::log.warning "Failed to refresh external IP; keeping previous assumptions."
|
||||
|
||||
@@ -0,0 +1,265 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
set -euo pipefail
|
||||
|
||||
export PATH="/usr/local/sbin:/usr/local/bin:${PATH}"
|
||||
|
||||
VPN_UPNP_INTERVAL="${VPN_UPNP_INTERVAL:-90}"
|
||||
|
||||
# -------------------------------
|
||||
# Helpers
|
||||
# -------------------------------
|
||||
|
||||
declare -A config
|
||||
config["MySelf"]="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
|
||||
|
||||
_parse_config() {
|
||||
local config_file="$1"
|
||||
local -A config_keys=(
|
||||
["UseHttps"]="HTTPS\\\\Enabled"
|
||||
["Server"]="WebUI\\\\Address"
|
||||
["Port"]="WebUI\\\\Port"
|
||||
["User"]="WebUI\\\\Username"
|
||||
["Pass"]="WebUI\\\\Password"
|
||||
["Interface"]="Connection\\\\Interface"
|
||||
["UPnP"]="Connection\\\\UPnP"
|
||||
["TorrentPort"]="Session\\\\Port"
|
||||
)
|
||||
|
||||
config["UseHttps"]="false"
|
||||
config["Schema"]="http"
|
||||
config["Server"]="127.0.0.1"
|
||||
config["Port"]="8080"
|
||||
config["User"]="admin"
|
||||
config["Pass"]="adminadmin"
|
||||
config["Interface"]=""
|
||||
config["UPnP"]="false"
|
||||
config["SID"]=""
|
||||
config["UPnPPort"]="0"
|
||||
config["IPv4Gateway"]=""
|
||||
config["IPv4Enabled"]="false"
|
||||
config["IPv6Enabled"]="false"
|
||||
config["TorrentPort"]=$(shuf -i 49152-65535 -n 1)
|
||||
|
||||
for key in "${!config_keys[@]}"; do
|
||||
if ! grep -qP "^\s*${config_keys[$key]}\s*=\s*\S+" "${config_file}"; then
|
||||
continue
|
||||
fi
|
||||
config["${key}"]=$(grep -oP "^\s*${config_keys[$key]}\s*=\s*\K\S+" "${config_file}")
|
||||
done
|
||||
|
||||
if [ "${config["UseHttps"]}" = "true" ]; then
|
||||
config["Schema"]="https"
|
||||
else
|
||||
config["Schema"]="http"
|
||||
fi
|
||||
|
||||
if [ "${config["Server"]}" = "*" ]; then
|
||||
config["Server"]="127.0.0.1"
|
||||
fi
|
||||
|
||||
if [ "${config["TorrentPort"]}" = "6881" ]; then
|
||||
bashio::log.debug 'Torrent Port is default (6881), selecting a random port.'
|
||||
config["TorrentPort"]=$(shuf -i 49152-65535 -n 1)
|
||||
fi
|
||||
|
||||
for key in "${!config[@]}"; do
|
||||
bashio::log.debug "Config key: $key, value: ${config[$key]}"
|
||||
done
|
||||
|
||||
if [ -z "${config["Server"]}" ] || [ -z "${config["Port"]}" ] || [ -z "${config["User"]}" ] || [ -z "${config["Pass"]}" ] || [ -z "${config["Interface"]}" ]; then
|
||||
bashio::exit.nok 'qBittorrent WebUI configuration not found or incomplete. Please check your qBittorrent.conf.'
|
||||
fi
|
||||
}
|
||||
|
||||
_cmd() {
|
||||
cmd="$1"
|
||||
bashio::log.debug "Executing command: ${cmd}"
|
||||
eval "${cmd}"
|
||||
}
|
||||
|
||||
_pnat_get_gw() {
|
||||
local vpn_if_hex_addr=''
|
||||
local ipv4
|
||||
local vpn_if_hex_addr=$(grep ${config["Interface"]} /proc/net/route | awk '$2 == "00000000" { print $3 }')
|
||||
local local_ipv4=$(ip addr show ${config["Interface"]} | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)
|
||||
local local_ipv6=$(ip addr show ${config["Interface"]} | grep 'inet6 ' | awk '{print $2}' | cut -d'/' -f1)
|
||||
if [ -n "${local_ipv4}" ]; then
|
||||
config["IPv4Enabled"]="true"
|
||||
fi
|
||||
if [ -n "${local_ipv6}" ]; then
|
||||
config["IPv6Enabled"]="true"
|
||||
fi
|
||||
|
||||
if [ -n "${vpn_if_hex_addr}" ]; then
|
||||
#shellcheck disable=SC2046
|
||||
config["IPv4Gateway"]=$(printf "%d." $(echo "${vpn_if_hex_addr}" | sed 's/../0x& /g' | tr ' ' '\n' | tac) | sed 's/\.$/\n/')
|
||||
return 0
|
||||
elif [ -n "${local_ipv4}" ]; then
|
||||
for ipv4 in ${local_ipv4}; do
|
||||
for n in {1..254}; do
|
||||
local try_ip="$(echo "${ipv4}" | cut -d'.' -f1-3).${n}"
|
||||
if [ "${try_ip}" != "${ipv4}" ]; then
|
||||
if nc -4 -vw1 "${try_ip}" 1 &>/dev/null 2>&1; then
|
||||
config["IPv4Gateway"]=${try_ip}
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
_pnat_get_port() {
|
||||
if [ "${config["IPv4Enabled"]}" = "true" ]; then
|
||||
bashio::log.debug "Attempting to set uPNP port mapping for IPv4 via NAT-PMP"
|
||||
# shellcheck disable=SC2086
|
||||
_cmd "timeout 10s natpmpc -g ${config["IPv4Gateway"]} -a 1 0 udp ${config["Interval"]} >/dev/null 2>&1" || return 1
|
||||
# shellcheck disable=SC2086
|
||||
if [ "${config["UPnPPort"]}" = "0" ]; then
|
||||
config["TorrentPort"]="0"
|
||||
fi
|
||||
config["UPnPPort"]=$(_cmd "timeout 10s natpmpc -g ${config["IPv4Gateway"]} -a 1 0 tcp ${config["Interval"]} | grep -oP '(?<=Mapped public port.).*(?=.protocol.*)'")
|
||||
return $?
|
||||
elif [ "${config["IPv6Enabled"]}" = "true" ]; then
|
||||
if [ "${config["UPnPPort"]}" = "0" ]; then
|
||||
config["UPnPPort"]=${config["TorrentPort"]}
|
||||
config["TorrentPort"]="0"
|
||||
else
|
||||
config["UPnPPort"]=${config["TorrentPort"]}
|
||||
fi
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
_pnat_set_firewall() {
|
||||
if [ "${config["IPv4Enabled"]}" = "true" ]; then
|
||||
_cmd "iptables -F pnat 2>/dev/null" || true
|
||||
_cmd "iptables -A pnat -p tcp --dport ${config["UPnPPort"]} -j ACCEPT" || return 1
|
||||
_cmd "iptables -A pnat -p udp --dport ${config["UPnPPort"]} -j ACCEPT" || return 1
|
||||
fi
|
||||
if [ "${config["IPv6Enabled"]}" = "true" ]; then
|
||||
_cmd "ip6tables -F pnat 2>/dev/null" || true
|
||||
_cmd "ip6tables -A pnat -p tcp --dport ${config["UPnPPort"]} -j ACCEPT" || return 1
|
||||
_cmd "ip6tables -A pnat -p udp --dport ${config["UPnPPort"]} -j ACCEPT" || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# --- qBittorrent Specific Logic ---
|
||||
|
||||
_qbt_login() {
|
||||
config["SID"]=$(_cmd "curl -s -k -i --header \"Referer: ${config["Schema"]}://${config["Server"]}:${config["Port"]}\" --data \"username=${config["User"]}\" --data-urlencode \"password=${config["Pass"]}\" \"${config["Schema"]}://${config["Server"]}:${config["Port"]}/api/v2/auth/login\" | grep -oP '(?!set-cookie:.)SID=.*(?=\;.HttpOnly\;)'")
|
||||
return $?
|
||||
}
|
||||
|
||||
_qbt_set_port() {
|
||||
_cmd "curl -s -k -i --header \"Referer: ${config["Schema"]}://${config["Server"]}:${config["Port"]}\" --cookie \"${config["SID"]}\" --data-urlencode \"json={\\\"listen_port\\\":${config["UPnPPort"]},\\\"random_port\\\":false,\\\"upnp\\\":false}\" \"${config["Schema"]}://${config["Server"]}:${config["Port"]}/api/v2/app/setPreferences\" >/dev/null 2>&1"
|
||||
return $?
|
||||
}
|
||||
|
||||
_qbt_get_port() {
|
||||
config["TorrentPort"]=$(_cmd "curl -s -k -i --header \"Referer: ${config["Schema"]}://${config["Server"]}:${config["Port"]}\" --cookie \"${config["SID"]}\" \"${config["Schema"]}://${config["Server"]}:${config["Port"]}/api/v2/app/preferences\" | grep -oP '(?<=\"listen_port\"\\:)(\\d{1,5})'")
|
||||
return $?
|
||||
}
|
||||
|
||||
_qbt_check_sid() {
|
||||
if _cmd "curl -s -k --header \"Referer: ${config["Schema"]}://${config["Server"]}:${config["Port"]}\" --cookie \"${config["SID"]}\" \"${config["Schema"]}://${config["Server"]}:${config["Port"]}/api/v2/app/version\" | grep -qi forbidden"; then
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
_qbt_isreachable(){
|
||||
_cmd "nc -4 -vw 5 ${config["Server"]} ${config["Port"]} &>/dev/null 2>&1"
|
||||
return $?
|
||||
}
|
||||
|
||||
# --- Main Logic ---
|
||||
|
||||
pnat_set() {
|
||||
if [ -z "${config["SID"]}" ]; then
|
||||
bashio::log.info "qBittorrent SessionID not set, getting new SessionID"
|
||||
if ! _qbt_login; then
|
||||
bashio::log.error "Failed getting new SessionID from qBittorrent"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
if ! _qbt_check_sid; then
|
||||
bashio::log.info "qBittorrent Cookie invalid, getting new SessionID"
|
||||
if ! _qbt_login; then
|
||||
bashio::log.error "Failed getting new SessionID from qBittorrent"
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
bashio::log.debug "qBittorrent SessionID Ok!"
|
||||
fi
|
||||
fi
|
||||
if _qbt_get_port; then
|
||||
bashio::log.debug "Configured Torrent Port: ${config["TorrentPort"]}"
|
||||
else
|
||||
bashio::log.error "Failed to get current Torrent Port configuration"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ -z "${config["IPv4Gateway"]}" ]; then
|
||||
bashio::log.info "VPN Gateway not know, will try to detect it."
|
||||
if ! _pnat_get_gw; then
|
||||
bashio::log.error "Failed to determine VPN gateway IP address. Cannot perform NAT-PMP/UPnP port mapping."
|
||||
return 1
|
||||
else
|
||||
bashio::log.info "VPN Gateway detected: ${config["IPv4Gateway"]}"
|
||||
fi
|
||||
fi
|
||||
if _pnat_get_port; then
|
||||
bashio::log.debug "Active uPNP Port: ${config["UPnPPort"]}"
|
||||
else
|
||||
bashio::log.error "Failed to get current uPNP port mapping"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "${config["TorrentPort"]}" != "${config["UPnPPort"]}" ]; then
|
||||
bashio::log.info "Changing Torrent port"
|
||||
if _qbt_set_port; then
|
||||
if _pnat_set_firewall; then
|
||||
bashio::log.info "IPTables rule added for Torrent port ${config["UPnPPort"]}"
|
||||
else
|
||||
bashio::log.error "Failed to set firewall rules for Torrent port ${config["UPnPPort"]}"
|
||||
return 1
|
||||
fi
|
||||
bashio::log.info "Torrent Port Changed to: ${config["UPnPPort"]}"
|
||||
else
|
||||
bashio::log.error "Torrent Port Change failed."
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
bashio::log.debug "Torrent Port OK (Act: ${config["UPnPPort"]} Cfg: ${config["TorrentPort"]})"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# -------------------------------
|
||||
# Main logic
|
||||
# -------------------------------
|
||||
|
||||
_parse_config "/config/qBittorrent/qBittorrent.conf"
|
||||
|
||||
config["Interval"]=$(( ${VPN_UPNP_INTERVAL} + (${VPN_UPNP_INTERVAL} / 2) ))
|
||||
|
||||
bashio::log.info "VPN UPnP enabled, starting NAT-PMP/UPnP monitor with an interval of ${VPN_UPNP_INTERVAL} seconds (UPnP lease interval: ${config["Interval"]} seconds)."
|
||||
|
||||
while true;
|
||||
do
|
||||
sleep ${VPN_UPNP_INTERVAL} & wait $!
|
||||
|
||||
if pnat_set; then
|
||||
bashio::log.info "NAT-PMP/UPnP Ok!"
|
||||
else
|
||||
bashio::log.error "NAT-PMP/UPnP Failed"
|
||||
fi
|
||||
done
|
||||
@@ -40,6 +40,7 @@ _parse_config() {
|
||||
}
|
||||
|
||||
_parse_dns() {
|
||||
local dns_ip
|
||||
local -a dns_conf=()
|
||||
local -a dns_backup_ipv4=("8.8.8.8" "1.1.1.1")
|
||||
local -a dns_backup_ipv6=("2001:4860:4860::8888" "2606:4700:4700::1111")
|
||||
@@ -155,19 +156,24 @@ _routing_add() {
|
||||
local local_ipv6=$(ip addr show ${config["Interface"]} | grep 'inet6 ' | awk '{print $2}' | cut -d'/' -f1)
|
||||
local ipv4
|
||||
local ipv6
|
||||
local dns_ip
|
||||
|
||||
# add routing rules for local IPs
|
||||
for ipv4 in ${local_ipv4}; do
|
||||
config["IPv4Enabled"]="true"
|
||||
_cmd "ip -4 route add default dev ${config["Interface"]} table ${config["Table"]}" || return 1
|
||||
_cmd "ip -4 rule add priority 1 from ${ipv4} table ${config["Table"]}" || return 1
|
||||
_cmd "ip -4 rule add priority 1 to ${ipv4}/24 table ${config["Table"]}" || return 1
|
||||
done
|
||||
if [ "${config["IPv4Enabled"]}" = "true" ]; then
|
||||
_cmd "ip -4 route add default dev ${config["Interface"]} table ${config["Table"]}" || return 1
|
||||
fi
|
||||
for ipv6 in ${local_ipv6}; do
|
||||
config["IPv6Enabled"]="true"
|
||||
_cmd "ip -6 rule add priority 1 from ${ipv6} table ${config["Table"]}" || return 1
|
||||
_cmd "ip -6 rule add priority 1 to ${ipv6}/64 table ${config["Table"]}" || return 1
|
||||
done
|
||||
if [ "${config["IPv6Enabled"]}" = "true" ]; then
|
||||
_cmd "ip -6 route add default dev ${config["Interface"]} table ${config["Table"]}" || true
|
||||
_cmd "ip -6 route add default dev ${config["Interface"]} table ${config["Table"]}" || return 1
|
||||
fi
|
||||
|
||||
# get valid DNS servers
|
||||
@@ -182,15 +188,11 @@ _routing_add() {
|
||||
#_cmd "ip -6 route add ${dns_ip} dev ${config["Interface"]}" || return 1
|
||||
_cmd "ip -6 rule add priority 1 to ${dns_ip} table ${config["Table"]}" || return 1
|
||||
done
|
||||
|
||||
# Update resolv.conf with VPN DNS servers
|
||||
_resolvconf "update"
|
||||
}
|
||||
|
||||
_routing_del() {
|
||||
bashio::log.info "Removing routing rules for VPN interface ${config["Interface"]}..."
|
||||
|
||||
_resolvconf "reset"
|
||||
while _cmd "ip -4 rule del priority 1 from all table ${config["Table"]} 2>/dev/null"; do :; done
|
||||
while _cmd "ip -4 rule del priority 1 to all table ${config["Table"]} 2>/dev/null"; do :; done
|
||||
while _cmd "ip -4 route del default dev ${config["Interface"]} table ${config["Table"]} 2>/dev/null"; do :; done
|
||||
@@ -199,20 +201,52 @@ _routing_del() {
|
||||
while _cmd "ip -6 route del default dev ${config["Interface"]} table ${config["Table"]} 2>/dev/null"; do :; done
|
||||
}
|
||||
|
||||
# --- Firewall Specific Functions ---
|
||||
|
||||
_firewall_add() {
|
||||
if [ "${config["IPv4Enabled"]}" = "true" ]; then
|
||||
_cmd "iptables -N pnat" || return 1
|
||||
_cmd "iptables -A INPUT -i ${config["Interface"]} -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT" || return 1
|
||||
_cmd "iptables -A INPUT -i ${config["Interface"]} -p icmp -j ACCEPT" || return 1
|
||||
_cmd "iptables -A INPUT -i ${config["Interface"]} -j pnat" || return 1
|
||||
_cmd "iptables -A INPUT -i ${config["Interface"]} -j DROP" || return 1
|
||||
fi
|
||||
|
||||
if [ "${config["IPv6Enabled"]}" = "true" ]; then
|
||||
_cmd "ip6tables -N pnat" || return 1
|
||||
_cmd "ip6tables -A INPUT -i ${config["Interface"]} -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT" || return 1
|
||||
_cmd "ip6tables -A INPUT -i ${config["Interface"]} -p icmpv6 -j ACCEPT" || return 1
|
||||
_cmd "ip6tables -A INPUT -i ${config["Interface"]} -j pnat" || return 1
|
||||
_cmd "ip6tables -A INPUT -i ${config["Interface"]} -j DROP" || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
_firewall_del() {
|
||||
if [ "${config["IPv4Enabled"]}" = "true" ]; then
|
||||
_cmd "iptables -F INPUT" || true
|
||||
_cmd "iptables -F pnat" || true
|
||||
_cmd "iptables -X pnat" || true
|
||||
fi
|
||||
|
||||
if [ "${config["IPv6Enabled"]}" = "true" ]; then
|
||||
_cmd "ip6tables -F INPUT" || true
|
||||
_cmd "ip6tables -F pnat" || true
|
||||
_cmd "ip6tables -X pnat" || true
|
||||
fi
|
||||
}
|
||||
|
||||
# --- WireGuard Specific Logic ---
|
||||
|
||||
_wg_wait_handshake() {
|
||||
_wireguard_check() {
|
||||
local timeout="${1:-20}"
|
||||
local iface="${config["Interface"]}"
|
||||
local peer_pk="${config["PublicKey"]}"
|
||||
local deadline ts
|
||||
|
||||
deadline=$(( $(date +%s) + timeout ))
|
||||
|
||||
while [ "$(date +%s)" -lt "${deadline}" ]; do
|
||||
ping -I "${iface}" -c1 -W1 1.1.1.1 >/dev/null 2>&1 || true
|
||||
ping -I "${config["Interface"]}" -c1 -W1 1.1.1.1 >/dev/null 2>&1 || true
|
||||
|
||||
ts="$(wg show "${iface}" latest-handshakes 2>/dev/null | awk -v pk="${peer_pk}" '$1==pk{print $2; exit}')"
|
||||
ts="$(wg show "${config["Interface"]}" latest-handshakes 2>/dev/null | awk -v pk="${config["PublicKey"]}" '$1==pk{print $2; exit}')"
|
||||
if [ -n "${ts}" ] && [ "${ts}" -gt 0 ] 2>/dev/null; then
|
||||
return 0
|
||||
fi
|
||||
@@ -220,17 +254,25 @@ _wg_wait_handshake() {
|
||||
done
|
||||
|
||||
bashio::log.error "WireGuard handshake not established after ${timeout}s (latest-handshake=${ts:-0})."
|
||||
wg show "${iface}" 2>&1 | while IFS= read -r l; do bashio::log.error "${l}"; done
|
||||
wg show "${config["Interface"]}" 2>&1 | while IFS= read -r l; do bashio::log.error "${l}"; done
|
||||
return 1
|
||||
}
|
||||
|
||||
_wireguard_up() {
|
||||
local local_ip
|
||||
local -a local_ips=()
|
||||
local -A local_ip_types=()
|
||||
local allowed_ip
|
||||
local -a allowed_ips=()
|
||||
local -A allowed_ip_types=()
|
||||
local key
|
||||
|
||||
bashio::log.warning "This script force Wireguard to ignore any routes and DNS settings."
|
||||
bashio::log.warning "Default route will be inserted into custom routing table: ${config["Table"]}"
|
||||
bashio::log.warning "This routing table will be used for traffic from the VPN interface and to the configured DNS servers."
|
||||
bashio::log.warning "Qbittorrent bittorrent client shall be set to use the VPN interface ${config["Interface"]} only."
|
||||
|
||||
for key in "Interface" "ListenPort" "PrivateKey" "PublicKey" "EndpointIP" "EndpointPort" ; do
|
||||
for key in "Interface" "ListenPort" "PrivateKey" "PublicKey" "EndpointIP" "EndpointPort" "Address"; do
|
||||
if [ ! -v config[$key] ] || [ -z "${config[$key]}" ]; then
|
||||
bashio::log.error "Missing required WireGuard configuration parameter: ${key}"
|
||||
return 1
|
||||
@@ -238,28 +280,51 @@ _wireguard_up() {
|
||||
done
|
||||
|
||||
_cmd "ip link add ${config["Interface"]} type wireguard" || return 1
|
||||
local allowed_ips=""
|
||||
local -a local_ips=()
|
||||
|
||||
mapfile -d ',' -t local_ips < <(echo "${config["Address"]}" | tr -d ' ')
|
||||
for local_ip in ${local_ips[@]}; do
|
||||
local result=0
|
||||
_check_host "${local_ip}" || result=$?
|
||||
if [ "${result}" -eq 1 ]; then
|
||||
allowed_ips="${allowed_ips},0.0.0.0/0"
|
||||
config["IPv4Enabled"]="true"
|
||||
local_ip_types["${local_ip}"]="ipv4"
|
||||
allowed_ip_types["0.0.0.0/0"]="ipv4"
|
||||
_cmd "ip addr add ${local_ip} dev ${config["Interface"]}" || return 1
|
||||
elif [ "${result}" -eq 2 ]; then
|
||||
allowed_ips="${allowed_ips},::/0"
|
||||
config["IPv6Enabled"]="true"
|
||||
local_ip_types["${local_ip}"]="ipv6"
|
||||
_cmd "ip addr add ${local_ip} dev ${config["Interface"]}" || return 1
|
||||
else
|
||||
bashio::log.warning "Ignoring invalid local IP address: ${local_ip}"
|
||||
fi
|
||||
done
|
||||
allowed_ips="${allowed_ips#,}"
|
||||
if [ -z "${allowed_ips}" ]; then
|
||||
bashio::log.error "No valid local IP addresses configured."
|
||||
if [ ${#local_ip_types[@]} -eq 0 ]; then
|
||||
bashio::log.error "No valid local IP addresses configured for WireGuard interface."
|
||||
return 1
|
||||
fi
|
||||
|
||||
mapfile -d ',' -t allowed_ips < <(echo "${config["Address"]}" | tr -d ' ')
|
||||
for allowed_ip in ${allowed_ips[@]}; do
|
||||
local result=0
|
||||
_check_host "${allowed_ip}" || result=$?
|
||||
if [ "${result}" -eq 1 ] && [ "${config["IPv4Enabled"]}" == "true" ]; then
|
||||
allowed_ip_types["${allowed_ip}"]="ipv4"
|
||||
#allowed_ip_types["0.0.0.0/0"]="ipv4"
|
||||
elif [ "${result}" -eq 2 ] && [ "${config["IPv6Enabled"]}" == "true" ]; then
|
||||
allowed_ip_types["${allowed_ip}"]="ipv6"
|
||||
#allowed_ip_types["::/0"]="ipv6"
|
||||
else
|
||||
bashio::log.error "Invalid allowed IP address: ${allowed_ip}"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
if [ ${#allowed_ip_types[@]} -eq 0 ]; then
|
||||
bashio::log.error "No valid allowed IP addresses configured for WireGuard peer."
|
||||
return 1
|
||||
fi
|
||||
printf -v allowed_ips '%s,' "${!allowed_ip_types[@]}"
|
||||
allowed_ips="${allowed_ips%,}"
|
||||
|
||||
_cmd "wg set ${config["Interface"]} listen-port ${config["ListenPort"]} private-key ${config["PrivateKey"]}" || return 1
|
||||
local endpoint="${config["EndpointIP"]}:${config["EndpointPort"]}"
|
||||
if [[ "${config["EndpointIP"]}" == *:* ]]; then
|
||||
@@ -279,18 +344,32 @@ _wireguard_up() {
|
||||
fi
|
||||
|
||||
_cmd "ip link set ${config["Interface"]} up" || return 1
|
||||
_routing_add
|
||||
_wg_wait_handshake 10 || return 1
|
||||
|
||||
# Add routing rules for VPN interface and DNS servers
|
||||
_routing_add || return 1
|
||||
# Add firewall rules for VPN interface
|
||||
_firewall_add || return 1
|
||||
# Update resolv.conf with VPN DNS servers
|
||||
_resolvconf "update" || return 1
|
||||
# Wait for handshake to be established before returning success
|
||||
_wireguard_check 10 || return 1
|
||||
}
|
||||
|
||||
_wireguard_down() {
|
||||
_routing_del
|
||||
# Update resolv.conf to remove VPN DNS servers
|
||||
_resolvconf "reset" || true
|
||||
# Remove routing rules for VPN interface and DNS servers
|
||||
_routing_del || true
|
||||
# Remove firewall rules for VPN interface
|
||||
_firewall_del || true
|
||||
|
||||
_cmd "ip link set ${config["Interface"]} down" 2>/dev/null || true
|
||||
_cmd "ip link del ${config["Interface"]}" 2>/dev/null || true
|
||||
}
|
||||
|
||||
wireguard() {
|
||||
local mode=$1
|
||||
local key
|
||||
local interface
|
||||
local config_file
|
||||
local WIREGUARD_STATE_DIR="/var/run/wireguard"
|
||||
@@ -328,7 +407,7 @@ wireguard() {
|
||||
printf '%s\n' "${config["PrivateKey"]}" > "${WIREGUARD_STATE_DIR}/privatekey"
|
||||
chmod 600 "${WIREGUARD_STATE_DIR}/privatekey" || true
|
||||
config["PrivateKey"]="${WIREGUARD_STATE_DIR}/privatekey"
|
||||
|
||||
|
||||
if [ -n "${config["PresharedKey"]:-}" ]; then
|
||||
printf '%s\n' "${config["PresharedKey"]}" > "${WIREGUARD_STATE_DIR}/presharedkey"
|
||||
chmod 600 "${WIREGUARD_STATE_DIR}/presharedkey" || true
|
||||
@@ -384,6 +463,23 @@ wireguard() {
|
||||
|
||||
# --- OpenVPN Specific Logic ---
|
||||
|
||||
_openvpn_check() {
|
||||
local timeout="${1:-20}"
|
||||
local deadline ts
|
||||
|
||||
deadline=$(( $(date +%s) + timeout ))
|
||||
|
||||
while [ "$(date +%s)" -lt "${deadline}" ]; do
|
||||
if ip link show "${config["Interface"]}" > /dev/null 2>&1 ; then
|
||||
return 0
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
|
||||
bashio::log.error "OpenVPN interface ${config["Interface"]} failed to come up after ${timeout}s."
|
||||
return 1
|
||||
}
|
||||
|
||||
_openvpn_up() {
|
||||
bashio::log.warning "This script force OpenvPN to ignore any routes and DNS settings pushed by the server."
|
||||
bashio::log.warning "Default route will be inserted into custom routing table: ${config["Table"]}"
|
||||
@@ -418,21 +514,31 @@ _openvpn_up() {
|
||||
--route-nopull \
|
||||
--route-noexec" || return 1
|
||||
|
||||
#wait for slow OpenVPN interface to come up
|
||||
for i in {1..10}; do
|
||||
if ip link show "${config["Interface"]}" > /dev/null 2>&1 ; then
|
||||
return 0
|
||||
fi
|
||||
sleep 2
|
||||
done
|
||||
bashio::log.error "OpenVPN interface ${config["Interface"]} failed to come up."
|
||||
return 1
|
||||
# Wait for the VPN interface to come up
|
||||
_openvpn_check 30 || return 1
|
||||
}
|
||||
|
||||
_openvpn_down() {
|
||||
# Terminate OpenVPN process
|
||||
pkill -f "openvpn --config ${config["ConfigFile"]}" || true
|
||||
_routing_del
|
||||
}
|
||||
|
||||
_openpvn_postup() {
|
||||
# Add routing rules for VPN interface and DNS servers
|
||||
_routing_add || return 1
|
||||
# Add firewall rules for VPN interface
|
||||
_firewall_add || return 1
|
||||
# Update resolv.conf with VPN DNS servers
|
||||
_resolvconf "update" || return 1
|
||||
}
|
||||
|
||||
_openpvn_postdown() {
|
||||
# Update resolv.conf to remove VPN DNS servers
|
||||
_resolvconf "reset" || true
|
||||
# Remove routing rules for VPN interface and DNS servers
|
||||
_routing_del || true
|
||||
# Remove firewall rules for VPN interface
|
||||
_firewall_del || true
|
||||
}
|
||||
|
||||
openvpn() {
|
||||
@@ -480,10 +586,10 @@ openvpn() {
|
||||
bashio::log.info "OpenVPN on interface ${config["Interface"]} is down."
|
||||
bashio::exit.ok 'OpenVPN stopped.'
|
||||
elif [ "${mode}" = "postup" ]; then
|
||||
_routing_add
|
||||
_openpvn_postup
|
||||
bashio::exit.ok 'OpenVPN routes added.'
|
||||
elif [ "${mode}" = "postdown" ]; then
|
||||
_routing_del
|
||||
_openpvn_postdown
|
||||
bashio::exit.ok 'OpenVPN routes deleted.'
|
||||
else
|
||||
bashio::log.error "Invalid OpenVPN mode specified. Use 'up', 'down', 'postup', or 'postdown'."
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## v1.47.1 (2026-03-21)
|
||||
- Update to latest version from Starosdev/scrutiny (changelog : https://github.com/Starosdev/scrutiny/releases)
|
||||
|
||||
## v1.46.2 (2026-03-14)
|
||||
- Update to latest version from Starosdev/scrutiny (changelog : https://github.com/Starosdev/scrutiny/releases)
|
||||
|
||||
|
||||
@@ -113,4 +113,4 @@ schema:
|
||||
slug: scrutiny
|
||||
udev: true
|
||||
url: https://github.com/Starosdev/scrutiny
|
||||
version: "v1.46.2"
|
||||
version: "v1.47.1"
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"paused": false,
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "scrutiny",
|
||||
"source": "github",
|
||||
"upstream_repo": "Starosdev/scrutiny",
|
||||
"upstream_version": "v1.46.2"
|
||||
"upstream_version": "v1.47.1"
|
||||
}
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## v1.47.1 (2026-03-21)
|
||||
- Update to latest version from Starosdev/scrutiny (changelog : https://github.com/Starosdev/scrutiny/releases)
|
||||
|
||||
## v1.46.2 (2026-03-14)
|
||||
- Update to latest version from Starosdev/scrutiny (changelog : https://github.com/Starosdev/scrutiny/releases)
|
||||
|
||||
|
||||
@@ -45,4 +45,4 @@ schema:
|
||||
slug: scrutiny_fa
|
||||
udev: true
|
||||
url: https://github.com/Starosdev/scrutiny
|
||||
version: "v1.46.2"
|
||||
version: "v1.47.1"
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-03-14",
|
||||
"last_update": "2026-03-21",
|
||||
"paused": false,
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "scrutiny_fa",
|
||||
"source": "github",
|
||||
"upstream_repo": "Starosdev/scrutiny",
|
||||
"upstream_version": "v1.46.2"
|
||||
"upstream_version": "v1.47.1"
|
||||
}
|
||||
+5
-1
@@ -1,5 +1,9 @@
|
||||
|
||||
## 3.1.0 (2026-02-28)
|
||||
## 3.1.0-2 (22-03-2026)
|
||||
- Added configurable `NODE_MEMORY_LIMIT` option (default 512 MB) to control Node.js heap size and prevent OOM kills
|
||||
|
||||
## 3.1.0 (22-03-2026)
|
||||
- Set default Node.js memory limit (512MB) to prevent OOM kills that caused the addon to stop responding
|
||||
- Update to latest version from seerr-team/seerr (changelog : https://github.com/seerr-team/seerr/releases)
|
||||
|
||||
## 3.0.1 (2026-02-21)
|
||||
|
||||
@@ -26,6 +26,7 @@ Use `env_vars` to pass extra environment variables when needed. Seerr configurat
|
||||
|
||||
| Option | Type | Default | Description |
|
||||
|--------|------|---------|-------------|
|
||||
| `NODE_MEMORY_LIMIT` | int | `512` | Maximum Node.js heap memory in MB. Increase if Seerr crashes with large libraries; decrease on memory-constrained systems. |
|
||||
| `PGID` | int | `0` | Group ID for file permissions |
|
||||
| `PUID` | int | `0` | User ID for file permissions |
|
||||
| `TZ` | str | | Timezone (e.g. `Europe/London`) |
|
||||
@@ -33,6 +34,7 @@ Use `env_vars` to pass extra environment variables when needed. Seerr configurat
|
||||
### Example
|
||||
|
||||
```yaml
|
||||
NODE_MEMORY_LIMIT: 512
|
||||
env_vars: []
|
||||
PGID: 0
|
||||
PUID: 0
|
||||
|
||||
+3
-1
@@ -74,6 +74,7 @@ map:
|
||||
- addon_config:rw
|
||||
name: Seerr
|
||||
options:
|
||||
NODE_MEMORY_LIMIT: 512
|
||||
env_vars: []
|
||||
PGID: "0"
|
||||
PUID: "0"
|
||||
@@ -87,10 +88,11 @@ schema:
|
||||
env_vars:
|
||||
- name: match(^[A-Za-z0-9_]+$)
|
||||
value: str?
|
||||
NODE_MEMORY_LIMIT: int
|
||||
PGID: int
|
||||
PUID: int
|
||||
TZ: str?
|
||||
slug: seerr
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/seerr
|
||||
version: "3.1.0"
|
||||
version: "3.1.0-2"
|
||||
@@ -4,5 +4,12 @@ set -e
|
||||
|
||||
cd /app || exit 1
|
||||
|
||||
# Set Node.js memory limit from addon option to prevent OOM kills
|
||||
# NODE_MEMORY_LIMIT is exported as env var by 00-global_var.sh from config.yaml
|
||||
MEMORY_LIMIT="${NODE_MEMORY_LIMIT:-512}"
|
||||
if [[ "${NODE_OPTIONS:-}" != *"max-old-space-size"* ]] && [[ "${NODE_OPTIONS:-}" != *"max_old_space_size"* ]]; then
|
||||
export NODE_OPTIONS="${NODE_OPTIONS:+${NODE_OPTIONS} }--max-old-space-size=${MEMORY_LIMIT}"
|
||||
fi
|
||||
|
||||
bashio::log.info "Starting Seerr..."
|
||||
exec npm start
|
||||
@@ -1,4 +1,7 @@
|
||||
|
||||
## 1.6.1 (2026-03-21)
|
||||
- Update to latest version from GerardPolloRebozado/social-to-mealie (changelog : https://github.com/GerardPolloRebozado/social-to-mealie/releases)
|
||||
|
||||
## 1.6.0 (2026-03-07)
|
||||
- Update to latest version from GerardPolloRebozado/social-to-mealie (changelog : https://github.com/GerardPolloRebozado/social-to-mealie/releases)
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: Social to Mealie
|
||||
version: "1.6.0"
|
||||
version: "1.6.1"
|
||||
slug: social_to_mealie
|
||||
description: Import recipes from social media directly into Mealie
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
|
||||
Loaded 100 of 118 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user