From 7cbd5cd5beb76916041fee3c7306d2af81e3ada7 Mon Sep 17 00:00:00 2001 From: scriptos Date: Mon, 27 Oct 2025 19:37:57 +0100 Subject: [PATCH 1/2] fix update_yaml_fallback --- livekit-ip-watch.v1.sh | 51 +++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/livekit-ip-watch.v1.sh b/livekit-ip-watch.v1.sh index c1917f8..e428db9 100644 --- a/livekit-ip-watch.v1.sh +++ b/livekit-ip-watch.v1.sh @@ -139,36 +139,45 @@ update_yaml_fallback() { local tmp tmp="$(mktemp)" awk -v newcidr="$cidr" ' - BEGIN{ in_rtc=0; in_ips=0; in_includes=0; injected=0 } + BEGIN{ in_rtc=0; in_ips=0; ips_indent=""; printed_ips=0 } + function print_ips_block() { + if (!printed_ips) { + print " ips:" + print " includes:" + print " - " newcidr + printed_ips=1 + } + } { line=$0 - if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { in_rtc=1; in_ips=0; in_includes=0 } - else if (in_rtc && $0 ~ /^[[:space:]]*[[:alnum:]_]+:[[:space:]]*$/ && $0 !~ /^[[:space:]]*ips:/) { - if (!in_ips && !in_includes && !injected) { - print " ips:" - print " includes:" - print " - " newcidr - injected=1 + if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { in_rtc=1; in_ips=0; ips_indent=""; print; next } + if (in_rtc) { + if (in_ips) { + if (ips_indent=="" ) { next } + if ($0 ~ "^" ips_indent "[^[:space:]]") { next } + in_ips=0 + print_ips_block() } - } - if (in_rtc && $0 ~ /^[[:space:]]*ips:[[:space:]]*$/) { in_ips=1; in_includes=0 } - if (in_ips && $0 ~ /^[[:space:]]*includes:[[:space:]]*$/) { in_includes=1; next } - if (in_includes) { - if ($0 ~ /^[[:space:]]*-[[:space:]]*[^[:space:]]+/) { + if ($0 ~ /^[[:space:]]{2}ips:[[:space:]]*$/) { + in_ips=1 + match($0,/^([[:space:]]*)ips:/,m) + ips_indent=m[1]" " next - } else { - if (!injected) { - print " - " newcidr - injected=1 - } - in_includes=0 - in_ips=($0 ~ /^[[:space:]]*ips:/)?1:0 } + if ($0 ~ /^[[:space:]]{2}[[:alnum:]_]+:[[:space:]]*$/) { + if (!printed_ips) { print_ips_block() } + } + if ($0 ~ /^[[:alnum:]_]+:[[:space:]]*$/) { + if (!printed_ips && in_rtc) { print_ips_block() } + in_rtc=0 + } + print line + next } print line } END{ - if (in_rtc && !injected) { + if (in_rtc && !printed_ips) { print " ips:" print " includes:" print " - " newcidr From 61ebf046b8219b77b91ce6560aaa1e2520dbc329 Mon Sep 17 00:00:00 2001 From: scriptos Date: Mon, 27 Oct 2025 19:45:26 +0100 Subject: [PATCH 2/2] healthcheck auf HTTP mit Custom URL umgestellt. --- livekit-ip-watch.v1.sh | 77 ++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 47 deletions(-) diff --git a/livekit-ip-watch.v1.sh b/livekit-ip-watch.v1.sh index e428db9..3f8928d 100644 --- a/livekit-ip-watch.v1.sh +++ b/livekit-ip-watch.v1.sh @@ -5,9 +5,9 @@ # Synapse: https://git.techniverse.net/scriptos/livekit-ip-watch.git # Autor: Patrick Asmus # Web: https://www.cleveradmin.de -# Version: 1.0 +# Version: 1.1 # Datum: 27.10.2025 -# Modifikation: Initial +# Modifikation: healthcheck auf HTTP mit Custom URL umgestellt. ##################################################### set -euo pipefail @@ -35,9 +35,8 @@ ENABLE_IPV6=false # Wartezeit nach Neustart (Sekunden), dann Healthcheck WAIT_AFTER_RESTART=20 -# Healthcheck-Konfiguration: nur TCP -TCP_HOST="127.0.0.1" -TCP_PORT="7881" +# Healthcheck-Konfiguration: HTTP +HEALTHCHECK_DOMAIN="rtc.matrix.techniverse.net" HEALTHCHECK_TIMEOUT=3 # ntfy (optional) @@ -139,45 +138,36 @@ update_yaml_fallback() { local tmp tmp="$(mktemp)" awk -v newcidr="$cidr" ' - BEGIN{ in_rtc=0; in_ips=0; ips_indent=""; printed_ips=0 } - function print_ips_block() { - if (!printed_ips) { - print " ips:" - print " includes:" - print " - " newcidr - printed_ips=1 - } - } + BEGIN{ in_rtc=0; in_ips=0; in_includes=0; injected=0 } { line=$0 - if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { in_rtc=1; in_ips=0; ips_indent=""; print; next } - if (in_rtc) { - if (in_ips) { - if (ips_indent=="" ) { next } - if ($0 ~ "^" ips_indent "[^[:space:]]") { next } - in_ips=0 - print_ips_block() + if ($0 ~ /^[[:space:]]*rtc:[[:space:]]*$/) { in_rtc=1; in_ips=0; in_includes=0 } + else if (in_rtc && $0 ~ /^[[:space:]]*[[:alnum:]_]+:[[:space:]]*$/ && $0 !~ /^[[:space:]]*ips:/) { + if (!in_ips && !in_includes && !injected) { + print " ips:" + print " includes:" + print " - " newcidr + injected=1 } - if ($0 ~ /^[[:space:]]{2}ips:[[:space:]]*$/) { - in_ips=1 - match($0,/^([[:space:]]*)ips:/,m) - ips_indent=m[1]" " + } + if (in_rtc && $0 ~ /^[[:space:]]*ips:[[:space:]]*$/) { in_ips=1; in_includes=0 } + if (in_ips && $0 ~ /^[[:space:]]*includes:[[:space:]]*$/) { in_includes=1; next } + if (in_includes) { + if ($0 ~ /^[[:space:]]*-[[:space:]]*[^[:space:]]+/) { next + } else { + if (!injected) { + print " - " newcidr + injected=1 + } + in_includes=0 + in_ips=($0 ~ /^[[:space:]]*ips:/)?1:0 } - if ($0 ~ /^[[:space:]]{2}[[:alnum:]_]+:[[:space:]]*$/) { - if (!printed_ips) { print_ips_block() } - } - if ($0 ~ /^[[:alnum:]_]+:[[:space:]]*$/) { - if (!printed_ips && in_rtc) { print_ips_block() } - in_rtc=0 - } - print line - next } print line } END{ - if (in_rtc && !printed_ips) { + if (in_rtc && !injected) { print " ips:" print " includes:" print " - " newcidr @@ -208,16 +198,9 @@ restart_service() { fi } -healthcheck_tcp() { - if (exec 3<>/dev/tcp/"$TCP_HOST"/"$TCP_PORT") 2>/dev/null; then - exec 3<&- - exec 3>&- - return 0 - elif command -v nc >/dev/null 2>&1; then - nc -z -w "$HEALTHCHECK_TIMEOUT" "$TCP_HOST" "$TCP_PORT" - else - return 1 - fi +healthcheck_http() { + local url="https://${HEALTHCHECK_DOMAIN}/livekit/sfu/" + curl -fsS --max-time "$HEALTHCHECK_TIMEOUT" "$url" >/dev/null } main() { @@ -272,7 +255,7 @@ main() { info "Warte $WAIT_AFTER_RESTART Sekunden..." sleep "$WAIT_AFTER_RESTART" - if healthcheck_tcp; then + if healthcheck_http; then info "Healthcheck OK." echo "$current_ip" > "$state_file" notify "info" "IP geändert auf $current_ip, Dienst gesund." @@ -289,7 +272,7 @@ main() { info "Warte $WAIT_AFTER_RESTART Sekunden (Rollback)..." sleep "$WAIT_AFTER_RESTART" - if healthcheck_tcp; then + if healthcheck_http; then warn "Rollback erfolgreich. System läuft wieder mit alter Konfiguration." notify "warn" "Rollback erfolgreich. Bitte prüfen. Alte IP bleibt ${last_ip:-unbekannt}." exit 10