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
|
done
|
||||||
|
|
||||||
log() { printf '\033[1;34m[netbird-telegraf]\033[0m %s\n' "$*"; }
|
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; }
|
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)."
|
[ "$(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
|
# KeyHelp : /home/users/<user>/logs/<domain>/access.log
|
||||||
# Plesk : /var/www/vhosts/<domain>/logs/access_log
|
# Plesk : /var/www/vhosts/<domain>/logs/access_log
|
||||||
# cPanel : /usr/local/apache/domlogs/<domain> (bzw. /home/<user>/logs)
|
# 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
|
if [ -z "$APACHE_LOG" ]; then
|
||||||
|
_pats=""
|
||||||
for _pat in \
|
for _pat in \
|
||||||
|
"/var/log/apache2/*/access.log" \
|
||||||
"/home/users/*/logs/*/access.log" \
|
"/home/users/*/logs/*/access.log" \
|
||||||
|
"/home/*/logs/*/access.log" \
|
||||||
"/var/www/vhosts/*/logs/access_log" \
|
"/var/www/vhosts/*/logs/access_log" \
|
||||||
"/usr/local/apache/domlogs/*" \
|
"/usr/local/apache/domlogs/*" \
|
||||||
"/home/*/logs/*/access.log" \
|
|
||||||
"/var/log/apache2/*access*.log" \
|
|
||||||
"/var/log/httpd/*access*.log"; do
|
"/var/log/httpd/*access*.log"; do
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
if ls $_pat >/dev/null 2>&1; then
|
if ls $_pat >/dev/null 2>&1; then
|
||||||
APACHE_LOG="$_pat"
|
_pats="$_pats $_pat"
|
||||||
break
|
|
||||||
fi
|
fi
|
||||||
done
|
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
|
fi
|
||||||
# Einzelne, flache Faelle weiterhin abdecken
|
# Einzelne, flache Faelle weiterhin abdecken
|
||||||
if [ -z "$APACHE_LOG" ]; then
|
if [ -z "$APACHE_LOG" ]; then
|
||||||
@@ -306,7 +335,13 @@ command_args="--config /etc/telegraf/telegraf.conf --config-directory /etc/teleg
|
|||||||
command_user=telegraf
|
command_user=telegraf
|
||||||
command_background=true
|
command_background=true
|
||||||
pidfile=/run/telegraf.pid
|
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; }
|
depend() { need net; }
|
||||||
EOF
|
EOF
|
||||||
chmod +x /etc/init.d/telegraf
|
chmod +x /etc/init.d/telegraf
|
||||||
@@ -373,7 +408,13 @@ TELEGRAF_TOKEN=$TELEGRAF_TOKEN
|
|||||||
PVE_TOKEN=$PVE_TOKEN
|
PVE_TOKEN=$PVE_TOKEN
|
||||||
PVE_NODE=$PVE_NODE
|
PVE_NODE=$PVE_NODE
|
||||||
PVE_URL=$PVE_URL
|
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
|
EOF
|
||||||
umask 022
|
umask 022
|
||||||
|
|
||||||
@@ -397,7 +438,7 @@ subst_vars() { # $1 = Quelldatei, $2 = Zieldatei, rest = Variablennamen
|
|||||||
# Holt eine Conf und ersetzt ${...}-Platzhalter aus /etc/default/telegraf.
|
# Holt eine Conf und ersetzt ${...}-Platzhalter aus /etc/default/telegraf.
|
||||||
fetch_conf() {
|
fetch_conf() {
|
||||||
fetch "$1" "$2.tmp"
|
fetch "$1" "$2.tmp"
|
||||||
set -a; [ -r /etc/default/telegraf ] && . /etc/default/telegraf; set +a
|
load_defaults
|
||||||
if command -v envsubst >/dev/null; then
|
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"
|
envsubst '${NODE_NAME} ${PROM_URL} ${LOKI_URL} ${TELEGRAF_TOKEN} ${PVE_TOKEN} ${PVE_NODE} ${PVE_URL} ${APACHE_LOG} ${APACHE_FILES}' < "$2.tmp" > "$2"
|
||||||
else
|
else
|
||||||
@@ -539,7 +580,7 @@ fi
|
|||||||
# Ohne Filter werden ALLE Dateien geparst — genau wie beim Dienststart. Das ist
|
# Ohne Filter werden ALLE Dateien geparst — genau wie beim Dienststart. Das ist
|
||||||
# der einzige Test, der den Startfehler wirklich verhindert.
|
# der einzige Test, der den Startfehler wirklich verhindert.
|
||||||
TG="$(command -v telegraf || echo /usr/local/bin/telegraf)"
|
TG="$(command -v telegraf || echo /usr/local/bin/telegraf)"
|
||||||
set -a; . /etc/default/telegraf; set +a
|
load_defaults
|
||||||
|
|
||||||
conf_test() {
|
conf_test() {
|
||||||
_out="$("$TG" --config /etc/telegraf/telegraf.conf \
|
_out="$("$TG" --config /etc/telegraf/telegraf.conf \
|
||||||
|
|||||||
Reference in new issue
Block a user