Proxmox VE Dynamic Login Banner

cpzengel

Renowned Member
Nov 12, 2015
225
31
93
Aschaffenburg, Germany
zfs.rocks
Achtung: AI Generierter Kram:)

Hi Leute,

wir von sysops.tv basteln ja auch gerne mal an Dingen die Spaß machen.
Hier gerade Work in Progress:

https://github.com/bashclub/trmm-scripts/blob/main/update-proxmox-issue.sh

Kann sein daß wir es auf https://github.com/bashclub bald in ein eigenes Repo packen.

Viel Spaß damit und Wünsche gerne hier.

Chriz sysops.tv
1792064157040.png

1792063942399.png

Proxmox VE – Dynamic Login Banner​

Systeminformationen und Hardware-Monitoring im Norton-Commander-Stil​

Das Script update-proxmox-issue.sh erstellt eine kompakte Systemübersicht für Proxmox VE und schreibt diese standardmäßig in /etc/issue und /etc/motd.

Die Anzeige erfolgt im klassischen Norton-Commander-Stil mit blauem Hintergrund, Unicode-Rahmen und farbigen Statusinformationen. Alternativ steht ein reiner ASCII-Modus zur Verfügung.

1. Leistungsumfang​

BereichFunktionen
SystemFQDN, Proxmox-Version, Kernel, Uptime
KernelprüfungVergleich des laufenden Kernels mit der neuesten installierten Proxmox-Kernelversion
ArbeitsspeicherVerfügbarer und gesamter RAM in GiB sowie freier Prozentanteil
CPU / LoadAnzahl logischer CPU-Kerne, Load Average über 1, 5 und 15 Minuten
IP-AdressenGetrennte Anzeige physischer bzw. Host-Netzwerke und virtueller Netzwerke wie Docker und WireGuard
NetzwerkkartenPhysische NICs mit Linkstatus, Geschwindigkeit und Duplexmodus
Virtuelle MaschinenAlle lokalen QEMU-VMs mit VMID, Name und farbigem Betriebsstatus
LXC-ContainerAlle lokalen Container mit VMID, Name und farbigem Betriebsstatus
Proxmox-ClusterClustername, Knotenanzahl, Votes und Quorum
CephHealth-Status, OSD-Zustand und MON-Quorum
MultipathPrüfung von Multipath-Dienst, Pfaden und Maps, sofern installiert
NUT / USVNetzbetrieb, Batteriebetrieb, Akkuladestand, Restlaufzeit und Last
CheckmkAuswertung lokaler Checks aus /var/lib/check_mk_agent/spool
DatastoresName, freier Speicherplatz in GiB und Prozent
ZFS-PoolsPoolname, Zustand und prozentuale Belegung
ZFS-AktivitätenErkennung laufender Scrubs, Resilver- und Trim-Vorgänge
Physische DatenträgerGerätename, Modell, Seriennummer, SMART-Status, Wearout und Betriebsjahre
SSD-LebensdauerRechnerische Restlebensdauer auf Grundlage des bisherigen Wearouts

SMART-Überwachung​

Für SATA-SSDs werden insbesondere folgende SMART-Attribute berücksichtigt:

AttributBedeutung
9Betriebsstunden
177Wear Leveling Count
202Lifetime Used / Remaining
231SSD Life Left
233Media Wearout Indicator
NVMe-Laufwerke werden über ihre entsprechenden SMART-Werte ausgewertet.

Zusätzlich werden kritische SMART-Indikatoren berücksichtigt, unter anderem Reallocated Sectors, Pending Sectors und nicht korrigierbare Fehler.

Die geschätzte verbleibende SSD-Lebensdauer basiert auf einer linearen Hochrechnung des bisherigen Verschleißes. Sie ist keine Vorhersage des tatsächlichen Ausfallzeitpunkts.

2. Farbliche Statusanzeige​

Das Banner verwendet einheitliche Farben:

FarbeBedeutung
GrünNormalbetrieb, keine erkannten Probleme
OrangeWarnung, ausgeschaltete VM/LXC oder erhöhte Belegung
RotFehler oder kritischer Zustand
Für prozentuale Belegungs- und Verbrauchswerte gelten folgende Schwellen:

  • Unter 75 %: Grün
  • Ab 75 %: Orange
  • Ab 80 %: Rot
Bei RAM und Datastores wird der freie Speicher angezeigt, für die Farbgebung aber die Belegung bewertet.

Ein laufender ZFS-Scrub, Trim oder Resilver wird zur besseren Sichtbarkeit rot hervorgehoben. Dies bedeutet nicht automatisch, dass ein Fehler vorliegt.

Checkmk Spool Checks​

Das Script prüft Dateien im Verzeichnis:

/var/lib/check_mk_agent/spool
Berücksichtigt werden Dateien, die mit <<<local>>> beginnen, sowie entsprechend gekennzeichnete lokale Check-Sektionen.

Beispiel:

Spool Checks: 36/36 checks OK
Die Farbe richtet sich nach der Anzahl der Checks, deren Zeilen nicht mit 0 beginnen:

ErgebnisFarbe
36/36 OKGrün
35/36 OKOrange
34/36 OKRot

3. Installation​

Voraussetzungen​

Das Script ist für Proxmox VE unter Debian vorgesehen.

Benötigte Pakete installieren:

apt update
apt install python3 smartmontools ethtool
Optional können nut-client für USV-Daten und multipath-tools für Multipath verwendet werden.

Script installieren​

Das Script heißt:

update-proxmox-issue.sh

Es wird nach /usr/local/sbin/ kopiert:

install -m 755 update-proxmox-issue.sh \
/usr/local/sbin/update-proxmox-issue.sh
Anschließend manuell starten:

/usr/local/sbin/update-proxmox-issue.sh
Dadurch werden standardmäßig beide Dateien neu erzeugt:

/etc/issue
/etc/motd
Die Dateien werden zunächst temporär erstellt und anschließend ersetzt. Bestehende Inhalte werden dabei überschrieben.

4. Parameter​

ParameterFunktion
Ohne ParameterANSI/Unicode im Norton-Commander-Stil, beide Dateien
--monoReine ASCII-Ausgabe ohne Farben
--no-issueNur /etc/motd aktualisieren
--no-motdNur /etc/issue aktualisieren
--helpHilfe anzeigen
Die Parameter können kombiniert werden.

Beispiele:

Standardausgabe:

update-proxmox-issue.sh
Monochrome Ausgabe:

update-proxmox-issue.sh --mono
Nur /etc/motd aktualisieren:

update-proxmox-issue.sh --no-issue
Nur /etc/issue im ASCII-Modus:

update-proxmox-issue.sh --mono --no-motd
Die gleichzeitige Verwendung von --no-issue und --no-motd ist nicht zulässig.

5. Automatische Aktualisierung​

Für eine regelmäßige Aktualisierung empfiehlt sich ein systemd-Timer.

Service anlegen​

Datei:

/etc/systemd/system/proxmox-issue.service

[Unit]
Description=Update Proxmox VE Login Banner

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/update-proxmox-issue.sh

Timer anlegen​

Datei:

/etc/systemd/system/proxmox-issue.timer

[Unit]
Description=Refresh Proxmox VE Login Banner

[Timer]
OnBootSec=1min
OnUnitInactiveSec=5min
Unit=proxmox-issue.service

[Install]
WantedBy=timers.target
Der Timer startet den Service eine Minute nach dem Systemstart und anschließend jeweils fünf Minuten nach dem letzten abgeschlossenen Lauf.

Timer aktivieren​

systemctl daemon-reload
systemctl enable --now proxmox-issue.timer
systemctl start proxmox-issue.service
Kontrolle:

systemctl list-timers proxmox-issue.timer
systemctl status proxmox-issue.service

Timer wieder entfernen​

systemctl disable --now proxmox-issue.timer
systemctl stop proxmox-issue.service

rm -f /etc/systemd/system/proxmox-issue.timer
rm -f /etc/systemd/system/proxmox-issue.service

systemctl daemon-reload
systemctl reset-failed
Das eigentliche Script und die zuletzt erzeugten Bannerdateien bleiben erhalten.

6. Technische Hinweise​

Keine dauerhaften Hintergrundprozesse: Das Script wird einmalig ausgeführt und beendet sich nach der Erstellung der Bannerdateien.

Lesende Systemabfragen: Proxmox, SMART, ZFS, Ceph, NUT und Multipath werden ausschließlich abgefragt. Das Script verändert keine VMs, Datenträger oder Storage-Konfigurationen.

Momentaufnahme: Die angezeigten Werte entsprechen dem letzten Scriptlauf. Eine permanente Echtzeitüberwachung findet nicht statt.

Terminaldarstellung: Für den Norton-Commander-Stil muss das Terminal Unicode und ANSI-Farben unterstützen. Andernfalls kann --mono verwendet werden.

Sicherheit: /etc/issue kann bereits vor einer Anmeldung sichtbar sein. Da das Banner interne IP-Adressen, Hostnamen und Seriennummern enthält, sollte seine Verwendung auf öffentlich erreichbaren Login-Schnittstellen geprüft werden.

SMART-Bewertung: Die ermittelten Verschleißwerte sind herstellerabhängig. Auch ein Laufwerk mit SMART-Status OK kann ohne vorherige Warnung ausfallen.


Zusammenfassung​

Das Proxmox VE Dynamic Login Banner bietet eine kompakte Übersicht über Systemzustand, Virtualisierung, Netzwerk, Storage und Hardwaregesundheit direkt bei der Anmeldung.

Damit lassen sich beispielsweise Kernelabweichungen, gestoppte Gäste, volle ZFS-Pools, fehlerhafte Datenträger, Multipath-Probleme oder ausgefallene USVs erkennen, ohne zunächst mehrere Administrationsbefehle ausführen zu müssen.
 
Last edited:
  • Like
Reactions: fireon
Danke Christian,

auch dieses Tool, wenn Verfügbar, wird unser Proxmox VE Administration vereinfachen.

Seine Verfügbarkeit ist nicht an die Updates der Proxmox VE GUI gebunden und kann so für "immer" im Setup verweilen.

Es sei noch auf die vielen Tausend YouTube Live-Streams und Aufzeichnungen direkt verwiesen.

# https://www.youtube.com/@sysopstv/videos
 
Ich bin zwar genau die Zielgruppe mit Ü55 und ich habe auch in meinem Leben schon viel mit dem NC gemacht, aber dieses Projekt vermag mich noch nicht zu begeistern.

Aber wie so oft ist sicher auch hier der Weg das Ziel, deswegen noch viel Spaß mit dem Projekt.
 
Coole Sache, gefällt mir. Auf dem pve1-Screenshot steht bei Ceph OSD: ?/? | IN: ?, obwohl HEALTH_OK und MON: 3 sauber kommen. Sieht so aus, als greift das Parsing vom OSD-Teil nicht. Vllt. hat sich das JSON-Format von ceph osd stat -f json geändert, oder der Node hat dafür keinen passenden Keyring. Wäre mal einen Blick wert.

Wünsche hätte ich zwei: Die Anzahl ausstehender Updates (apt list --upgradable) würde gut neben die Kernelprüfung passen. Dazu Status und Zeit vom letzten vzdump-Lauf, dann sieht man beim Login gleich, ob das Backup heute Nacht durchgelaufen ist. Und wegen Seriennummern und internen IPs in /etc/issue würde ich --no-issue zum Default machen und /etc/issue nur bei Bedarf beschreiben. Das sieht jeder an der Konsole schon vor dem Login, und viele kopieren das Script einfach ohne die Doku zu lesen.
 
Coole Sache, gefällt mir. Auf dem pve1-Screenshot steht bei Ceph OSD: ?/? | IN: ?, obwohl HEALTH_OK und MON: 3 sauber kommen. Sieht so aus, als greift das Parsing vom OSD-Teil nicht. Vllt. hat sich das JSON-Format von ceph osd stat -f json geändert, oder der Node hat dafür keinen passenden Keyring. Wäre mal einen Blick wert.

Wünsche hätte ich zwei: Die Anzahl ausstehender Updates (apt list --upgradable) würde gut neben die Kernelprüfung passen. Dazu Status und Zeit vom letzten vzdump-Lauf, dann sieht man beim Login gleich, ob das Backup heute Nacht durchgelaufen ist. Und wegen Seriennummern und internen IPs in /etc/issue würde ich --no-issue zum Default machen und /etc/issue nur bei Bedarf beschreiben. Das sieht jeder an der Konsole schon vor dem Login, und viele kopieren das Script einfach ohne die Doku zu lesen.
1792066451101.png
 
  • Like
Reactions: Bu66as and news
Hallo Christian,

ich habe mit Begeisterung das Video auf Sysops.tv angesehen und wollte das gleich mal ausprobieren.

Aber alles was passiert ist untenstehende Fehlermeldung.

root@pve-0:~# bash update-issue.sh
: invalid option name 5: set: pipefail
root@pve-0:~#

Muss ich da für bash noch irgendwas einstellen.
Ich habe - glaube ich - alle Komponenten auf meinem PVE insalliert, aber in Zeile 5 des Scriptes bricht bash ab.

Gruß aus Gross Zimmern

Michael Müller
 
Warum wird das eigentlich als bash-Script verkauft, wenn es so beginnt:
Code:
#!/usr/bin/env bash
# Proxmox VE Login Banner - Norton Commander Style
# Default: ANSI blue /etc/motd ONLY (no pre-login disclosure)
# Options: --mono --issue --no-issue --no-motd
set -euo pipefail
if (( EUID != 0 )); then
    printf 'Bitte als root ausfuehren.\n' >&2
    exit 1
fi
exec python3 - "$@" <<'PY'
 ...
...und dann über 1000 Zeilen Python folgen??? (Und keine einzige weitere Zeile nicht-Python.)

Jetzt antwortet bitte nicht, "weil es vom bashclub stammt"... ;-)
 
Last edited:
@mmuellergz, das riecht stark nach Windows-Zeilenenden (CRLF). Bash sieht dann pipefail\r statt pipefail, daher der komische Doppelpunkt vorne in der Meldung. Dass es genau in Zeile 5 knallt, passt dazu – die Zeilen davor sind Kommentare, da stört das \r nicht. Passiert gern, wenn man den Code aus dem Browser kopiert oder die Datei über einen Windows-Rechner geht. Prüfen und fixen:

Code:
file update-issue.sh
sed -i 's/\r$//' update-issue.sh

Wenn file was von "CRLF line terminators" sagt, war's das. Holst du dir die Datei direkt als Raw von GitHub (wget auf die raw.githubusercontent.com-URL), gibt's das Problem gar nicht erst.

@UdoB, hab ich mich beim ersten Reinschauen auch gefragt. Wenn der Wrapper eh direkt per exec python3 weitergibt, nützt dir das set -euo pipefail davor nichts. Ein reines .py mit #!/usr/bin/env python3 wäre ehrlicher und auch leichter zu linten, der root-Check geht in Python ja genauso mit os.geteuid().
 
  • Like
Reactions: UdoB and Johannes S
@mmuellergz, das riecht stark nach Windows-Zeilenenden (CRLF). Bash sieht dann pipefail\r statt pipefail, daher der komische Doppelpunkt vorne in der Meldung. Dass es genau in Zeile 5 knallt, passt dazu – die Zeilen davor sind Kommentare, da stört das \r nicht. Passiert gern, wenn man den Code aus dem Browser kopiert oder die Datei über einen Windows-Rechner geht. Prüfen und fixen:

Code:
file update-issue.sh
sed -i 's/\r$//' update-issue.sh

Wenn file was von "CRLF line terminators" sagt, war's das. Holst du dir die Datei direkt als Raw von GitHub (wget auf die raw.githubusercontent.com-URL), gibt's das Problem gar nicht erst.

@UdoB, hab ich mich beim ersten Reinschauen auch gefragt. Wenn der Wrapper eh direkt per exec python3 weitergibt, nützt dir das set -euo pipefail davor nichts. Ein reines .py mit #!/usr/bin/env python3 wäre ehrlicher und auch leichter zu linten, der root-Check geht in Python ja genauso mit os.geteuid().
Danke, ich habe mir sowas schon gedacht. Ich habe die Datei als RAW gespeichert. Jetzt funktioniert das.