1 Commits

Author SHA1 Message Date
alexbelgium
41f76f0d29 fix: auto-fix linting issues 2025-11-23 00:35:42 +00:00
50 changed files with 286 additions and 286 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{ {
"build_from": { "build_from": {
"aarch64": "ghcr.io/immich-app/postgres:15-vectorchord0.4.3-pgvectors0.3.0", "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" "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
fi fi
dos2unix "${wireguard_config}" >/dev/null 2>&1 || true dos2unix "${wireguard_config}" > /dev/null 2>&1 || true
interface_name="$(basename "${wireguard_config}" .conf)" interface_name="$(basename "${wireguard_config}" .conf)"
if [[ -z "${interface_name}" ]]; then if [[ -z "${interface_name}" ]]; then
@@ -60,7 +60,7 @@ fi
wireguard_runtime_config="${WIREGUARD_STATE_DIR}/${interface_name}.conf" wireguard_runtime_config="${WIREGUARD_STATE_DIR}/${interface_name}.conf"
cp "${wireguard_config}" "${wireguard_runtime_config}" 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.' bashio::log.info 'Prepared WireGuard runtime configuration for initial connection attempt.'
echo "${wireguard_runtime_config}" > "${WIREGUARD_STATE_DIR}/config" echo "${wireguard_runtime_config}" > "${WIREGUARD_STATE_DIR}/config"

View File

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

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

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

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
{ {
"build_from": { "build_from": {
"aarch64": "ghcr.io/hassio-addons/base:17.2.0", "aarch64": "ghcr.io/hassio-addons/base:17.2.0",
"amd64": "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": { "build_from": {
"aarch64": "lscr.io/linuxserver/transmission:arm64v8-latest", "aarch64": "lscr.io/linuxserver/transmission:arm64v8-latest",
"amd64": "lscr.io/linuxserver/transmission:amd64-latest" "amd64": "lscr.io/linuxserver/transmission:amd64-latest"
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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