Compare commits

..

1 Commits

Author SHA1 Message Date
github-actions[bot]
b0c45804fe Update stargazer map & cache 2025-11-23 01:08:15 +00:00
52 changed files with 297 additions and 286 deletions

View File

@@ -197,6 +197,7 @@ Fabian-Eigenherd,Germany
Faithfinder,Canada
FallsSteven,
Felitendo,
Filipza,
Flipsoo,
FloppiTuna,United States
Fluffy-Bunny-23,
@@ -487,6 +488,7 @@ Rapozillha,Portugal
Raw2x2,
RdN-J,
RealJustMe,
Redmno,
Reiqu,Germany
RemcoSchrijver,Netherlands
Rene2302,
@@ -494,6 +496,7 @@ RescueWolf-Dreamwalker,
RhaaKaye,
RicLund,Canada
Richyread,
RimmeVG,
Rimpla,
Robbot,Ireland
RobertZwets,
@@ -581,6 +584,7 @@ Syuq,
T-I-M-O-T,
TCTnz,
THENEXTBIGTIME,
TS-1709,
TarrX,Germany
Tche333,
Tchoupinax,
@@ -814,6 +818,7 @@ bigsby-exe,United Kingdom
bilak,Czechia
bitDealer,
bjackerman,United States
bjoe10,
bkuri,Mexico
blackshoals,
blairun,
@@ -946,6 +951,7 @@ ctrlaltprocrastinate,
ctyfrank,
cuza,Cuba
cvladan,
cvroque,
cwmoriarty,
cy1798,
cyberjohn60,
@@ -1051,6 +1057,7 @@ dtrochow,
duckduckuk,United Kingdom
duhaijian,
dumbledorethor,
dutzi88,
duydo,Viet Nam
dwainegallimore,United Kingdom
dykandDK,
@@ -1094,6 +1101,7 @@ ettoreboy,
euneuneu,
evalevil,China
everconnectcn,
everestlion,
evertonerik,
evnb,United States
excodex,United Kingdom
@@ -1358,6 +1366,7 @@ jokob-sk,
joluas,
jonaslang1,Germany
jonathanweinberg,
jonbeckman,
jonssonjunior94,
joostiphone,
jopacar1,
@@ -1959,6 +1968,7 @@ starbuck93,United States
steef84,
stef-th,
stefangries,
steinmaerivoet,Belgium
stephenjharrington,
stepping-razor,Czechia
stetho,United Kingdom
@@ -2179,5 +2189,6 @@ zjw57,China
zking7,
zonorti,Germany
zr-idt,
zuranthus,Sweden
zweehn,
zymotik,Germany
1 username country
197 Faithfinder Canada
198 FallsSteven
199 Felitendo
200 Filipza
201 Flipsoo
202 FloppiTuna United States
203 Fluffy-Bunny-23
488 Raw2x2
489 RdN-J
490 RealJustMe
491 Redmno
492 Reiqu Germany
493 RemcoSchrijver Netherlands
494 Rene2302
496 RhaaKaye
497 RicLund Canada
498 Richyread
499 RimmeVG
500 Rimpla
501 Robbot Ireland
502 RobertZwets
584 T-I-M-O-T
585 TCTnz
586 THENEXTBIGTIME
587 TS-1709
588 TarrX Germany
589 Tche333
590 Tchoupinax
818 bilak Czechia
819 bitDealer
820 bjackerman United States
821 bjoe10
822 bkuri Mexico
823 blackshoals
824 blairun
951 ctyfrank
952 cuza Cuba
953 cvladan
954 cvroque
955 cwmoriarty
956 cy1798
957 cyberjohn60
1057 duckduckuk United Kingdom
1058 duhaijian
1059 dumbledorethor
1060 dutzi88
1061 duydo Viet Nam
1062 dwainegallimore United Kingdom
1063 dykandDK
1101 euneuneu
1102 evalevil China
1103 everconnectcn
1104 everestlion
1105 evertonerik
1106 evnb United States
1107 excodex United Kingdom
1366 joluas
1367 jonaslang1 Germany
1368 jonathanweinberg
1369 jonbeckman
1370 jonssonjunior94
1371 joostiphone
1372 jopacar1
1968 steef84
1969 stef-th
1970 stefangries
1971 steinmaerivoet Belgium
1972 stephenjharrington
1973 stepping-razor Czechia
1974 stetho United Kingdom
2189 zking7
2190 zonorti Germany
2191 zr-idt
2192 zuranthus Sweden
2193 zweehn
2194 zymotik Germany

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 329 KiB

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/hassio-addons/base-python/aarch64:stable",
"amd64": "ghcr.io/hassio-addons/base-python/amd64:stable"
}
"build_from": {
"aarch64": "ghcr.io/hassio-addons/base-python/aarch64:stable",
"amd64": "ghcr.io/hassio-addons/base-python/amd64:stable"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/autobrr/autobrr:latest",
"amd64": "ghcr.io/autobrr/autobrr:latest"
}
"build_from": {
"aarch64": "ghcr.io/autobrr/autobrr:latest",
"amd64": "ghcr.io/autobrr/autobrr:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/mralucarddante/baikal-docker-hass:latest",
"amd64": "ghcr.io/mralucarddante/baikal-docker-hass:latest"
}
"build_from": {
"aarch64": "ghcr.io/mralucarddante/baikal-docker-hass:latest",
"amd64": "ghcr.io/mralucarddante/baikal-docker-hass:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/bazarr:arm64v8-latest",
"amd64": "lscr.io/linuxserver/bazarr:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/bazarr:arm64v8-latest",
"amd64": "lscr.io/linuxserver/bazarr:amd64-latest"
}
}

View File

@@ -112,7 +112,6 @@ def automatic_mqtt_publish(file, detection, path):
mqttc.publish(mqtt_topic, json_bird, 1)
log.info("Posted to MQTT: ok")
# Create MQTT client using legacy callback API when available for
# compatibility with paho-mqtt >= 2.0
callback_api = getattr(mqtt, "CallbackAPIVersion", None)

0
emby/rootfs/etc/services.d/nginx/run Executable file → Normal file
View File

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "m4dm4rtig4n/myelectricaldata:latest",
"amd64": "m4dm4rtig4n/myelectricaldata:latest"
}
"build_from": {
"aarch64": "m4dm4rtig4n/myelectricaldata:latest",
"amd64": "m4dm4rtig4n/myelectricaldata:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "m4dm4rtig4n/myelectricaldata:latest-dev",
"amd64": "m4dm4rtig4n/myelectricaldata:latest-dev"
}
"build_from": {
"aarch64": "m4dm4rtig4n/myelectricaldata:latest-dev",
"amd64": "m4dm4rtig4n/myelectricaldata:latest-dev"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "filebrowser/filebrowser:s6",
"amd64": "filebrowser/filebrowser:s6"
}
"build_from": {
"aarch64": "filebrowser/filebrowser:s6",
"amd64": "filebrowser/filebrowser:s6"
}
}

View File

@@ -3,7 +3,8 @@ arch:
- amd64
backup_exclude:
- "**/machine-learning/*"
description: Self-hosted photo and video backup solution directly from your mobile phone
description:
Self-hosted photo and video backup solution directly from your mobile phone
devices:
- /dev/dri
- /dev/dxg

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "troglobit/inadyn:latest",
"amd64": "troglobit/inadyn:latest"
}
"build_from": {
"aarch64": "troglobit/inadyn:latest",
"amd64": "troglobit/inadyn:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/jackett:arm64v8-latest",
"amd64": "lscr.io/linuxserver/jackett:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/jackett:arm64v8-latest",
"amd64": "lscr.io/linuxserver/jackett:amd64-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/jellyfin:arm64v8-latest",
"amd64": "lscr.io/linuxserver/jellyfin:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/jellyfin:arm64v8-latest",
"amd64": "lscr.io/linuxserver/jellyfin:amd64-latest"
}
}

0
jellyfin/rootfs/etc/services.d/nginx/run Executable file → Normal file
View File

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/lidarr:arm64v8-latest",
"amd64": "lscr.io/linuxserver/lidarr:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/lidarr:arm64v8-latest",
"amd64": "lscr.io/linuxserver/lidarr:amd64-latest"
}
}

View File

@@ -166,7 +166,7 @@ if [[ "${MEILISEARCH_LOCAL}" == true ]]; then
bashio::log.error "${message}"
if [ -n "${S6_SVSCANCTL_BIN}" ]; then
if ! "${S6_SVSCANCTL_BIN}" -t "${S6_SUPERVISED_DIR}" 2> /dev/null; then
if ! "${S6_SVSCANCTL_BIN}" -t "${S6_SUPERVISED_DIR}" 2>/dev/null; then
bashio::log.error "Unable to signal s6-svscanctl to stop services"
fi
else
@@ -181,7 +181,7 @@ if [[ "${MEILISEARCH_LOCAL}" == true ]]; then
}
meilisearch_ensure_running() {
if kill -0 "${MEILISEARCH_PID}" 2> /dev/null; then
if kill -0 "${MEILISEARCH_PID}" 2>/dev/null; then
return 0
fi
@@ -201,12 +201,12 @@ if [[ "${MEILISEARCH_LOCAL}" == true ]]; then
}
MEILISEARCH_CMD=(
env
MEILI_ENV="${MEILISEARCH_ENVIRONMENT}"
MEILI_NO_ANALYTICS="${MEILISEARCH_NO_ANALYTICS}"
meilisearch
--http-addr "${MEILISEARCH_ADDR}"
--db-path "${MEILISEARCH_DB_PATH}"
env \
MEILI_ENV="${MEILISEARCH_ENVIRONMENT}" \
MEILI_NO_ANALYTICS="${MEILISEARCH_NO_ANALYTICS}" \
meilisearch \
--http-addr "${MEILISEARCH_ADDR}" \
--db-path "${MEILISEARCH_DB_PATH}"
)
if [ -n "${MEILISEARCH_ENV_KEY}" ]; then
@@ -218,7 +218,7 @@ if [[ "${MEILISEARCH_LOCAL}" == true ]]; then
bashio::log.info "Waiting for Meilisearch TCP socket"
for attempt in $(seq 1 30); do
if bash -c "cat < /dev/null > /dev/tcp/${MEILISEARCH_HOST}/${MEILISEARCH_PORT}" 2> /dev/null; then
if bash -c "cat < /dev/null > /dev/tcp/${MEILISEARCH_HOST}/${MEILISEARCH_PORT}" 2>/dev/null; then
break
fi

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/mylar3:arm64v8-latest",
"amd64": "lscr.io/linuxserver/mylar3:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/mylar3:arm64v8-latest",
"amd64": "lscr.io/linuxserver/mylar3:amd64-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/jokob-sk/netalertx:latest",
"amd64": "ghcr.io/jokob-sk/netalertx:latest"
}
"build_from": {
"aarch64": "ghcr.io/jokob-sk/netalertx:latest",
"amd64": "ghcr.io/jokob-sk/netalertx:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/nzbget:arm64v8-latest",
"amd64": "lscr.io/linuxserver/nzbget:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/nzbget:arm64v8-latest",
"amd64": "lscr.io/linuxserver/nzbget:amd64-latest"
}
}

0
nzbget/rootfs/etc/services.d/nginx/run Executable file → Normal file
View File

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/ombi:arm64v8-latest",
"amd64": "lscr.io/linuxserver/ombi:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/ombi:arm64v8-latest",
"amd64": "lscr.io/linuxserver/ombi:amd64-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "organizr/organizr:linux-arm64",
"amd64": "organizr/organizr:linux-amd64"
}
"build_from": {
"aarch64": "organizr/organizr:linux-arm64",
"amd64": "organizr/organizr:linux-amd64"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/piwigo:arm64v8-latest",
"amd64": "lscr.io/linuxserver/piwigo:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/piwigo:arm64v8-latest",
"amd64": "lscr.io/linuxserver/piwigo:amd64-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/plex:arm64v8-latest",
"amd64": "lscr.io/linuxserver/plex:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/plex:arm64v8-latest",
"amd64": "lscr.io/linuxserver/plex:amd64-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/hassio-addons/base/aarch64:16.0.0",
"amd64": "ghcr.io/hassio-addons/base/amd64:16.0.0"
}
"build_from": {
"aarch64": "ghcr.io/hassio-addons/base/aarch64:16.0.0",
"amd64": "ghcr.io/hassio-addons/base/amd64:16.0.0"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/hassio-addons/base/aarch64:11.1.0",
"amd64": "ghcr.io/hassio-addons/base/amd64:11.1.0"
}
"build_from": {
"aarch64": "ghcr.io/hassio-addons/base/aarch64:11.1.0",
"amd64": "ghcr.io/hassio-addons/base/amd64:11.1.0"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/immich-app/postgres:15-vectorchord0.4.3-pgvectors0.3.0",
"amd64": "ghcr.io/immich-app/postgres:15-vectorchord0.4.3-pgvectors0.3.0"
}
"build_from": {
"aarch64": "ghcr.io/immich-app/postgres:15-vectorchord0.4.3-pgvectors0.3.0",
"amd64": "ghcr.io/immich-app/postgres:15-vectorchord0.4.3-pgvectors0.3.0"
}
}

View File

@@ -50,7 +50,7 @@ if [ -z "${wireguard_config:-}" ]; then
fi
fi
dos2unix "${wireguard_config}" > /dev/null 2>&1 || true
dos2unix "${wireguard_config}" >/dev/null 2>&1 || true
interface_name="$(basename "${wireguard_config}" .conf)"
if [[ -z "${interface_name}" ]]; then
@@ -60,7 +60,7 @@ fi
wireguard_runtime_config="${WIREGUARD_STATE_DIR}/${interface_name}.conf"
cp "${wireguard_config}" "${wireguard_runtime_config}"
chmod 600 "${wireguard_runtime_config}" 2> /dev/null || true
chmod 600 "${wireguard_runtime_config}" 2>/dev/null || true
bashio::log.info 'Prepared WireGuard runtime configuration for initial connection attempt.'
echo "${wireguard_runtime_config}" > "${WIREGUARD_STATE_DIR}/config"

View File

@@ -29,11 +29,11 @@ else
fi
wireguard_config="$(cat "${WIREGUARD_STATE_DIR}/config")"
wireguard_interface="$(cat "${WIREGUARD_STATE_DIR}/interface" 2> /dev/null || echo 'wg0')"
wireguard_interface="$(cat "${WIREGUARD_STATE_DIR}/interface" 2>/dev/null || echo 'wg0')"
if ip link show "${wireguard_interface}" &> /dev/null; then
bashio::log.warning "WireGuard interface ${wireguard_interface} already exists. Attempting to reset it."
wg-quick down "${wireguard_config}" > /dev/null 2>&1 || true
wg-quick down "${wireguard_config}" >/dev/null 2>&1 || true
fi
bashio::log.info "Starting WireGuard interface ${wireguard_interface} using ${wireguard_config##*/}."
@@ -44,12 +44,12 @@ else
mkdir -p "${legacy_bin_dir}"
for cmd in iptables iptables-save iptables-restore ip6tables ip6tables-save ip6tables-restore; do
if command -v "${cmd}-legacy" > /dev/null 2>&1; then
if command -v "${cmd}-legacy" >/dev/null 2>&1; then
ln -sf "$(command -v "${cmd}-legacy")" "${legacy_bin_dir}/${cmd}"
fi
done
chmod 700 "${legacy_bin_dir}" 2> /dev/null || true
chmod 700 "${legacy_bin_dir}" 2>/dev/null || true
export PATH="${legacy_bin_dir}:${PATH}"
bashio::log.warning 'Retrying WireGuard bring-up using iptables-legacy wrappers.'
}
@@ -67,8 +67,8 @@ else
fi
if echo "${output}" | grep -qiE 'iptables-restore|ip6tables-restore|xtables'; then
if command -v iptables-legacy > /dev/null 2>&1 || command -v ip6tables-legacy > /dev/null 2>&1; then
wg-quick down "${config_path}" > /dev/null 2>&1 || true
if command -v iptables-legacy >/dev/null 2>&1 || command -v ip6tables-legacy >/dev/null 2>&1; then
wg-quick down "${config_path}" >/dev/null 2>&1 || true
_wireguard_prepare_iptables_legacy
output=$(wg-quick up "${config_path}" 2>&1)
status=$?
@@ -87,7 +87,7 @@ else
ipv4_config="${WIREGUARD_STATE_DIR}/${wireguard_interface}-ipv4.conf"
echo -n > "${ipv4_config}"
chmod 600 "${ipv4_config}" 2> /dev/null || true
chmod 600 "${ipv4_config}" 2>/dev/null || true
while IFS= read -r line; do
if [[ "${line}" =~ ^Endpoint ]]; then
@@ -109,7 +109,7 @@ else
fi
done < "${wireguard_config}"
wg-quick down "${wireguard_config}" > /dev/null 2>&1 || true
wg-quick down "${wireguard_config}" >/dev/null 2>&1 || true
if ! _wireguard_up_with_iptables_fallback "${ipv4_config}"; then
bashio::log.error 'WireGuard failed to establish a connection after IPv4-only retry.'
@@ -129,9 +129,9 @@ else
bashio::log.info "WireGuard interface ${wireguard_interface} is up."
# Refresh DNS resolver configuration if resolvconf is present
if command -v resolvconf > /dev/null 2>&1; then
if command -v resolvconf >/dev/null 2>&1; then
bashio::log.info 'Refreshing DNS resolver configuration via resolvconf -u.'
if ! resolvconf -u > /dev/null 2>&1; then
if ! resolvconf -u >/dev/null 2>&1; then
bashio::log.warning 'resolvconf -u failed. DNS configuration may not have been updated.'
fi
else

8
qbittorrent/rootfs/etc/services.d/nginx/run Executable file → Normal file
View File

@@ -38,7 +38,7 @@ get_ip_info() {
# Outputs: "<ip> <country>" on success
local json ip country
if ! json="$(curl -fsS --max-time 10 "${VPN_INFO_URL}" 2> /dev/null)"; then
if ! json="$(curl -fsS --max-time 10 "${VPN_INFO_URL}" 2>/dev/null)"; then
bashio::log.warning "Unable to reach VPN info service at ${VPN_INFO_URL}."
return 1
fi
@@ -173,7 +173,7 @@ trap '
# Monitoring loop
while true; do
# If nginx died, stop this service and let s6 handle restart policy
if ! kill -0 "${nginx_pid}" 2> /dev/null; then
if ! kill -0 "${nginx_pid}" 2>/dev/null; then
bashio::log.error "nginx process exited unexpectedly; leaving service."
exit 1
fi
@@ -193,8 +193,8 @@ while true; do
if [[ -n "${REAL_IP}" ]] && [[ "${current_ip}" == "${REAL_IP}" ]]; then
bashio::log.error "IP LEAK DETECTED: current external IP ${current_ip} matches real IP ${REAL_IP}."
bashio::log.error "Stopping nginx and exiting so the supervisor can restart the add-on."
kill "${nginx_pid}" 2> /dev/null || true
wait "${nginx_pid}" 2> /dev/null || true
kill "${nginx_pid}" 2>/dev/null || true
wait "${nginx_pid}" 2>/dev/null || true
exit 1
fi
done

0
qbittorrent/rootfs/etc/services.d/timer/run Executable file → Normal file
View File

View File

@@ -7,80 +7,80 @@ BACKUP_FILE="${STATE_DIR}/resolv.conf.backup"
mkdir -p "${STATE_DIR}"
if [ "$#" -eq 0 ]; then
exit 0
exit 0
fi
command="$1"
shift || true
restore_backup() {
if [ -f "${BACKUP_FILE}" ]; then
cat "${BACKUP_FILE}" >/etc/resolv.conf
fi
if [ -f "${BACKUP_FILE}" ]; then
cat "${BACKUP_FILE}" > /etc/resolv.conf
fi
}
apply_dns() {
iface="$1"
shift || true
iface="$1"
shift || true
# Skip optional arguments such as -m <metric> or -x
while [ "$#" -gt 0 ]; do
case "$1" in
-m | -p | -w)
shift 2 || true
;;
-x | -y | -Z)
shift 1 || true
;;
--)
shift
break
;;
*)
break
;;
esac
done
# Skip optional arguments such as -m <metric> or -x
while [ "$#" -gt 0 ]; do
case "$1" in
-m|-p|-w)
shift 2 || true
;;
-x|-y|-Z)
shift 1 || true
;;
--)
shift
break
;;
*)
break
;;
esac
done
tmp_file="${STATE_DIR}/${iface}.conf"
cat >"${tmp_file}"
tmp_file="${STATE_DIR}/${iface}.conf"
cat > "${tmp_file}"
if [ ! -f "${BACKUP_FILE}" ]; then
cp /etc/resolv.conf "${BACKUP_FILE}" 2>/dev/null || true
fi
if [ ! -f "${BACKUP_FILE}" ]; then
cp /etc/resolv.conf "${BACKUP_FILE}" 2>/dev/null || true
fi
{
echo "# Generated by WireGuard add-on resolvconf shim"
cat "${tmp_file}"
} >/etc/resolv.conf
{
echo "# Generated by WireGuard add-on resolvconf shim"
cat "${tmp_file}"
} > /etc/resolv.conf
}
case "${command}" in
-a)
if [ "$#" -eq 0 ]; then
exit 0
fi
apply_dns "$@"
;;
-d)
if [ "$#" -gt 0 ]; then
rm -f "${STATE_DIR}/$1.conf"
fi
restore_backup
;;
-u)
latest_conf="$(find "${STATE_DIR}" -maxdepth 1 -type f -name '*.conf' -print | head -n 1 || true)"
if [ -n "${latest_conf}" ] && [ -f "${latest_conf}" ]; then
{
echo "# Generated by WireGuard add-on resolvconf shim"
cat "${latest_conf}"
} >/etc/resolv.conf
else
restore_backup
fi
;;
*)
# Treat other commands as successful no-ops to remain compatible with wg-quick.
exit 0
;;
-a)
if [ "$#" -eq 0 ]; then
exit 0
fi
apply_dns "$@"
;;
-d)
if [ "$#" -gt 0 ]; then
rm -f "${STATE_DIR}/$1.conf"
fi
restore_backup
;;
-u)
latest_conf="$(find "${STATE_DIR}" -maxdepth 1 -type f -name '*.conf' -print | head -n 1 || true)"
if [ -n "${latest_conf}" ] && [ -f "${latest_conf}" ]; then
{
echo "# Generated by WireGuard add-on resolvconf shim"
cat "${latest_conf}"
} > /etc/resolv.conf
else
restore_backup
fi
;;
*)
# Treat other commands as successful no-ops to remain compatible with wg-quick.
exit 0
;;
esac

View File

@@ -3,68 +3,68 @@ set -euo pipefail
REAL_IP6TABLES_RESTORE="/sbin/ip6tables-restore"
if [[ ! -x "${REAL_IP6TABLES_RESTORE}" ]]; then
REAL_IP6TABLES_RESTORE="/usr/sbin/ip6tables-restore"
REAL_IP6TABLES_RESTORE="/usr/sbin/ip6tables-restore"
fi
cleanup() {
[[ -n "${RULES_FILE:-}" && -f "${RULES_FILE}" ]] && rm -f "${RULES_FILE}"
[[ -n "${SANITIZED_FILE:-}" && -f "${SANITIZED_FILE}" ]] && rm -f "${SANITIZED_FILE}"
[[ -n "${RULES_FILE:-}" && -f "${RULES_FILE}" ]] && rm -f "${RULES_FILE}"
[[ -n "${SANITIZED_FILE:-}" && -f "${SANITIZED_FILE}" ]] && rm -f "${SANITIZED_FILE}"
}
trap cleanup EXIT
RULES_FILE="$(mktemp)"
cat >"${RULES_FILE}"
cat > "${RULES_FILE}"
ipv6_unavailable() {
local message="$1"
[[ $message =~ [Tt]able[[:space:]]does[[:space:]]not[[:space:]]exist ]] && return 0
[[ $message =~ address[[:space:]]family[[:space:]]not[[:space:]]supported ]] && return 0
[[ $message =~ can[[:punct:]]t[[:space:]]initialize[[:space:]]ip6tables[[:space:]]table ]] && return 0
[[ $message =~ IPv6[[:space:]]support[[:space:]]not[[:space:]]available ]] && return 0
return 1
local message="$1"
[[ $message =~ [Tt]able[[:space:]]does[[:space:]]not[[:space:]]exist ]] && return 0
[[ $message =~ address[[:space:]]family[[:space:]]not[[:space:]]supported ]] && return 0
[[ $message =~ can[[:punct:]]t[[:space:]]initialize[[:space:]]ip6tables[[:space:]]table ]] && return 0
[[ $message =~ IPv6[[:space:]]support[[:space:]]not[[:space:]]available ]] && return 0
return 1
}
# First attempt with the original ruleset
output=""
if output="$(${REAL_IP6TABLES_RESTORE} "$@" <"${RULES_FILE}" 2>&1)"; then
[[ -n "${output}" ]] && printf '%s\n' "${output}" >&2
exit 0
if output="$(${REAL_IP6TABLES_RESTORE} "$@" < "${RULES_FILE}" 2>&1)"; then
[[ -n "${output}" ]] && printf '%s\n' "${output}" >&2
exit 0
fi
status=$?
# Retry without comment matches if the kernel is missing the comment module
SANITIZED_FILE="$(mktemp)"
sed -E 's/-m[[:space:]]+comment[[:space:]]+--comment[[:space:]]+"[^"]*"//g' "${RULES_FILE}" >"${SANITIZED_FILE}"
sed -E 's/-m[[:space:]]+comment[[:space:]]+--comment[[:space:]]+"[^"]*"//g' "${RULES_FILE}" > "${SANITIZED_FILE}"
retry_output=""
if retry_output="$(${REAL_IP6TABLES_RESTORE} "$@" <"${SANITIZED_FILE}" 2>&1)"; then
printf '%s\n' "ip6tables-restore failed with comment matches; reapplied without comments." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${retry_output}" ]] && printf '%s\n' "${retry_output}" >&2
exit 0
if retry_output="$(${REAL_IP6TABLES_RESTORE} "$@" < "${SANITIZED_FILE}" 2>&1)"; then
printf '%s\n' "ip6tables-restore failed with comment matches; reapplied without comments." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${retry_output}" ]] && printf '%s\n' "${retry_output}" >&2
exit 0
fi
retry_status=$?
# Final fallback: try legacy backend if available
legacy_output=""
for legacy in /sbin/ip6tables-restore-legacy /usr/sbin/ip6tables-restore-legacy; do
if [[ -x "${legacy}" ]]; then
if legacy_output="$(${legacy} "$@" <"${RULES_FILE}" 2>&1)"; then
printf '%s\n' "ip6tables-restore failed; succeeded using legacy backend." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${legacy_output}" ]] && printf '%s\n' "${legacy_output}" >&2
exit 0
fi
fi
if [[ -x "${legacy}" ]]; then
if legacy_output="$(${legacy} "$@" < "${RULES_FILE}" 2>&1)"; then
printf '%s\n' "ip6tables-restore failed; succeeded using legacy backend." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${legacy_output}" ]] && printf '%s\n' "${legacy_output}" >&2
exit 0
fi
fi
done
if ipv6_unavailable "${output}" || ipv6_unavailable "${retry_output}" || ipv6_unavailable "${legacy_output}"; then
printf '%s\n' "IPv6 firewall support not detected; skipping IPv6 ruleset restore and continuing." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${retry_output}" ]] && printf '%s\n' "Sanitized retry error: ${retry_output}" >&2
[[ -n "${legacy_output}" ]] && printf '%s\n' "Legacy backend error: ${legacy_output}" >&2
exit 0
printf '%s\n' "IPv6 firewall support not detected; skipping IPv6 ruleset restore and continuing." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${retry_output}" ]] && printf '%s\n' "Sanitized retry error: ${retry_output}" >&2
[[ -n "${legacy_output}" ]] && printf '%s\n' "Legacy backend error: ${legacy_output}" >&2
exit 0
fi
printf '%s\n' "ip6tables-restore failed and fallbacks were unsuccessful." >&2

View File

@@ -3,47 +3,47 @@ set -euo pipefail
REAL_IPTABLES_RESTORE="/sbin/iptables-restore"
if [[ ! -x "${REAL_IPTABLES_RESTORE}" ]]; then
REAL_IPTABLES_RESTORE="/usr/sbin/iptables-restore"
REAL_IPTABLES_RESTORE="/usr/sbin/iptables-restore"
fi
cleanup() {
[[ -n "${RULES_FILE:-}" && -f "${RULES_FILE}" ]] && rm -f "${RULES_FILE}"
[[ -n "${SANITIZED_FILE:-}" && -f "${SANITIZED_FILE}" ]] && rm -f "${SANITIZED_FILE}"
[[ -n "${RULES_FILE:-}" && -f "${RULES_FILE}" ]] && rm -f "${RULES_FILE}"
[[ -n "${SANITIZED_FILE:-}" && -f "${SANITIZED_FILE}" ]] && rm -f "${SANITIZED_FILE}"
}
trap cleanup EXIT
RULES_FILE="$(mktemp)"
cat >"${RULES_FILE}"
cat > "${RULES_FILE}"
# First attempt with the original ruleset
if output="$(${REAL_IPTABLES_RESTORE} "$@" <"${RULES_FILE}" 2>&1)"; then
[[ -n "${output}" ]] && printf '%s\n' "${output}" >&2
exit 0
if output="$(${REAL_IPTABLES_RESTORE} "$@" < "${RULES_FILE}" 2>&1)"; then
[[ -n "${output}" ]] && printf '%s\n' "${output}" >&2
exit 0
fi
status=$?
# Retry without comment matches if the kernel is missing the comment module
SANITIZED_FILE="$(mktemp)"
sed -E 's/-m[[:space:]]+comment[[:space:]]+--comment[[:space:]]+"[^"]*"//g' "${RULES_FILE}" >"${SANITIZED_FILE}"
sed -E 's/-m[[:space:]]+comment[[:space:]]+--comment[[:space:]]+"[^"]*"//g' "${RULES_FILE}" > "${SANITIZED_FILE}"
if retry_output="$(${REAL_IPTABLES_RESTORE} "$@" <"${SANITIZED_FILE}" 2>&1)"; then
printf '%s\n' "iptables-restore failed with comment matches; reapplied without comments." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${retry_output}" ]] && printf '%s\n' "${retry_output}" >&2
exit 0
if retry_output="$(${REAL_IPTABLES_RESTORE} "$@" < "${SANITIZED_FILE}" 2>&1)"; then
printf '%s\n' "iptables-restore failed with comment matches; reapplied without comments." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${retry_output}" ]] && printf '%s\n' "${retry_output}" >&2
exit 0
fi
retry_status=$?
# Final fallback: try legacy backend if available
for legacy in /sbin/iptables-restore-legacy /usr/sbin/iptables-restore-legacy; do
if [[ -x "${legacy}" ]]; then
if legacy_output="$(${legacy} "$@" <"${RULES_FILE}" 2>&1)"; then
printf '%s\n' "iptables-restore failed; succeeded using legacy backend." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${legacy_output}" ]] && printf '%s\n' "${legacy_output}" >&2
exit 0
fi
fi
if [[ -x "${legacy}" ]]; then
if legacy_output="$(${legacy} "$@" < "${RULES_FILE}" 2>&1)"; then
printf '%s\n' "iptables-restore failed; succeeded using legacy backend." >&2
printf '%s\n' "Original error: ${output}" >&2
[[ -n "${legacy_output}" ]] && printf '%s\n' "${legacy_output}" >&2
exit 0
fi
fi
done
printf '%s\n' "iptables-restore failed and fallbacks were unsuccessful." >&2

View File

@@ -3,15 +3,15 @@ set -euo pipefail
REAL_SYSCTL="/sbin/sysctl"
if [[ ! -x "${REAL_SYSCTL}" ]]; then
REAL_SYSCTL="/usr/sbin/sysctl"
REAL_SYSCTL="/usr/sbin/sysctl"
fi
if [[ "$#" -ge 2 && "$1" == "-q" && "$2" == "net.ipv4.conf.all.src_valid_mark=1" ]]; then
if "${REAL_SYSCTL}" "$@" >/dev/null 2>&1; then
exit 0
fi
# Suppress failure for this specific key to keep wg-quick from aborting in unprivileged environments.
exit 0
if "${REAL_SYSCTL}" "$@" >/dev/null 2>&1; then
exit 0
fi
# Suppress failure for this specific key to keep wg-quick from aborting in unprivileged environments.
exit 0
fi
exec "${REAL_SYSCTL}" "$@"

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/radarr:arm64v8-latest",
"amd64": "lscr.io/linuxserver/radarr:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/radarr:arm64v8-latest",
"amd64": "lscr.io/linuxserver/radarr:amd64-latest"
}
}

0
readarr/rootfs/etc/services.d/nginx/run Executable file → Normal file
View File

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "thomst08/requestrr:arm64-latest",
"amd64": "thomst08/requestrr:linux-latest"
}
"build_from": {
"aarch64": "thomst08/requestrr:arm64-latest",
"amd64": "thomst08/requestrr:linux-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "franchetti/seafile-arm:latest",
"amd64": "franchetti/seafile-arm:latest"
}
"build_from": {
"aarch64": "franchetti/seafile-arm:latest",
"amd64": "franchetti/seafile-arm:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/signalk/signalk-server:latest",
"amd64": "ghcr.io/signalk/signalk-server:latest"
}
"build_from": {
"aarch64": "ghcr.io/signalk/signalk-server:latest",
"amd64": "ghcr.io/signalk/signalk-server:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/sonarr:arm64v8-develop",
"amd64": "lscr.io/linuxserver/sonarr:amd64-develop"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/sonarr:arm64v8-develop",
"amd64": "lscr.io/linuxserver/sonarr:amd64-develop"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/gabe565/castsponsorskip:latest",
"amd64": "ghcr.io/gabe565/castsponsorskip:latest"
}
"build_from": {
"aarch64": "ghcr.io/gabe565/castsponsorskip:latest",
"amd64": "ghcr.io/gabe565/castsponsorskip:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ertagh/teamspeak3-server:latest-predownloaded",
"amd64": "ertagh/teamspeak3-server:x64-latest-predownloaded"
}
"build_from": {
"aarch64": "ertagh/teamspeak3-server:latest-predownloaded",
"amd64": "ertagh/teamspeak3-server:x64-latest-predownloaded"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "ghcr.io/hassio-addons/base:17.2.0",
"amd64": "ghcr.io/hassio-addons/base:17.2.0"
}
"build_from": {
"aarch64": "ghcr.io/hassio-addons/base:17.2.0",
"amd64": "ghcr.io/hassio-addons/base:17.2.0"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/transmission:arm64v8-latest",
"amd64": "lscr.io/linuxserver/transmission:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/transmission:arm64v8-latest",
"amd64": "lscr.io/linuxserver/transmission:amd64-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "haugene/transmission-openvpn:latest",
"amd64": "haugene/transmission-openvpn:latest"
}
"build_from": {
"aarch64": "haugene/transmission-openvpn:latest",
"amd64": "haugene/transmission-openvpn:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "senexcrenshaw/xteve:latest",
"amd64": "senexcrenshaw/xteve:latest"
}
"build_from": {
"aarch64": "senexcrenshaw/xteve:latest",
"amd64": "senexcrenshaw/xteve:latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/code-server:arm64v8-latest",
"amd64": "lscr.io/linuxserver/code-server:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/code-server:arm64v8-latest",
"amd64": "lscr.io/linuxserver/code-server:amd64-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/papermerge:arm64v8-latest",
"amd64": "lscr.io/linuxserver/papermerge:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/papermerge:arm64v8-latest",
"amd64": "lscr.io/linuxserver/papermerge:amd64-latest"
}
}

View File

@@ -1,6 +1,6 @@
{
"build_from": {
"aarch64": "lscr.io/linuxserver/plex-meta-manager:arm64v8-latest",
"amd64": "lscr.io/linuxserver/plex-meta-manager:amd64-latest"
}
"build_from": {
"aarch64": "lscr.io/linuxserver/plex-meta-manager:arm64v8-latest",
"amd64": "lscr.io/linuxserver/plex-meta-manager:amd64-latest"
}
}