📝 "Refactor log files and setup script for better maintainability (🐛)"

This commit is contained in:
2025-06-10 09:42:03 +02:00
parent 010f401a5f
commit 12483a5bdd
5 changed files with 376 additions and 269 deletions

View File

@@ -29,18 +29,181 @@ AUTO_INSTALL_MODE=""
FORCE_PRODUCTION=false
FORCE_DEVELOPMENT=false
# =========================== CREDENTIALS KONFIGURATION ===========================
# Zentrale Credentials-Verwaltung basierend auf CREDENTIALS.md
readonly MYP_SECRET_KEY="7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F"
readonly MYP_MAIN_PASSWORD="744563017196A"
readonly MYP_SSH_PASSWORD="raspberry"
readonly MYP_ADMIN_EMAIL="admin@mercedes-benz.com"
readonly MYP_TAPO_EMAIL="till.tomczak@mercedes-benz.com"
readonly MYP_TAPO_PASSWORD="744563017196A"
readonly MYP_ROUTER_USER="admin"
readonly MYP_ROUTER_PASSWORD="vT6Vsd^p"
readonly MYP_GITHUB_CLIENT_ID="7c5d8bef1a5519ec1fdc"
readonly MYP_GITHUB_CLIENT_SECRET="5f1e586204358fbd53cf5fb7d418b3f06ccab8fd"
# =========================== DYNAMISCHE CREDENTIALS KONFIGURATION ===========================
# Zentrale Credentials-Verwaltung mit dynamischen Override-Möglichkeiten
# Standard-Credentials (werden ggf. überschrieben)
MYP_SECRET_KEY="7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F"
MYP_MAIN_PASSWORD="744563017196A"
MYP_SSH_PASSWORD="raspberry"
MYP_ADMIN_EMAIL="admin@mercedes-benz.com"
MYP_TAPO_EMAIL="till.tomczak@mercedes-benz.com"
MYP_TAPO_PASSWORD="744563017196A"
MYP_ROUTER_USER="admin"
MYP_ROUTER_PASSWORD="vT6Vsd^p"
MYP_GITHUB_CLIENT_ID="7c5d8bef1a5519ec1fdc"
MYP_GITHUB_CLIENT_SECRET="5f1e586204358fbd53cf5fb7d418b3f06ccab8fd"
# Funktion: Dynamische Credentials laden/ändern
load_dynamic_credentials() {
log "🔑 LADE DYNAMISCHE CREDENTIALS..."
# Credentials aus Umgebungsvariablen überschreiben (falls gesetzt)
MYP_SECRET_KEY="${MYP_SECRET_KEY_OVERRIDE:-$MYP_SECRET_KEY}"
MYP_MAIN_PASSWORD="${MYP_MAIN_PASSWORD_OVERRIDE:-$MYP_MAIN_PASSWORD}"
MYP_SSH_PASSWORD="${MYP_SSH_PASSWORD_OVERRIDE:-$MYP_SSH_PASSWORD}"
MYP_ADMIN_EMAIL="${MYP_ADMIN_EMAIL_OVERRIDE:-$MYP_ADMIN_EMAIL}"
MYP_TAPO_EMAIL="${MYP_TAPO_EMAIL_OVERRIDE:-$MYP_TAPO_EMAIL}"
MYP_TAPO_PASSWORD="${MYP_TAPO_PASSWORD_OVERRIDE:-$MYP_TAPO_PASSWORD}"
MYP_ROUTER_USER="${MYP_ROUTER_USER_OVERRIDE:-$MYP_ROUTER_USER}"
MYP_ROUTER_PASSWORD="${MYP_ROUTER_PASSWORD_OVERRIDE:-$MYP_ROUTER_PASSWORD}"
MYP_GITHUB_CLIENT_ID="${MYP_GITHUB_CLIENT_ID_OVERRIDE:-$MYP_GITHUB_CLIENT_ID}"
MYP_GITHUB_CLIENT_SECRET="${MYP_GITHUB_CLIENT_SECRET_OVERRIDE:-$MYP_GITHUB_CLIENT_SECRET}"
# Credentials aus externer Datei laden (falls vorhanden)
local credentials_file="$CURRENT_DIR/CREDENTIALS_OVERRIDE.env"
if [ -f "$credentials_file" ]; then
progress "Lade Credentials aus: $credentials_file"
source "$credentials_file"
info "✅ Externe Credentials-Datei geladen"
fi
# Interaktive Credentials-Änderung (falls gewünscht)
if [ "${INTERACTIVE_CREDENTIALS:-0}" = "1" ]; then
interactive_credentials_setup
fi
# Credentials als readonly setzen
readonly MYP_SECRET_KEY MYP_MAIN_PASSWORD MYP_SSH_PASSWORD MYP_ADMIN_EMAIL
readonly MYP_TAPO_EMAIL MYP_TAPO_PASSWORD MYP_ROUTER_USER MYP_ROUTER_PASSWORD
readonly MYP_GITHUB_CLIENT_ID MYP_GITHUB_CLIENT_SECRET
success "✅ Dynamische Credentials geladen und fixiert"
}
# Funktion: Interaktive Credentials-Einrichtung
interactive_credentials_setup() {
log "🔧 INTERAKTIVE CREDENTIALS-EINRICHTUNG"
echo ""
echo "🔑 CREDENTIALS ANPASSEN (Enter = Standard beibehalten)"
echo "====================================================="
# Secret Key
echo -n "MYP Secret Key [${MYP_SECRET_KEY:0:8}...]: "
read input_secret_key
if [ -n "$input_secret_key" ]; then
MYP_SECRET_KEY="$input_secret_key"
fi
# Main Password
echo -n "MYP Main Password [***]: "
read -s input_main_password
echo ""
if [ -n "$input_main_password" ]; then
MYP_MAIN_PASSWORD="$input_main_password"
fi
# SSH Password
echo -n "SSH Password [***]: "
read -s input_ssh_password
echo ""
if [ -n "$input_ssh_password" ]; then
MYP_SSH_PASSWORD="$input_ssh_password"
fi
# Admin Email
echo -n "Admin Email [$MYP_ADMIN_EMAIL]: "
read input_admin_email
if [ -n "$input_admin_email" ]; then
MYP_ADMIN_EMAIL="$input_admin_email"
fi
# TAPO Email
echo -n "TAPO Email [$MYP_TAPO_EMAIL]: "
read input_tapo_email
if [ -n "$input_tapo_email" ]; then
MYP_TAPO_EMAIL="$input_tapo_email"
fi
# TAPO Password
echo -n "TAPO Password [***]: "
read -s input_tapo_password
echo ""
if [ -n "$input_tapo_password" ]; then
MYP_TAPO_PASSWORD="$input_tapo_password"
fi
# Router Credentials
echo -n "Router User [$MYP_ROUTER_USER]: "
read input_router_user
if [ -n "$input_router_user" ]; then
MYP_ROUTER_USER="$input_router_user"
fi
echo -n "Router Password [***]: "
read -s input_router_password
echo ""
if [ -n "$input_router_password" ]; then
MYP_ROUTER_PASSWORD="$input_router_password"
fi
# GitHub Credentials
echo -n "GitHub Client ID [${MYP_GITHUB_CLIENT_ID:0:8}...]: "
read input_github_id
if [ -n "$input_github_id" ]; then
MYP_GITHUB_CLIENT_ID="$input_github_id"
fi
echo -n "GitHub Client Secret [***]: "
read -s input_github_secret
echo ""
if [ -n "$input_github_secret" ]; then
MYP_GITHUB_CLIENT_SECRET="$input_github_secret"
fi
echo ""
info "✅ Interaktive Credentials-Einrichtung abgeschlossen"
# Optional: Credentials in Override-Datei speichern
echo -n "Sollen die neuen Credentials gespeichert werden? (j/N): "
read save_credentials
if [[ "$save_credentials" =~ ^[jJ]$ ]]; then
save_credentials_override
fi
}
# Funktion: Credentials in Override-Datei speichern
save_credentials_override() {
local override_file="$CURRENT_DIR/CREDENTIALS_OVERRIDE.env"
progress "Speichere Credentials-Override in: $override_file"
cat > "$override_file" << EOF
# MYP Credentials Override
# Diese Datei überschreibt die Standard-Credentials
# Generiert: $(date '+%Y-%m-%d %H:%M:%S')
export MYP_SECRET_KEY_OVERRIDE="$MYP_SECRET_KEY"
export MYP_MAIN_PASSWORD_OVERRIDE="$MYP_MAIN_PASSWORD"
export MYP_SSH_PASSWORD_OVERRIDE="$MYP_SSH_PASSWORD"
export MYP_ADMIN_EMAIL_OVERRIDE="$MYP_ADMIN_EMAIL"
export MYP_TAPO_EMAIL_OVERRIDE="$MYP_TAPO_EMAIL"
export MYP_TAPO_PASSWORD_OVERRIDE="$MYP_TAPO_PASSWORD"
export MYP_ROUTER_USER_OVERRIDE="$MYP_ROUTER_USER"
export MYP_ROUTER_PASSWORD_OVERRIDE="$MYP_ROUTER_PASSWORD"
export MYP_GITHUB_CLIENT_ID_OVERRIDE="$MYP_GITHUB_CLIENT_ID"
export MYP_GITHUB_CLIENT_SECRET_OVERRIDE="$MYP_GITHUB_CLIENT_SECRET"
# Verwendung:
# source CREDENTIALS_OVERRIDE.env && sudo ./setup.sh
# oder
# MYP_SECRET_KEY_OVERRIDE="neuer_key" sudo ./setup.sh
EOF
chmod 600 "$override_file"
success "✅ Credentials-Override gespeichert: $override_file"
info " Verwendung: source $override_file && sudo ./setup.sh"
}
# Log-Dateien - verwende relatives logs-Verzeichnis
mkdir -p "$CURRENT_DIR/logs" 2>/dev/null || true
@@ -217,8 +380,8 @@ show_help() {
echo -e "${CYAN}=================================================================${NC}"
}
# =========================== CREDENTIALS VALIDIERUNG ===========================
validate_credentials() {
# =========================== UMFASSENDE CREDENTIALS VALIDIERUNG ===========================
validate_credentials_comprehensive() {
log "=== VALIDIERE CREDENTIALS KONFIGURATION ==="
local validation_errors=0
@@ -1531,87 +1694,176 @@ remove_desktop_environments() {
log "✅ Desktop Environments vollständig entfernt"
}
# =========================== VOLLSTÄNDIGE UMGEBUNGSBEREINIGUNG ===========================
# =========================== AGGRESSIVE VOLLSTÄNDIGE UMGEBUNGSBEREINIGUNG ===========================
complete_environment_cleanup() {
log "🧹 VOLLSTÄNDIGE UMGEBUNGSBEREINIGUNG..."
log "🧹 AGGRESSIVE VOLLSTÄNDIGE UMGEBUNGSBEREINIGUNG..."
# Alle laufenden Desktop-Services stoppen
progress "Stoppe alle Desktop-Services..."
systemctl stop gdm3 2>/dev/null || true
systemctl stop lightdm 2>/dev/null || true
systemctl stop sddm 2>/dev/null || true
systemctl stop xdm 2>/dev/null || true
# SCHRITT 1: Alle laufenden Desktop-Services sofort stoppen und MASKIEREN
progress "Stoppe und maskiere ALLE Desktop-Services aggressiv..."
local desktop_services=(
"gdm3" "gdm" "lightdm" "sddm" "xdm" "nodm" "wdm" "kdm" "lxdm"
"display-manager" "graphical-session.target"
"gnome-session-manager" "kde-session" "xfce4-session" "lxsession"
"desktop-session" "x11-session" "wayland-session"
)
# Alle Desktop-Environments vollständig entfernen
progress "Entferne alle Desktop-Environments vollständig..."
for service in "${desktop_services[@]}"; do
systemctl stop "$service" 2>/dev/null || true
systemctl disable "$service" 2>/dev/null || true
systemctl mask "$service" 2>/dev/null || true
progress "Service $service: gestoppt, deaktiviert, MASKIERT"
done
# GNOME komplett entfernen
if dpkg -l | grep -q gnome; then
progress "Entferne GNOME komplett..."
apt-get remove --purge -y gnome* gdm3* ubuntu-desktop* ubuntu-session*
apt-get remove --purge -y gnome-shell gnome-desktop* gnome-session* gnome-control-center*
apt-get remove --purge -y nautilus gedit evince totem rhythmbox
fi
# SCHRITT 2: Boot-Target auf multi-user setzen (KEIN automatisches GUI)
progress "🚫 Setze Boot-Target auf multi-user - KEIN automatisches GUI mehr!"
systemctl set-default multi-user.target
systemctl disable graphical.target 2>/dev/null || true
systemctl mask graphical.target 2>/dev/null || true
systemctl disable graphical-session.target 2>/dev/null || true
systemctl mask graphical-session.target 2>/dev/null || true
# KDE komplett entfernen
if dpkg -l | grep -q kde; then
progress "Entferne KDE komplett..."
apt-get remove --purge -y kde* plasma* kubuntu-desktop*
fi
warning "⚠️ WICHTIG: Kein Desktop-Environment startet mehr automatisch nach Reboot!"
# XFCE komplett entfernen
if dpkg -l | grep -q xfce; then
progress "Entferne XFCE komplett..."
apt-get remove --purge -y xfce4* xubuntu-desktop*
fi
# SCHRITT 3: Alle Desktop-Prozesse brutal beenden
progress "💀 Beende alle laufenden Desktop-Prozesse brutal..."
local desktop_processes=(
"gnome-session" "kde-session" "xfce4-session" "lxsession" "mate-session"
"cinnamon-session" "unity" "compiz" "metacity" "kwin" "mutter"
"X :0" "Xorg" "xfce4-panel" "gnome-panel" "kde-panel" "lxpanel"
"nautilus" "dolphin" "thunar" "pcmanfm" "caja"
)
# LXDE/LXQt komplett entfernen
if dpkg -l | grep -q lxde || dpkg -l | grep -q lxqt; then
progress "Entferne LXDE/LXQt komplett..."
apt-get remove --purge -y lxde* lxqt* lubuntu-desktop*
fi
for process in "${desktop_processes[@]}"; do
pkill -f "$process" 2>/dev/null || true
progress "Prozess $process: beendet"
done
# MATE komplett entfernen
if dpkg -l | grep -q mate; then
progress "Entferne MATE komplett..."
apt-get remove --purge -y mate* ubuntu-mate-desktop*
fi
# SCHRITT 4: Display Manager KOMPLETT deinstallieren
progress "🗑️ Entferne ALLE Display Manager komplett..."
apt-get remove --purge -y \
gdm3* gdm* lightdm* sddm* xdm* nodm* wdm* kdm* lxdm* \
display-manager-service* slim* entrance* \
2>/dev/null || true
# Cinnamon komplett entfernen
if dpkg -l | grep -q cinnamon; then
progress "Entferne Cinnamon komplett..."
apt-get remove --purge -y cinnamon*
fi
# SCHRITT 5: Desktop-Environments AGGRESSIV entfernen
progress "🔥 Entferne ALLE Desktop-Environments AGGRESSIV..."
# Alte Python-Installationen bereinigen
progress "Bereinige alte Python-Installationen..."
# GNOME - komplett vernichten
progress "Vernichte GNOME komplett..."
apt-get remove --purge -y \
gnome* gdm3* ubuntu-desktop* ubuntu-session* \
gnome-shell* gnome-desktop* gnome-session* gnome-control-center* \
nautilus* gedit* evince* totem* rhythmbox* \
gnome-calculator* gnome-calendar* gnome-contacts* \
2>/dev/null || true
# KDE - komplett vernichten
progress "Vernichte KDE komplett..."
apt-get remove --purge -y \
kde* plasma* kubuntu-desktop* kdebase* kdelibs* \
dolphin* konqueror* kate* okular* \
2>/dev/null || true
# XFCE - komplett vernichten
progress "Vernichte XFCE komplett..."
apt-get remove --purge -y \
xfce4* xubuntu-desktop* thunar* xfce4-panel* \
xfce4-terminal* xfce4-appfinder* \
2>/dev/null || true
# LXDE/LXQt - komplett vernichten
progress "Vernichte LXDE/LXQt komplett..."
apt-get remove --purge -y \
lxde* lxqt* lubuntu-desktop* pcmanfm* lxpanel* \
lxterminal* lxsession* \
2>/dev/null || true
# MATE - komplett vernichten
progress "Vernichte MATE komplett..."
apt-get remove --purge -y \
mate* ubuntu-mate-desktop* caja* pluma* \
mate-panel* mate-desktop* \
2>/dev/null || true
# Cinnamon - komplett vernichten
progress "Vernichte Cinnamon komplett..."
apt-get remove --purge -y \
cinnamon* nemo* \
2>/dev/null || true
# Unity (falls noch vorhanden)
progress "Vernichte Unity..."
apt-get remove --purge -y \
unity* ubuntu-unity-desktop* \
2>/dev/null || true
# SCHRITT 6: Desktop-Meta-Pakete entfernen
progress "🗑️ Entferne Desktop-Meta-Pakete..."
apt-get remove --purge -y \
ubuntu-desktop* kubuntu-desktop* xubuntu-desktop* \
lubuntu-desktop* ubuntu-mate-desktop* ubuntu-unity-desktop* \
desktop-base* tasksel* task-desktop* \
2>/dev/null || true
# SCHRITT 7: Autostart-Verzeichnisse bereinigen
progress "🧹 Bereinige Autostart-Verzeichnisse..."
rm -rf /etc/xdg/autostart/* 2>/dev/null || true
rm -rf /usr/share/xsessions/* 2>/dev/null || true
rm -rf /usr/share/wayland-sessions/* 2>/dev/null || true
rm -rf ~/.config/autostart/* 2>/dev/null || true
# SCHRITT 8: Python-Installationen bereinigen
progress "🐍 Bereinige alte Python-Installationen..."
apt-get remove --purge -y python3-pip python3-venv python3-virtualenv
rm -rf /usr/local/lib/python3.*/dist-packages/* 2>/dev/null || true
rm -rf ~/.local/lib/python3.*/site-packages/* 2>/dev/null || true
rm -rf /home/*/.local/lib/python3.*/site-packages/* 2>/dev/null || true
# Snap-Pakete entfernen (falls vorhanden)
# SCHRITT 9: Snap-Pakete komplett entfernen
if command -v snap >/dev/null 2>&1; then
progress "Entferne Snap-Pakete..."
snap list | awk 'NR>1 {print $1}' | xargs -r snap remove 2>/dev/null || true
progress "📦 Entferne alle Snap-Pakete..."
snap list 2>/dev/null | awk 'NR>1 {print $1}' | while read snapname; do
snap remove "$snapname" --purge 2>/dev/null || true
done
apt-get remove --purge -y snapd 2>/dev/null || true
fi
# Flatpak-Pakete entfernen (falls vorhanden)
# SCHRITT 10: Flatpak-Pakete komplett entfernen
if command -v flatpak >/dev/null 2>&1; then
progress "Entferne Flatpak-Pakete..."
progress "📦 Entferne alle Flatpak-Pakete..."
flatpak uninstall --all -y 2>/dev/null || true
apt-get remove --purge -y flatpak* 2>/dev/null || true
fi
# Umfassende Bereinigung
# SCHRITT 11: AGGRESSIVE Bereinigung
progress "🧽 Führe aggressive System-Bereinigung durch..."
apt-get autoremove --purge -y
apt-get autoclean
apt-get clean
# Cache-Verzeichnisse bereinigen
# Alle Caches leeren
rm -rf /var/cache/apt/archives/*
rm -rf /tmp/*
rm -rf /var/tmp/*
rm -rf /var/cache/fontconfig/*
rm -rf /home/*/.cache/* 2>/dev/null || true
rm -rf /root/.cache/* 2>/dev/null || true
success "✅ Vollständige Umgebungsbereinigung abgeschlossen"
# SCHRITT 12: Desktop-Konfigurationen entfernen
progress "🗑️ Entferne Desktop-Konfigurationen..."
rm -rf /etc/gdm3/ 2>/dev/null || true
rm -rf /etc/lightdm/ 2>/dev/null || true
rm -rf /etc/sddm/ 2>/dev/null || true
rm -rf /etc/xdg/ 2>/dev/null || true
rm -rf /home/*/.config/autostart/ 2>/dev/null || true
rm -rf /home/*/.config/xfce4/ 2>/dev/null || true
rm -rf /home/*/.config/lxsession/ 2>/dev/null || true
rm -rf /home/*/.gnome/ 2>/dev/null || true
rm -rf /home/*/.kde/ 2>/dev/null || true
success "✅ AGGRESSIVE Umgebungsbereinigung abgeschlossen!"
warning "⚠️ WICHTIG: Nach Reboot startet KEIN Desktop automatisch mehr!"
warning "⚠️ Nur noch Kiosk-Modus wird automatisch gestartet!"
}
# =========================== SAUBERE PYTHON-UMGEBUNG ===========================
@@ -5014,7 +5266,7 @@ main() {
check_root
# Credentials validieren
validate_credentials
validate_credentials_comprehensive
# Automatische Modus-Erkennung
detect_installation_mode "$@"
@@ -5142,6 +5394,9 @@ install_full_production_system_auto() {
check_debian_system
check_internet_connection
# Dynamische Credentials laden
load_dynamic_credentials
# System-Grundkonfiguration
configure_hostname
@@ -5237,7 +5492,43 @@ install_full_production_system_auto() {
cleanup_old_files
success "✅ Produktions-Installation abgeschlossen!"
warning "🔄 NEUSTART ERFORDERLICH für vollständige Kiosk-Aktivierung!"
warning "🔄 AUTOMATISCHER NEUSTART in 10 Sekunden für vollständige Kiosk-Aktivierung!"
# FINALE PHASE: AUTOMATISCHER NEUSTART
log "🔄 FINALE PHASE: AUTOMATISCHER NEUSTART"
# Zusammenfassung der Installation
log ""
log "📋 INSTALLATIONS-ZUSAMMENFASSUNG:"
log " ✅ Vollständige Umgebungsbereinigung durchgeführt"
log " ✅ Python 3.11 mit --break-system-packages installiert"
log " ✅ Minimales Desktop-Environment konfiguriert"
log " ✅ Robuste Autologin-Konfiguration implementiert"
log " ✅ Kiosk-Autostart mit Watchdog aktiviert"
log " ✅ Alle Desktop-Environments deaktiviert"
log " ✅ Boot-Target auf multi-user gesetzt"
log ""
log "🎯 NACH DEM NEUSTART:"
log " → System startet automatisch ohne Desktop"
log " → Kiosk-User loggt sich automatisch ein (tty1)"
log " → X11-Server startet automatisch"
log " → Browser öffnet MYP-Anwendung im Kiosk-Modus"
log " → Vollautomatischer Betrieb ohne Benutzerinteraktion"
log ""
# Countdown für automatischen Reboot
progress "Starte automatischen Neustart in 10 Sekunden..."
for i in {10..1}; do
echo -ne "\r🔄 Neustart in $i Sekunden... (Ctrl+C zum Abbrechen)"
sleep 1
done
echo ""
log "🚀 STARTE NEUSTART FÜR KIOSK-AKTIVIERUNG..."
sync
# Automatischer Neustart
reboot
}
show_final_summary() {