From f5b98d280791cf200639983cbe8b045c67724aca Mon Sep 17 00:00:00 2001 From: mm Date: Mon, 14 Sep 2026 10:29:12 +0200 Subject: [PATCH] fix(installer): Haenger nach "bereits installiert" behoben (VERSION 1.5.0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit x14 blieb nach der letzten Erfolgsmeldung stehen (Abbruch per ^C, kein Fehler). Ursache: grant_apache_log_access() ruft apt-get install acl auf — OHNE apt-get update davor und OHNE Timeout. Bei veralteten Paketlisten kann apt in eine Rueckfrage laufen und unbegrenzt warten. Direkt danach haette der naechste fetch gehangen: fetch() hatte ueberhaupt kein curl-Timeout. Fix: - apt-get update vor dem acl-Install, timeout 180 auf allen Paketmanager-Aufrufen - fetch() mit -m 30 + 3 Versuchen statt unbegrenztem Warten - alle weiteren curl-Aufrufe (keyring, Binary, Re-Exec) mit -m/--connect-timeout - Fortschrittsmeldung vor der ACL-Phase: ein Haenger sah wie ein Absturz aus --- VERSION | 2 +- install.sh | 42 +++++++++++++++++++++++++++++++++--------- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/VERSION b/VERSION index 88c5fb8..bc80560 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.4.0 +1.5.0 diff --git a/install.sh b/install.sh index 49f75ca..6c11aca 100755 --- a/install.sh +++ b/install.sh @@ -33,10 +33,10 @@ if [ -z "${NETBIRD_TG_REEXEC:-}" ] && [ ! -t 0 ] && [ -p /dev/stdin ]; then # ausfuehren wie bisher (dann bleibt das Risiko, aber es laeuft). _dl=0 if command -v curl >/dev/null 2>&1; then - curl -fsSL "$_src/install.sh" -o "$_self" 2>/dev/null && [ -s "$_self" ] && _dl=1 + curl -fsSL -m 30 --connect-timeout 10 "$_src/install.sh" -o "$_self" 2>/dev/null && [ -s "$_self" ] && _dl=1 fi if [ "$_dl" -eq 0 ] && command -v wget >/dev/null 2>&1; then - wget -q -O "$_self" "$_src/install.sh" 2>/dev/null && [ -s "$_self" ] && _dl=1 + timeout 30 wget -q -O "$_self" "$_src/install.sh" 2>/dev/null && [ -s "$_self" ] && _dl=1 fi if [ "$_dl" -eq 0 ] && command -v busybox >/dev/null 2>&1; then busybox wget -q -O "$_self" "$_src/install.sh" 2>/dev/null && [ -s "$_self" ] && _dl=1 @@ -497,7 +497,7 @@ install_apt() { command -v gpg >/dev/null || { apt-get update -qq; apt-get install $APT_OPTS gnupg >/dev/null; } command -v curl >/dev/null || apt-get install $APT_OPTS curl >/dev/null mkdir -p /etc/apt/keyrings - curl -fsSL https://repos.influxdata.com/influxdata-archive.key | gpg --dearmor --yes -o /etc/apt/keyrings/influxdata-archive.gpg + curl -fsSL -m 30 --connect-timeout 10 https://repos.influxdata.com/influxdata-archive.key | gpg --dearmor --yes -o /etc/apt/keyrings/influxdata-archive.gpg echo "deb [signed-by=/etc/apt/keyrings/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main" > /etc/apt/sources.list.d/influxdata.list apt-get update -qq apt-get install $APT_OPTS telegraf >/dev/null @@ -524,7 +524,7 @@ install_static() { TB="telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz" log "Statisches Binary $TB …" TMP="$(mktemp -d)" - curl -fsSL "https://dl.influxdata.com/telegraf/releases/$TB" -o "$TMP/t.tgz" + curl -fsSL -m 120 --connect-timeout 10 "https://dl.influxdata.com/telegraf/releases/$TB" -o "$TMP/t.tgz" tar -xzf "$TMP/t.tgz" -C "$TMP" install -m 0755 "$TMP"/telegraf-*/usr/bin/telegraf /usr/local/bin/telegraf rm -rf "$TMP" @@ -595,17 +595,28 @@ fi # Domain-Ordner erben das Recht automatisch. grant_apache_log_access() { [ "$HAS_APACHE" -eq 1 ] || return 0 + # Fortschritt melden: ohne diese Zeile sah der Lauf wie ein Haenger aus, + # weil zwischen "Telegraf bereits installiert" und der naechsten Meldung + # ein apt-Aufruf mit Netzwerkzugriff liegt (kann bis zu 3 Minuten dauern). + log "Log-Leserechte: pruefe/ergaenze ACL fuer 'telegraf' (kann etwas dauern) …" _u="telegraf" id "$_u" >/dev/null 2>&1 || return 0 if ! command -v setfacl >/dev/null 2>&1; then # acl-Paket nachziehen, sonst ist die Rechtevergabe nicht moeglich. # Alle Paketmanager mit /dev/null; then - NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive \ + apt-get update -qq /dev/null 2>&1 || true + timeout 180 env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive \ apt-get install -y -qq acl /dev/null 2>&1 || true - elif command -v dnf >/dev/null; then dnf install -y -q acl /dev/null 2>&1 || true - elif command -v yum >/dev/null; then yum install -y -q acl /dev/null 2>&1 || true - elif command -v apk >/dev/null; then apk add --no-cache -q acl /dev/null 2>&1 || true + elif command -v dnf >/dev/null; then + timeout 180 dnf install -y -q acl /dev/null 2>&1 || true + elif command -v yum >/dev/null; then + timeout 180 yum install -y -q acl /dev/null 2>&1 || true + elif command -v apk >/dev/null; then + timeout 180 apk add --no-cache -q acl /dev/null 2>&1 || true fi fi if ! command -v setfacl >/dev/null 2>&1; then @@ -704,7 +715,20 @@ APACHE_LOG='$APACHE_LOG' EOF umask 022 -fetch() { curl -fsSL "$REPO_RAW/$1" -o "$2" || die "Download $1 fehlgeschlagen."; } +# Jeder Download MIT Timeout: ohne -m wartet curl unbegrenzt, wenn das Netz +# haengt (NetBird-Tunnel, DNS). Der Installer bliebe dann nach der letzten +# Erfolgsmeldung stehen — ohne Fehler, ohne Ende. Genau das passierte auf x14. +fetch() { + _tries=3 + while [ "$_tries" -gt 0 ]; do + if curl -fsSL -m 30 --connect-timeout 10 "$REPO_RAW/$1" -o "$2" 2>/dev/null; then + return 0 + fi + _tries=$((_tries - 1)) + [ "$_tries" -gt 0 ] && sleep 2 + done + die "Download $1 fehlgeschlagen nach 3 Versuchen ($REPO_RAW/$1)." +} # Ersatz fuer envsubst, falls gettext fehlt (Minimal-Container, schlanke # Alpine-/Rocky-Installationen). Ersetzt nur die uebergebenen Variablennamen —