153 lines
4.6 KiB
Bash
Executable File
153 lines
4.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# ==========================================
|
||
# HX-KI FALKENSTEIN - BIRTH CERTIFICATE V1.0
|
||
# ==========================================
|
||
|
||
set -euo pipefail
|
||
|
||
# Basispfade
|
||
REPORT_DIR="/opt/hx-ki/reports"
|
||
mkdir -p "$REPORT_DIR"
|
||
|
||
TIMESTAMP="$(date +"%Y-%m-%d_%H%M%S")"
|
||
REPORT_FILE="${REPORT_DIR}/hxki_falkenstein_birth_certificate_${TIMESTAMP}.txt"
|
||
|
||
# Header
|
||
{
|
||
echo "==============================================="
|
||
echo " HX-KI SYSTEM GEBURTSURKUNDE – FALKENSTEIN"
|
||
echo "==============================================="
|
||
echo "Erzeugt am: $(date)"
|
||
echo
|
||
} > "$REPORT_FILE"
|
||
|
||
# 1) Server-Basisdaten
|
||
{
|
||
echo "1) SERVER-BASISDATEN"
|
||
echo "--------------------"
|
||
echo "Hostname: $(hostname)"
|
||
echo "OS: $(grep PRETTY_NAME /etc/os-release | cut -d= -f2- | tr -d '\"')"
|
||
echo "Kernel: $(uname -r)"
|
||
echo "CPU: $(lscpu | grep 'Model name' | sed 's/Model name:\s*//')"
|
||
echo "CPU Cores: $(nproc)"
|
||
echo "RAM (gesamt): $(grep MemTotal /proc/meminfo | awk '{printf \"%.1f GB\", $2/1024/1024}')"
|
||
echo "Swap: $(grep SwapTotal /proc/meminfo | awk '{printf \"%.1f GB\", $2/1024/1024}')"
|
||
echo "Root-Filesystem: $(df -h / | tail -1 | awk '{print $2 \" gesamt, \" $3 \" belegt, \" $4 \" frei (\" $5 \" genutzt)\"}')"
|
||
echo
|
||
} >> "$REPORT_FILE"
|
||
|
||
# 2) Docker / Container / Services
|
||
{
|
||
echo "2) DOCKER & CONTAINERZUSTAND"
|
||
echo "----------------------------"
|
||
if command -v docker >/dev/null 2>&1; then
|
||
echo "Docker Version: $(docker --version)"
|
||
echo
|
||
echo "Laufende Container:"
|
||
docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}" || echo "Keine laufenden Container gefunden."
|
||
else
|
||
echo "Docker ist nicht installiert oder nicht im PATH."
|
||
fi
|
||
echo
|
||
} >> "$REPORT_FILE"
|
||
|
||
# 3) Wichtige HX-KI-Komponenten erkennen
|
||
{
|
||
echo "3) HX-KI KOMPONENTEN – FALKENSTEIN"
|
||
echo "----------------------------------"
|
||
echo "Hinweis: Erkennung über Container-Namen (hxki-*)"
|
||
|
||
if command -v docker >/dev/null 2>&1; then
|
||
# Liste typischer Dienste
|
||
SERVICES=(
|
||
"hxki-gitea"
|
||
"hxki-grafana"
|
||
"hxki-prometheus"
|
||
"hxki-n8n"
|
||
"hxki-mariadb"
|
||
"hxki-mautic"
|
||
"hxki-syncthing"
|
||
"hxki-nats"
|
||
"hxki-web"
|
||
"hxki-postgres"
|
||
"hxki-mailcow"
|
||
)
|
||
|
||
for s in "${SERVICES[@]}"; do
|
||
if docker ps --format '{{.Names}}' | grep -q "^${s}$"; then
|
||
status="$(docker ps --filter "name=${s}" --format '{{.Status}}')"
|
||
image="$(docker ps --filter "name=${s}" --format '{{.Image}}')"
|
||
echo "- ${s}: LAUFEND (${status}, Image: ${image})"
|
||
elif docker ps -a --format '{{.Names}}' | grep -q "^${s}$"; then
|
||
status="$(docker ps -a --filter "name=${s}" --format '{{.Status}}')"
|
||
image="$(docker ps -a --filter "name=${s}" --format '{{.Image}}')"
|
||
echo "- ${s}: INSTALLIERT, ABER NICHT LAUFEND (${status}, Image: ${image})"
|
||
else
|
||
echo "- ${s}: NICHT GEFUNDEN"
|
||
fi
|
||
done
|
||
else
|
||
echo "Docker nicht verfügbar – Komponenten können nicht geprüft werden."
|
||
fi
|
||
|
||
echo
|
||
} >> "$REPORT_FILE"
|
||
|
||
# 4) Netzwerke & Ports
|
||
{
|
||
echo "4) NETZWERK & PORTS"
|
||
echo "-------------------"
|
||
if command -v docker >/dev/null 2>&1; then
|
||
echo "Docker-Netzwerke:"
|
||
docker network ls || echo "Keine Netzwerke gefunden."
|
||
echo
|
||
fi
|
||
|
||
echo "Aktiv lauschende Ports (netstat/ss):"
|
||
if command -v ss >/dev/null 2>&1; then
|
||
ss -tulpn | sed -n '1,50p'
|
||
elif command -v netstat >/dev/null 2>&1; then
|
||
netstat -tulpn | sed -n '1,50p'
|
||
else
|
||
echo "Weder ss noch netstat verfügbar."
|
||
fi
|
||
echo
|
||
} >> "$REPORT_FILE"
|
||
|
||
# 5) HX-KI Verzeichnisstruktur (falls vorhanden)
|
||
{
|
||
echo "5) HX-KI VERZEICHNISSTRUKTUR (KURZÜBERSICHT)"
|
||
echo "--------------------------------------------"
|
||
HX_DIR="/opt/hx-ki"
|
||
if [ -d "$HX_DIR" ]; then
|
||
echo "Basisverzeichnis: $HX_DIR"
|
||
echo
|
||
echo "Top-Level-Struktur:"
|
||
find "$HX_DIR" -maxdepth 2 -type d | sed "s|$HX_DIR|/opt/hx-ki|"
|
||
else
|
||
echo "$HX_DIR existiert nicht oder ist nicht erreichbar."
|
||
fi
|
||
echo
|
||
} >> "$REPORT_FILE"
|
||
|
||
# 6) Zusammenfassung
|
||
{
|
||
echo "6) KURZZUSAMMENFASSUNG – FALKENSTEIN STATUS"
|
||
echo "-------------------------------------------"
|
||
echo "Dieser Bericht fasst den aktuellen Systemzustand des HX-KI Knotens"
|
||
echo "Falkenstein zusammen (Serverressourcen, Container, Netzwerke, HX-KI"
|
||
echo "Kernkomponenten und Basisstruktur)."
|
||
echo
|
||
echo "Berichtsdatei:"
|
||
echo " $REPORT_FILE"
|
||
echo
|
||
echo "Hinweis:"
|
||
echo "- Dies ist die 'Geburtsurkunde' des Systemzustands zum Zeitpunkt:"
|
||
echo " $(date)"
|
||
echo "- Der Bericht kann jederzeit erneut erzeugt werden."
|
||
echo
|
||
} >> "$REPORT_FILE"
|
||
|
||
echo "HX-KI Geburtsurkunde für Falkenstein erstellt:"
|
||
echo " $REPORT_FILE"
|