fix(installer): Haenger nach "bereits installiert" behoben (VERSION 1.5.0)

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
This commit is contained in:
mm committed 2026-09-14 10:29:12 +02:00
1 parent d11849b6d9
commit f5b98d2807
2 files changed
+34 -10

No files matched your search

+1 -1
View File
@@ -1 +1 @@
1.4.0 1.5.0
+33 -9
View File
@@ -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). # ausfuehren wie bisher (dann bleibt das Risiko, aber es laeuft).
_dl=0 _dl=0
if command -v curl >/dev/null 2>&1; then 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 fi
if [ "$_dl" -eq 0 ] && command -v wget >/dev/null 2>&1; then 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 fi
if [ "$_dl" -eq 0 ] && command -v busybox >/dev/null 2>&1; then 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 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 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 command -v curl >/dev/null || apt-get install $APT_OPTS curl >/dev/null
mkdir -p /etc/apt/keyrings 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 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 update -qq
apt-get install $APT_OPTS telegraf >/dev/null apt-get install $APT_OPTS telegraf >/dev/null
@@ -524,7 +524,7 @@ install_static() {
TB="telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz" TB="telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz"
log "Statisches Binary $TB …" log "Statisches Binary $TB …"
TMP="$(mktemp -d)" 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" tar -xzf "$TMP/t.tgz" -C "$TMP"
install -m 0755 "$TMP"/telegraf-*/usr/bin/telegraf /usr/local/bin/telegraf install -m 0755 "$TMP"/telegraf-*/usr/bin/telegraf /usr/local/bin/telegraf
rm -rf "$TMP" rm -rf "$TMP"
@@ -595,17 +595,28 @@ fi
# Domain-Ordner erben das Recht automatisch. # Domain-Ordner erben das Recht automatisch.
grant_apache_log_access() { grant_apache_log_access() {
[ "$HAS_APACHE" -eq 1 ] || return 0 [ "$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" _u="telegraf"
id "$_u" >/dev/null 2>&1 || return 0 id "$_u" >/dev/null 2>&1 || return 0
if ! command -v setfacl >/dev/null 2>&1; then if ! command -v setfacl >/dev/null 2>&1; then
# acl-Paket nachziehen, sonst ist die Rechtevergabe nicht moeglich. # acl-Paket nachziehen, sonst ist die Rechtevergabe nicht moeglich.
# Alle Paketmanager mit </dev/null: sie duerfen nichts aus stdin lesen. # Alle Paketmanager mit </dev/null: sie duerfen nichts aus stdin lesen.
# `timeout` ist PFLICHT: ohne Paketlisten kann apt in eine Rueckfrage laufen
# und unbegrenzt warten — der Installer haengt dann nach der letzten
# Erfolgsmeldung, ohne Fehler. Real passiert (x14): Abbruch per ^C.
if command -v apt-get >/dev/null; then if command -v apt-get >/dev/null; then
NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive \ apt-get update -qq </dev/null >/dev/null 2>&1 || true
timeout 180 env NEEDRESTART_MODE=a DEBIAN_FRONTEND=noninteractive \
apt-get install -y -qq acl </dev/null >/dev/null 2>&1 || true apt-get install -y -qq acl </dev/null >/dev/null 2>&1 || true
elif command -v dnf >/dev/null; then dnf install -y -q acl </dev/null >/dev/null 2>&1 || true elif command -v dnf >/dev/null; then
elif command -v yum >/dev/null; then yum install -y -q acl </dev/null >/dev/null 2>&1 || true timeout 180 dnf install -y -q acl </dev/null >/dev/null 2>&1 || true
elif command -v apk >/dev/null; then apk add --no-cache -q acl </dev/null >/dev/null 2>&1 || true elif command -v yum >/dev/null; then
timeout 180 yum install -y -q acl </dev/null >/dev/null 2>&1 || true
elif command -v apk >/dev/null; then
timeout 180 apk add --no-cache -q acl </dev/null >/dev/null 2>&1 || true
fi fi
fi fi
if ! command -v setfacl >/dev/null 2>&1; then if ! command -v setfacl >/dev/null 2>&1; then
@@ -704,7 +715,20 @@ APACHE_LOG='$APACHE_LOG'
EOF EOF
umask 022 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 # Ersatz fuer envsubst, falls gettext fehlt (Minimal-Container, schlanke
# Alpine-/Rocky-Installationen). Ersetzt nur die uebergebenen Variablennamen — # Alpine-/Rocky-Installationen). Ersetzt nur die uebergebenen Variablennamen —