#!/bin/bash # ============================================================================= # MYP Fehlerresilienz und Wartungsfreier Betrieb - Update Script # ============================================================================= # Installiert und konfiguriert alle Komponenten für absolute Fehlerresilienz # und wartungsfreien Produktionsbetrieb mit Kiosk-Modus. # BEREINIGT ALLE DESKTOP-ENVIRONMENTS für maximale Stabilität! # # Autor: MYP System # Version: 2.1.0 # Datum: $(date '+%Y-%m-%d') # ============================================================================= set -euo pipefail # Farben für Output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' WHITE='\033[1;37m' NC='\033[0m' # No Color # Logging-Funktionen log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } log_debug() { echo -e "${BLUE}[DEBUG]${NC} $1" } log_header() { echo -e "\n${PURPLE}=== $1 ===${NC}" } log_step() { echo -e "${CYAN}➤${NC} $1" } # Fehlerbehandlung error_exit() { log_error "$1" exit 1 } # Prüfe Root-Rechte check_root() { if [[ $EUID -ne 0 ]]; then error_exit "Dieses Script muss als root ausgeführt werden!" fi } # Prüfe Betriebssystem check_os() { if [[ ! -f /etc/os-release ]]; then error_exit "Kann Betriebssystem nicht identifizieren!" fi . /etc/os-release case "$ID" in ubuntu|debian) PACKAGE_MANAGER="apt" ;; centos|rhel|fedora) PACKAGE_MANAGER="yum" ;; arch) PACKAGE_MANAGER="pacman" ;; *) error_exit "Nicht unterstütztes Betriebssystem: $ID" ;; esac log_info "Erkanntes OS: $PRETTY_NAME ($ID)" log_info "Package Manager: $PACKAGE_MANAGER" } # ============================================================================= # DESKTOP-ENVIRONMENT BEREINIGUNG # ============================================================================= cleanup_desktop_environments() { log_header "Desktop-Environment Bereinigung" log_step "Stoppe alle laufenden Desktop-Services..." # Stoppe Display-Manager und Desktop-Services systemctl stop gdm3 2>/dev/null || true systemctl stop gdm 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 systemctl stop kdm 2>/dev/null || true systemctl stop lxdm 2>/dev/null || true # Deaktiviere Display-Manager systemctl disable gdm3 2>/dev/null || true systemctl disable gdm 2>/dev/null || true systemctl disable lightdm 2>/dev/null || true systemctl disable sddm 2>/dev/null || true systemctl disable xdm 2>/dev/null || true systemctl disable kdm 2>/dev/null || true systemctl disable lxdm 2>/dev/null || true log_step "Entferne Desktop-Environments und unnötige Pakete..." if [[ "$PACKAGE_MANAGER" == "apt" ]]; then # GNOME entfernen apt-get remove --purge -y \ ubuntu-desktop \ gnome-desktop* \ gnome-shell \ gnome-session \ gnome-control-center \ gnome-settings-daemon \ nautilus \ gdm3 \ gdm \ 2>/dev/null || true # KDE entfernen apt-get remove --purge -y \ kubuntu-desktop \ kde-plasma-desktop \ plasma-desktop \ kdebase-workspace \ kde-window-manager \ kwin \ dolphin \ sddm \ kdm \ 2>/dev/null || true # XFCE entfernen apt-get remove --purge -y \ xubuntu-desktop \ xfce4 \ xfce4-session \ xfce4-panel \ xfwm4 \ thunar \ lightdm \ 2>/dev/null || true # LXDE/LXQt entfernen apt-get remove --purge -y \ lubuntu-desktop \ lxde \ lxde-core \ lxqt \ lxsession \ pcmanfm \ lxdm \ 2>/dev/null || true # MATE entfernen apt-get remove --purge -y \ ubuntu-mate-desktop \ mate-desktop-environment \ mate-session-manager \ mate-panel \ caja \ 2>/dev/null || true # Cinnamon entfernen apt-get remove --purge -y \ cinnamon \ cinnamon-desktop-environment \ cinnamon-session \ nemo \ 2>/dev/null || true # Budgie entfernen apt-get remove --purge -y \ ubuntu-budgie-desktop \ budgie-desktop \ budgie-desktop-environment \ 2>/dev/null || true # Unity entfernen (falls noch vorhanden) apt-get remove --purge -y \ ubuntu-unity-desktop \ unity \ unity-control-center \ unity-settings-daemon \ 2>/dev/null || true # Weitere Desktop-Programme entfernen apt-get remove --purge -y \ firefox \ libreoffice* \ thunderbird \ evolution \ rhythmbox \ totem \ cheese \ shotwell \ simple-scan \ remmina \ transmission-gtk \ brasero \ deja-dup \ usb-creator-gtk \ software-center \ ubuntu-software \ gnome-software \ snap-store \ update-manager \ 2>/dev/null || true # Autoremove ausführen apt-get autoremove --purge -y apt-get autoclean elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then # GNOME entfernen yum groupremove -y "GNOME Desktop" 2>/dev/null || true yum remove -y gnome-shell gdm 2>/dev/null || true # KDE entfernen yum groupremove -y "KDE Plasma Workspaces" 2>/dev/null || true yum remove -y plasma-desktop sddm 2>/dev/null || true # XFCE entfernen yum groupremove -y "Xfce Desktop" 2>/dev/null || true yum remove -y xfce4-session lightdm 2>/dev/null || true # LXDE entfernen yum groupremove -y "LXDE Desktop" 2>/dev/null || true yum remove -y lxde-common lxdm 2>/dev/null || true # MATE entfernen yum groupremove -y "MATE Desktop" 2>/dev/null || true # Cinnamon entfernen yum remove -y cinnamon 2>/dev/null || true elif [[ "$PACKAGE_MANAGER" == "pacman" ]]; then # GNOME entfernen pacman -Rns --noconfirm gnome gnome-extra gdm 2>/dev/null || true # KDE entfernen pacman -Rns --noconfirm plasma kde-applications sddm 2>/dev/null || true # XFCE entfernen pacman -Rns --noconfirm xfce4 xfce4-goodies lightdm 2>/dev/null || true # LXDE entfernen pacman -Rns --noconfirm lxde lxdm 2>/dev/null || true # MATE entfernen pacman -Rns --noconfirm mate mate-extra 2>/dev/null || true # Cinnamon entfernen pacman -Rns --noconfirm cinnamon 2>/dev/null || true fi log_step "Bereinige Autostart-Verzeichnisse..." # Bereinige System-Autostart rm -rf /etc/xdg/autostart/* 2>/dev/null || true rm -rf /usr/share/autostart/* 2>/dev/null || true # Bereinige Benutzer-Autostart (falls vorhanden) for user_home in /home/*; do if [[ -d "$user_home" ]]; then rm -rf "$user_home/.config/autostart"/* 2>/dev/null || true rm -rf "$user_home/.kde/Autostart"/* 2>/dev/null || true rm -rf "$user_home/.kde4/Autostart"/* 2>/dev/null || true fi done log_step "Setze Text-Boot als Standard..." # Setze Standard-Target auf Multi-User (Text-Modus) systemctl set-default multi-user.target log_step "Bereinige Desktop-Konfigurationsdateien..." # Entferne Desktop-Konfigurationen rm -rf /etc/gdm3 2>/dev/null || true rm -rf /etc/gdm 2>/dev/null || true rm -rf /etc/lightdm 2>/dev/null || true rm -rf /etc/sddm.conf 2>/dev/null || true rm -rf /etc/kde 2>/dev/null || true rm -rf /etc/xdg/plasma* 2>/dev/null || true rm -rf /etc/xdg/kde* 2>/dev/null || true # Bereinige X11-Sessions (außer dem was wir für Kiosk brauchen) find /usr/share/xsessions/ -name "*.desktop" -not -name "kiosk*" -delete 2>/dev/null || true find /usr/share/wayland-sessions/ -name "*.desktop" -delete 2>/dev/null || true log_info "✅ Desktop-Environment Bereinigung abgeschlossen" } # ============================================================================= # MINIMALE X11-INSTALLATION FÜR KIOSK # ============================================================================= install_minimal_x11() { log_header "Minimale X11-Installation für Kiosk" log_step "Installiere minimale X11-Komponenten..." if [[ "$PACKAGE_MANAGER" == "apt" ]]; then apt-get update apt-get install -y \ xorg \ xserver-xorg-core \ xserver-xorg-input-all \ xserver-xorg-video-all \ xinit \ xauth \ xterm \ openbox \ unclutter \ 2>/dev/null || true elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then yum install -y \ xorg-x11-server-Xorg \ xorg-x11-drv-* \ xinit \ xauth \ xterm \ openbox \ unclutter \ 2>/dev/null || true elif [[ "$PACKAGE_MANAGER" == "pacman" ]]; then pacman -S --noconfirm \ xorg-server \ xorg-xinit \ xorg-xauth \ xterm \ openbox \ unclutter \ 2>/dev/null || true fi log_info "✅ Minimale X11-Installation abgeschlossen" } # ============================================================================= # KIOSK-BENUTZER KONFIGURATION # ============================================================================= configure_kiosk_user() { log_header "Kiosk-Benutzer Konfiguration" # Erstelle kiosk-Benutzer falls nicht vorhanden if ! id "kiosk" &>/dev/null; then log_step "Erstelle kiosk-Benutzer..." useradd -m -s /bin/bash -G audio,video,input kiosk # Setze einfaches Passwort (wird für Autologin nicht benötigt) echo "kiosk:kiosk123" | chpasswd log_info "✅ Kiosk-Benutzer erstellt" else log_info "ℹ️ Kiosk-Benutzer bereits vorhanden" fi # Konfiguriere Kiosk-Benutzer-Umgebung log_step "Konfiguriere Kiosk-Benutzer-Umgebung..." # Erstelle .xinitrc für Kiosk-Session cat > /home/kiosk/.xinitrc << 'EOF' #!/bin/bash # Deaktiviere Bildschirmschoner und Energiesparfunktionen xset s off xset s noblank xset -dpms # Verstecke Mauszeiger bei Inaktivität unclutter -idle 1 & # Starte Openbox Window Manager (minimal) openbox & # Warte bis Backend verfügbar ist (mit Timeout) BACKEND_URL="https://localhost" TIMEOUT=300 ELAPSED=0 while ! curl -k -s "$BACKEND_URL" >/dev/null 2>&1; do if [ $ELAPSED -ge $TIMEOUT ]; then echo "❌ Backend nach ${TIMEOUT}s nicht erreichbar - starte trotzdem Browser" break fi echo "⏳ Warte auf Backend... (${ELAPSED}s/${TIMEOUT}s)" sleep 5 ELAPSED=$((ELAPSED + 5)) done # Browser-Präferenzen für Stabilität export MOZ_DISABLE_RDD_SANDBOX=1 export MOZ_DISABLE_CONTENT_SANDBOX=1 # Starte Browser im Kiosk-Modus (Failover: Chromium -> Firefox -> Chrome) if command -v chromium-browser >/dev/null; then BROWSER="chromium-browser" BROWSER_ARGS="--kiosk --no-sandbox --disable-dev-shm-usage --disable-gpu --disable-software-rasterizer --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-renderer-backgrounding --disable-features=TranslateUI --disable-ipc-flooding-protection --noerrdialogs --disable-infobars --disable-session-crashed-bubble --disable-component-update --check-for-update-interval=31536000" elif command -v firefox >/dev/null; then BROWSER="firefox" BROWSER_ARGS="--kiosk" elif command -v google-chrome >/dev/null; then BROWSER="google-chrome" BROWSER_ARGS="--kiosk --no-sandbox --disable-dev-shm-usage --disable-gpu" else echo "❌ Kein unterstützter Browser gefunden!" exit 1 fi echo "🚀 Starte $BROWSER im Kiosk-Modus..." exec $BROWSER $BROWSER_ARGS "$BACKEND_URL" EOF chmod +x /home/kiosk/.xinitrc chown kiosk:kiosk /home/kiosk/.xinitrc # Konfiguriere Bash-Profile für automatisches X-Start cat > /home/kiosk/.bash_profile << 'EOF' # Automatisches X-Start für Kiosk-Modus if [[ -z $DISPLAY && $(tty) == /dev/tty1 ]]; then exec startx fi EOF chown kiosk:kiosk /home/kiosk/.bash_profile log_info "✅ Kiosk-Benutzer konfiguriert" } # ============================================================================= # AUTOLOGIN KONFIGURATION # ============================================================================= configure_autologin() { log_header "Autologin Konfiguration" log_step "Konfiguriere Getty für Autologin..." # Erstelle Getty Override für tty1 mkdir -p /etc/systemd/system/getty@tty1.service.d/ cat > /etc/systemd/system/getty@tty1.service.d/override.conf << 'EOF' [Service] ExecStart= ExecStart=-/sbin/agetty --autologin kiosk --noclear %I $TERM Type=idle EOF # Stelle sicher, dass getty@tty1 aktiviert ist systemctl enable getty@tty1.service log_info "✅ Autologin konfiguriert" } # ============================================================================= # SYSTEM-ABHÄNGIGKEITEN # ============================================================================= install_system_dependencies() { log_header "System-Abhängigkeiten Installation" log_step "Aktualisiere Paket-Listen..." if [[ "$PACKAGE_MANAGER" == "apt" ]]; then apt-get update log_step "Installiere System-Abhängigkeiten..." apt-get install -y \ python3 \ python3-pip \ python3-venv \ curl \ wget \ sudo \ systemd \ rsyslog \ cron \ logrotate \ unzip \ git \ psutil \ htop \ netcat \ jq log_step "Installiere Browser..." # Installiere bevorzugten Browser (Chromium) apt-get install -y chromium-browser 2>/dev/null || { log_warn "Chromium nicht verfügbar, versuche Firefox..." apt-get install -y firefox 2>/dev/null || { log_warn "Firefox nicht verfügbar, versuche Chrome..." # Chrome Repository hinzufügen falls verfügbar wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - 2>/dev/null || true echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list 2>/dev/null || true apt-get update 2>/dev/null || true apt-get install -y google-chrome-stable 2>/dev/null || log_error "Kein Browser installiert!" } } elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then yum update -y yum install -y \ python3 \ python3-pip \ curl \ wget \ sudo \ systemd \ rsyslog \ cronie \ logrotate \ unzip \ git \ python3-psutil \ htop \ nc \ jq \ chromium \ firefox elif [[ "$PACKAGE_MANAGER" == "pacman" ]]; then pacman -Sy pacman -S --noconfirm \ python \ python-pip \ curl \ wget \ sudo \ systemd \ rsyslog \ cronie \ logrotate \ unzip \ git \ python-psutil \ htop \ netcat \ jq \ chromium \ firefox fi log_info "✅ System-Abhängigkeiten installiert" } install_python_dependencies() { log_header "Python-Abhängigkeiten Installation" log_step "Installiere Python-Pakete für Error-Recovery..." # Upgrade pip python3 -m pip install --upgrade pip # Installiere erforderliche Python-Pakete python3 -m pip install \ psutil \ watchdog \ requests \ flask \ sqlalchemy \ APScheduler log_info "✅ Python-Abhängigkeiten installiert" } configure_logging() { log_header "Logging-Konfiguration" log_step "Erstelle Log-Verzeichnisse..." # Erstelle Log-Verzeichnisse mit korrekten Berechtigungen mkdir -p /var/log/myp/{system_control,error_recovery,kiosk} chmod 755 /var/log/myp chmod 755 /var/log/myp/* log_step "Konfiguriere Logrotate..." # Konfiguriere Log-Rotation cat > /etc/logrotate.d/myp << 'EOF' /var/log/myp/*.log { daily rotate 30 compress delaycompress missingok notifempty create 644 root root postrotate systemctl reload rsyslog 2>/dev/null || true endscript } /var/log/myp/*/*.log { daily rotate 30 compress delaycompress missingok notifempty create 644 root root postrotate systemctl reload rsyslog 2>/dev/null || true endscript } EOF log_step "Konfiguriere Rsyslog für MYP..." # Konfiguriere Rsyslog für MYP-spezifische Logs cat > /etc/rsyslog.d/50-myp.conf << 'EOF' # MYP System Logging # System Control Logs :programname,isequal,"myp-system" /var/log/myp/system_control/system.log :programname,isequal,"myp-kiosk" /var/log/myp/kiosk/kiosk.log # Error Recovery Logs if $programname contains "error-recovery" then /var/log/myp/error_recovery/recovery.log # Stop weitere Verarbeitung für MYP-Messages if $programname contains "myp-" then stop EOF # Rsyslog neu starten systemctl restart rsyslog log_info "✅ Logging konfiguriert" } configure_sudo_permissions() { log_header "Sudo-Berechtigungen Konfiguration" log_step "Konfiguriere Sudo-Rechte für System-Operationen..." # Erstelle sudoers-Datei für MYP-System-Operationen cat > /etc/sudoers.d/myp-system << 'EOF' # MYP System Control Permissions # Erlaubt webapp-Benutzer System-Operationen für wartungsfreien Betrieb # System-Neustart und Shutdown %sudo ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/shutdown, /bin/systemctl reboot, /bin/systemctl poweroff # Service-Management %sudo ALL=(ALL) NOPASSWD: /bin/systemctl start myp-*, /bin/systemctl stop myp-*, /bin/systemctl restart myp-*, /bin/systemctl reload myp-* %sudo ALL=(ALL) NOPASSWD: /bin/systemctl enable myp-*, /bin/systemctl disable myp-* %sudo ALL=(ALL) NOPASSWD: /bin/systemctl status myp-*, /bin/systemctl is-active myp-* # Kiosk-spezifische Services %sudo ALL=(ALL) NOPASSWD: /bin/systemctl restart getty@tty1.service %sudo ALL=(ALL) NOPASSWD: /bin/systemctl set-default multi-user.target, /bin/systemctl set-default graphical.target # Log-Management %sudo ALL=(ALL) NOPASSWD: /bin/journalctl * # Netzwerk-Services (für Recovery) %sudo ALL=(ALL) NOPASSWD: /bin/systemctl restart NetworkManager, /bin/systemctl restart networking # Cache und Temp-Bereinigung %sudo ALL=(ALL) NOPASSWD: /bin/sync, /usr/bin/echo * > /proc/sys/vm/drop_caches # Kiosk-Benutzer Management %sudo ALL=(ALL) NOPASSWD: /bin/su - kiosk, /bin/loginctl kill-user kiosk EOF # Validiere sudoers-Datei if ! visudo -c -f /etc/sudoers.d/myp-system; then log_error "Sudoers-Konfiguration ungültig!" rm -f /etc/sudoers.d/myp-system return 1 fi log_info "✅ Sudo-Berechtigungen konfiguriert" } install_error_recovery_files() { log_header "Error-Recovery-Dateien Installation" log_step "Kopiere Error-Recovery-Module..." # Prüfe ob Backend-Verzeichnis existiert if [[ ! -d "/opt/myp-backend" ]] && [[ ! -d "/var/www/myp" ]] && [[ ! -d "$(pwd)" ]]; then error_exit "MYP-Backend-Verzeichnis nicht gefunden!" fi # Bestimme Backend-Pfad BACKEND_PATH="" if [[ -d "/opt/myp-backend" ]]; then BACKEND_PATH="/opt/myp-backend" elif [[ -d "/var/www/myp" ]]; then BACKEND_PATH="/var/www/myp" else BACKEND_PATH="$(pwd)" fi log_info "Backend-Pfad: $BACKEND_PATH" # Prüfe ob Error-Recovery-Dateien existieren if [[ ! -f "$BACKEND_PATH/utils/error_recovery.py" ]]; then log_warn "Error-Recovery-Module nicht gefunden in $BACKEND_PATH" log_warn "Bitte stellen Sie sicher, dass das Update korrekt angewendet wurde" return 1 fi # Prüfe ob System-Control-Module existiert if [[ ! -f "$BACKEND_PATH/utils/system_control.py" ]]; then log_warn "System-Control-Module nicht gefunden in $BACKEND_PATH" log_warn "Bitte stellen Sie sicher, dass das Update korrekt angewendet wurde" return 1 fi log_info "✅ Error-Recovery-Module gefunden und validiert" } install_kiosk_service() { log_header "Kiosk-Service Installation" log_step "Installiere optimierten Kiosk-Service..." # Der Kiosk-Service wurde bereits durch das Update installiert # Wir müssen nur sicherstellen, dass er korrekt konfiguriert ist if [[ ! -f "/etc/systemd/system/myp-kiosk.service" ]]; then log_warn "Kiosk-Service-Datei nicht gefunden!" log_warn "Bitte führen Sie zuerst das Backend-Update durch" return 1 fi # Service aktivieren aber noch nicht starten systemctl daemon-reload systemctl enable myp-kiosk.service log_info "✅ Kiosk-Service installiert und aktiviert" } configure_system_optimizations() { log_header "System-Optimierungen" log_step "Konfiguriere Kernel-Parameter für Stabilität..." # Kernel-Parameter für bessere Stabilität cat > /etc/sysctl.d/99-myp-stability.conf << 'EOF' # MYP System Stability Configuration # Speicher-Management vm.swappiness = 10 vm.dirty_ratio = 15 vm.dirty_background_ratio = 5 # Netzwerk-Stabilität net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 # File-System-Stabilität fs.file-max = 65536 fs.inotify.max_user_watches = 524288 EOF # Lade neue sysctl-Einstellungen sysctl -p /etc/sysctl.d/99-myp-stability.conf log_step "Konfiguriere System-Limits..." # System-Limits für bessere Performance cat > /etc/security/limits.d/99-myp.conf << 'EOF' # MYP System Limits * soft nofile 65536 * hard nofile 65536 * soft nproc 32768 * hard nproc 32768 kiosk soft nofile 8192 kiosk hard nofile 8192 kiosk soft nproc 4096 kiosk hard nproc 4096 EOF log_step "Deaktiviere unnötige Services..." # Deaktiviere Services die für Kiosk-Betrieb nicht benötigt werden SERVICES_TO_DISABLE=( "cups" "cups-browsed" "bluetooth" "ModemManager" "avahi-daemon" "whoopsie" "apport" "speech-dispatcher" "brltty" "snapd" "ubuntu-advantage" ) for service in "${SERVICES_TO_DISABLE[@]}"; do if systemctl is-enabled "$service" &>/dev/null; then log_debug "Deaktiviere Service: $service" systemctl disable "$service" 2>/dev/null || true systemctl stop "$service" 2>/dev/null || true fi done log_step "Konfiguriere automatische Updates-Deaktivierung..." # Deaktiviere automatische Updates für Stabilität if [[ -f "/etc/apt/apt.conf.d/20auto-upgrades" ]]; then cat > /etc/apt/apt.conf.d/20auto-upgrades << 'EOF' APT::Periodic::Update-Package-Lists "0"; APT::Periodic::Unattended-Upgrade "0"; APT::Periodic::Download-Upgradeable-Packages "0"; APT::Periodic::AutocleanInterval "0"; EOF fi # Deaktiviere unattended-upgrades systemctl disable unattended-upgrades 2>/dev/null || true systemctl stop unattended-upgrades 2>/dev/null || true log_info "✅ System-Optimierungen angewendet" } validate_installation() { log_header "Installation validieren" local errors=0 log_step "Prüfe Kiosk-Benutzer..." if ! id "kiosk" &>/dev/null; then log_error "❌ Kiosk-Benutzer nicht gefunden" ((errors++)) else log_info "✅ Kiosk-Benutzer OK" fi log_step "Prüfe Kiosk-Service..." if ! systemctl is-enabled myp-kiosk.service &>/dev/null; then log_error "❌ Kiosk-Service nicht aktiviert" ((errors++)) else log_info "✅ Kiosk-Service OK" fi log_step "Prüfe Browser-Installation..." if ! command -v chromium-browser &>/dev/null && ! command -v firefox &>/dev/null && ! command -v google-chrome &>/dev/null; then log_error "❌ Kein unterstützter Browser gefunden" ((errors++)) else log_info "✅ Browser verfügbar" fi log_step "Prüfe X11-Installation..." if ! command -v X &>/dev/null && ! command -v Xorg &>/dev/null; then log_error "❌ X11-Server nicht gefunden" ((errors++)) else log_info "✅ X11-Server verfügbar" fi log_step "Prüfe Autologin-Konfiguration..." if [[ ! -f "/etc/systemd/system/getty@tty1.service.d/override.conf" ]]; then log_error "❌ Autologin nicht konfiguriert" ((errors++)) else log_info "✅ Autologin konfiguriert" fi log_step "Prüfe Python-Module..." if ! python3 -c "import psutil" &>/dev/null; then log_error "❌ Python psutil-Modul fehlt" ((errors++)) else log_info "✅ Python-Module verfügbar" fi if [[ $errors -eq 0 ]]; then log_info "✅ Alle Validierungen erfolgreich" return 0 else log_error "❌ $errors Validierungsfehler gefunden" return 1 fi } show_completion_summary() { log_header "Installation Abgeschlossen" echo -e "${GREEN}" echo "==================================================" echo " 🎉 MYP FEHLERRESILIENZ INSTALLATION ERFOLG " echo "==================================================" echo -e "${NC}" echo "✅ Desktop-Environments bereinigt" echo "✅ Minimale X11-Umgebung installiert" echo "✅ Kiosk-Benutzer konfiguriert" echo "✅ Autologin aktiviert" echo "✅ Error-Recovery-System installiert" echo "✅ System-Control-Manager konfiguriert" echo "✅ Robuster Kiosk-Service installiert" echo "✅ System-Optimierungen angewendet" echo echo -e "${YELLOW}📋 NÄCHSTE SCHRITTE:${NC}" echo "1. System neu starten für vollständige Aktivierung:" echo " ${CYAN}sudo reboot${NC}" echo echo "2. Nach dem Neustart startet automatisch der Kiosk-Modus" echo echo "3. Überwachen Sie das System über die Admin-Oberfläche:" echo " ${CYAN}https:///admin${NC}" echo echo -e "${YELLOW}🔧 WARTUNG:${NC}" echo "• Error-Recovery läuft automatisch im Hintergrund" echo "• System-Control über Admin-Panel verfügbar" echo "• Logs werden automatisch rotiert" echo "• Kein manueller Wartungsaufwand erforderlich" echo echo -e "${YELLOW}🆘 NOTFALL-ZUGRIFF:${NC}" echo "• SSH-Zugriff bleibt für Wartung verfügbar" echo "• Kiosk-Deaktivierung über Admin-Panel" echo "• System-Recovery über Tastatur: Strg+Alt+F2" echo echo -e "${RED}⚠️ WICHTIG:${NC}" echo "Das System läuft jetzt im wartungsfreien Produktionsmodus!" echo "Alle Änderungen sollten über die Admin-Oberfläche erfolgen." echo } # ============================================================================= # MAIN EXECUTION # ============================================================================= main() { clear echo -e "${PURPLE}" echo "==============================================================" echo " MYP FEHLERRESILIENZ & WARTUNGSFREIER BETRIEB - UPDATE " echo "==============================================================" echo -e "${NC}" echo echo "Dieses Script installiert:" echo "• Absolute Fehlerresilienz mit automatischer Wiederherstellung" echo "• Wartungsfreien Produktionsbetrieb" echo "• Optimierten Kiosk-Modus mit robuster Browser-Steuerung" echo "• Vollautomatische System-Überwachung und -Reparatur" echo "• Desktop-Environment-Bereinigung für maximale Stabilität" echo echo -e "${RED}⚠️ WARNUNG: Alle Desktop-Environments werden entfernt!${NC}" echo -e "${RED} Das System wird zu einem reinen Kiosk-System!${NC}" echo read -p "Möchten Sie fortfahren? [y/N]: " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Installation abgebrochen." exit 0 fi log_info "Starte MYP Fehlerresilienz-Installation..." # Grundlegende Systemprüfungen check_root check_os # Desktop-Environment vollständig bereinigen cleanup_desktop_environments # Minimale X11-Umgebung für Kiosk installieren install_minimal_x11 # System-Abhängigkeiten installieren install_system_dependencies install_python_dependencies # Kiosk-Benutzer und Autologin konfigurieren configure_kiosk_user configure_autologin # Logging und Berechtigungen konfigurieren configure_logging configure_sudo_permissions # Error-Recovery und Kiosk-Service installieren install_error_recovery_files install_kiosk_service # System-Optimierungen anwenden configure_system_optimizations # Installation validieren if validate_installation; then show_completion_summary echo read -p "System jetzt neu starten? [y/N]: " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then log_info "🔄 System wird neu gestartet..." sleep 3 reboot else log_info "🔄 Bitte starten Sie das System manuell neu: sudo reboot" fi else log_error "❌ Installation nicht erfolgreich - bitte Fehler beheben" exit 1 fi } # Script ausführen main "$@"