fix(installer): /etc/default/telegraf quoten + robustes Sourcing (load_defaults); apache-Logpfade sammeln statt ersten nehmen
This commit is contained in:
1 parent
d614ffa56a
commit
cba503e174
1 file changed
+49
-8
+49
-8
@@ -87,6 +87,25 @@ while [ $# -gt 0 ]; do
|
||||
done
|
||||
|
||||
log() { printf '\033[1;34m[netbird-telegraf]\033[0m %s\n' "$*"; }
|
||||
|
||||
# /etc/default/telegraf robust einlesen. Ein direktes "." bricht die ganze
|
||||
# Installation ab, wenn die Datei einen unquoted Wert mit Leerzeichen oder
|
||||
# Sonderzeichen enthaelt (alte APACHE_LOG-Zeile mit zwei Pfaden:
|
||||
# "sh: /etc/default/telegraf: /pfad/zwei.log: Permission denied" — genau das
|
||||
# passierte auf x22 und blockierte jedes weitere Update).
|
||||
# Deshalb: nur syntaktisch heile Dateien auswerten, sonst sichern und warnen.
|
||||
load_defaults() {
|
||||
[ -r /etc/default/telegraf ] || return 0
|
||||
if sh -n /etc/default/telegraf >/dev/null 2>&1; then
|
||||
set -a; . /etc/default/telegraf; set +a
|
||||
return 0
|
||||
fi
|
||||
printf '\033[1;33m[netbird-telegraf] WARNUNG:\033[0m /etc/default/telegraf ist nicht auswertbar — wird neu geschrieben.\n'
|
||||
_bad="/etc/default/telegraf.unlesbar.$(date +%s)"
|
||||
cp -a /etc/default/telegraf "$_bad" 2>/dev/null || true
|
||||
printf '\033[1;33m[netbird-telegraf]\033[0m Sicherung: %s\n' "$_bad"
|
||||
return 0
|
||||
}
|
||||
die() { printf '\033[1;31m[netbird-telegraf] FEHLER:\033[0m %s\n' "$*" >&2; exit 1; }
|
||||
|
||||
[ "$(id -u)" -eq 0 ] || die "Bitte als root ausführen (sudo)."
|
||||
@@ -186,20 +205,30 @@ if [ "$HAS_APACHE" -eq 1 ] && [ -z "$APACHE_LOG" ]; then
|
||||
# KeyHelp : /home/users/<user>/logs/<domain>/access.log
|
||||
# Plesk : /var/www/vhosts/<domain>/logs/access_log
|
||||
# cPanel : /usr/local/apache/domlogs/<domain> (bzw. /home/<user>/logs)
|
||||
# ALLE passenden Muster sammeln, nicht nur das erste: auf einem KeyHelp-Host
|
||||
# existieren oft BEIDE Strukturen — /var/log/apache2/keyhelp/access.log UND
|
||||
# /home/users/<user>/logs/<domain>/access.log. Nur eines zu waehlen verliert
|
||||
# die Haelfte der Requests.
|
||||
if [ -z "$APACHE_LOG" ]; then
|
||||
_pats=""
|
||||
for _pat in \
|
||||
"/var/log/apache2/*/access.log" \
|
||||
"/home/users/*/logs/*/access.log" \
|
||||
"/home/*/logs/*/access.log" \
|
||||
"/var/www/vhosts/*/logs/access_log" \
|
||||
"/usr/local/apache/domlogs/*" \
|
||||
"/home/*/logs/*/access.log" \
|
||||
"/var/log/apache2/*access*.log" \
|
||||
"/var/log/httpd/*access*.log"; do
|
||||
# shellcheck disable=SC2086
|
||||
if ls $_pat >/dev/null 2>&1; then
|
||||
APACHE_LOG="$_pat"
|
||||
break
|
||||
_pats="$_pats $_pat"
|
||||
fi
|
||||
done
|
||||
# Globale Standarddatei nur, wenn sie NICHT leer ist (auf KeyHelp ist
|
||||
# /var/log/apache2/access.log oft vorhanden, aber 0 Bytes).
|
||||
for _p in /var/log/apache2/access.log /var/log/httpd/access_log; do
|
||||
[ -s "$_p" ] && _pats="$_pats $_p"
|
||||
done
|
||||
[ -n "$_pats" ] && APACHE_LOG="$(printf '%s' "$_pats" | sed 's/^ //')"
|
||||
fi
|
||||
# Einzelne, flache Faelle weiterhin abdecken
|
||||
if [ -z "$APACHE_LOG" ]; then
|
||||
@@ -306,7 +335,13 @@ command_args="--config /etc/telegraf/telegraf.conf --config-directory /etc/teleg
|
||||
command_user=telegraf
|
||||
command_background=true
|
||||
pidfile=/run/telegraf.pid
|
||||
start_pre() { set -a; [ -r /etc/default/telegraf ] && . /etc/default/telegraf; set +a; }
|
||||
start_pre() {
|
||||
# Nur auswerten, wenn die Datei syntaktisch heil ist — sonst startet der
|
||||
# Dienst gar nicht (unquoted Werte mit Leerzeichen brechen das Sourcing).
|
||||
if [ -r /etc/default/telegraf ] && sh -n /etc/default/telegraf 2>/dev/null; then
|
||||
set -a; . /etc/default/telegraf; set +a
|
||||
fi
|
||||
}
|
||||
depend() { need net; }
|
||||
EOF
|
||||
chmod +x /etc/init.d/telegraf
|
||||
@@ -373,7 +408,13 @@ TELEGRAF_TOKEN=$TELEGRAF_TOKEN
|
||||
PVE_TOKEN=$PVE_TOKEN
|
||||
PVE_NODE=$PVE_NODE
|
||||
PVE_URL=$PVE_URL
|
||||
APACHE_LOG=$APACHE_LOG
|
||||
# WICHTIG: Diese Datei wird per ". /etc/default/telegraf" GESOURCT. Werte ohne
|
||||
# Anfuehrungszeichen brechen bei Leerzeichen oder Sonderzeichen: bei mehreren
|
||||
# Logpfaden versucht die Shell, den zweiten Pfad als Befehl auszufuehren
|
||||
# ("...access.log: Permission denied"). Eckige Klammern (TOML-Liste) sind im
|
||||
# Sourcing sogar Syntaxmuell. Deshalb alles quoten — die Werte werden in der
|
||||
# Config nur als String gebraucht, nicht als Liste.
|
||||
APACHE_LOG='$APACHE_LOG'
|
||||
EOF
|
||||
umask 022
|
||||
|
||||
@@ -397,7 +438,7 @@ subst_vars() { # $1 = Quelldatei, $2 = Zieldatei, rest = Variablennamen
|
||||
# Holt eine Conf und ersetzt ${...}-Platzhalter aus /etc/default/telegraf.
|
||||
fetch_conf() {
|
||||
fetch "$1" "$2.tmp"
|
||||
set -a; [ -r /etc/default/telegraf ] && . /etc/default/telegraf; set +a
|
||||
load_defaults
|
||||
if command -v envsubst >/dev/null; then
|
||||
envsubst '${NODE_NAME} ${PROM_URL} ${LOKI_URL} ${TELEGRAF_TOKEN} ${PVE_TOKEN} ${PVE_NODE} ${PVE_URL} ${APACHE_LOG} ${APACHE_FILES}' < "$2.tmp" > "$2"
|
||||
else
|
||||
@@ -539,7 +580,7 @@ fi
|
||||
# Ohne Filter werden ALLE Dateien geparst — genau wie beim Dienststart. Das ist
|
||||
# der einzige Test, der den Startfehler wirklich verhindert.
|
||||
TG="$(command -v telegraf || echo /usr/local/bin/telegraf)"
|
||||
set -a; . /etc/default/telegraf; set +a
|
||||
load_defaults
|
||||
|
||||
conf_test() {
|
||||
_out="$("$TG" --config /etc/telegraf/telegraf.conf \
|
||||
|
||||
Reference in new issue
Block a user