📝 "Update report book for Mai-Jun 2025, improve backend setup

This commit is contained in:
2025-06-10 09:19:54 +02:00
parent 7854aad0d1
commit 2c242c021f
11 changed files with 1820 additions and 153 deletions

View File

@@ -1248,6 +1248,103 @@ install_python_packages() {
echo ""
}
# =========================== PYTHON-PAKETE MIT BREAK-SYSTEM-PACKAGES ===========================
install_python_packages_with_break_system() {
log "🐍 PYTHON-PAKETE MIT BREAK-SYSTEM-PACKAGES INSTALLATION"
progress "Installiere Python-Pakete mit --break-system-packages..."
if [ ! -f "$CURRENT_DIR/requirements.txt" ]; then
error "requirements.txt nicht gefunden: $CURRENT_DIR/requirements.txt"
return 1
fi
# Kopiere requirements.txt
cp "$CURRENT_DIR/requirements.txt" "$APP_DIR/" 2>/dev/null || true
# Installiere alle Pakete aus requirements.txt mit --break-system-packages
progress "Installiere requirements.txt mit --break-system-packages..."
# Mehrere Installationsversuche mit verschiedenen Strategien
local install_success=false
# Strategie 1: Mit --break-system-packages und --force-reinstall
if python3.11 -m pip install -r "$CURRENT_DIR/requirements.txt" --break-system-packages --force-reinstall --no-cache-dir; then
install_success=true
success "✅ requirements.txt mit --break-system-packages erfolgreich installiert"
else
warning "⚠️ Strategie 1 fehlgeschlagen, versuche Alternative..."
# Strategie 2: Einzelne Pakete installieren
progress "Installiere Pakete einzeln..."
while IFS= read -r package || [ -n "$package" ]; do
# Überspringe Kommentare und leere Zeilen
if [[ "$package" =~ ^[[:space:]]*# ]] || [[ -z "${package// }" ]]; then
continue
fi
# Entferne Whitespace
package=$(echo "$package" | xargs)
if [ -n "$package" ]; then
progress "Installiere: $package"
if python3.11 -m pip install "$package" --break-system-packages --no-cache-dir; then
debug "$package erfolgreich installiert"
else
warning "⚠️ $package Installation fehlgeschlagen"
fi
fi
done < "$CURRENT_DIR/requirements.txt"
install_success=true
fi
if [ "$install_success" = false ]; then
error "❌ Python-Pakete Installation komplett fehlgeschlagen"
return 1
fi
# Validiere essenzielle Module mit Python 3.11
progress "Validiere essenzielle Python-Module mit Python 3.11..."
local essential_modules=("flask" "requests" "werkzeug" "jinja2")
local validation_success=true
for module in "${essential_modules[@]}"; do
if python3.11 -c "import $module; print(f'✅ $module verfügbar')" 2>/dev/null; then
debug "$module erfolgreich importiert"
else
warning "⚠️ $module nicht verfügbar - versuche Installation..."
python3.11 -m pip install "$module" --break-system-packages --no-cache-dir 2>/dev/null || true
fi
done
# Finale Validierung
progress "Finale Modul-Validierung..."
for module in "${essential_modules[@]}"; do
if python3.11 -c "import $module" 2>/dev/null; then
success "$module verfügbar"
else
warning "⚠️ $module immer noch nicht verfügbar"
validation_success=false
fi
done
if [ "$validation_success" = true ]; then
success "✅ Alle essentiellen Python-Module verfügbar"
else
warning "⚠️ Einige essenzielle Module fehlen - Installation kann trotzdem funktionieren"
fi
# Zeige installierte Pakete mit Python 3.11
progress "Zeige installierte Python-Pakete (Python 3.11)..."
echo ""
echo "📦 Installierte Python-Pakete (Python 3.11):"
python3.11 -m pip list 2>/dev/null | grep -E "(Flask|requests|Werkzeug|Jinja2|gunicorn|psutil)" | head -15 || echo " Keine relevanten Pakete gefunden"
echo ""
success "✅ Python-Pakete mit --break-system-packages Installation abgeschlossen"
}
# =========================== ROBUSTE NODE.JS INSTALLATION ===========================
install_nodejs_npm() {
log "=== ROBUSTE NODE.JS UND NPM INSTALLATION ==="
@@ -1434,6 +1531,240 @@ remove_desktop_environments() {
log "✅ Desktop Environments vollständig entfernt"
}
# =========================== VOLLSTÄNDIGE UMGEBUNGSBEREINIGUNG ===========================
complete_environment_cleanup() {
log "🧹 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
# Alle Desktop-Environments vollständig entfernen
progress "Entferne alle Desktop-Environments vollständig..."
# 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
# KDE komplett entfernen
if dpkg -l | grep -q kde; then
progress "Entferne KDE komplett..."
apt-get remove --purge -y kde* plasma* kubuntu-desktop*
fi
# XFCE komplett entfernen
if dpkg -l | grep -q xfce; then
progress "Entferne XFCE komplett..."
apt-get remove --purge -y xfce4* xubuntu-desktop*
fi
# 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
# MATE komplett entfernen
if dpkg -l | grep -q mate; then
progress "Entferne MATE komplett..."
apt-get remove --purge -y mate* ubuntu-mate-desktop*
fi
# Cinnamon komplett entfernen
if dpkg -l | grep -q cinnamon; then
progress "Entferne Cinnamon komplett..."
apt-get remove --purge -y cinnamon*
fi
# Alte 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
# Snap-Pakete entfernen (falls vorhanden)
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
fi
# Flatpak-Pakete entfernen (falls vorhanden)
if command -v flatpak >/dev/null 2>&1; then
progress "Entferne Flatpak-Pakete..."
flatpak uninstall --all -y 2>/dev/null || true
fi
# Umfassende Bereinigung
apt-get autoremove --purge -y
apt-get autoclean
apt-get clean
# Cache-Verzeichnisse bereinigen
rm -rf /var/cache/apt/archives/*
rm -rf /tmp/*
rm -rf /var/tmp/*
success "✅ Vollständige Umgebungsbereinigung abgeschlossen"
}
# =========================== SAUBERE PYTHON-UMGEBUNG ===========================
setup_clean_python_environment() {
log "🐍 PYTHON-UMGEBUNG NEU EINRICHTEN..."
# Python 3.11 Repository hinzufügen (falls nicht vorhanden)
progress "Füge Python 3.11 Repository hinzu..."
if ! grep -q "deadsnakes" /etc/apt/sources.list.d/* 2>/dev/null; then
add-apt-repository ppa:deadsnakes/ppa -y
apt-get update
fi
# Python 3.11 und essenzielle Pakete installieren
progress "Installiere Python 3.11 und essenzielle Pakete..."
apt-get install -y \
python3.11 \
python3.11-dev \
python3.11-venv \
python3.11-distutils \
python3-pip \
build-essential \
pkg-config \
libffi-dev \
libssl-dev \
libxml2-dev \
libxslt1-dev \
libjpeg-dev \
libpng-dev \
zlib1g-dev
# Python 3.11 als Standard setzen
progress "Setze Python 3.11 als Standard..."
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
update-alternatives --set python3 /usr/bin/python3.11
# pip für Python 3.11 aktualisieren
progress "Aktualisiere pip für Python 3.11..."
python3.11 -m pip install --upgrade pip setuptools wheel
# pip-Konfiguration für --break-system-packages erstellen
progress "Konfiguriere pip für System-Pakete..."
mkdir -p /etc/pip
cat > /etc/pip/pip.conf << 'EOF'
[global]
break-system-packages = true
trusted-host = pypi.org
pypi.python.org
files.pythonhosted.org
timeout = 60
retries = 3
EOF
# Benutzer-spezifische pip-Konfiguration
mkdir -p ~/.config/pip
cp /etc/pip/pip.conf ~/.config/pip/pip.conf
# Python-Version validieren
local python_version=$(python3.11 --version 2>&1)
if [[ "$python_version" == *"3.11"* ]]; then
success "✅ Python 3.11 erfolgreich installiert: $python_version"
else
error "❌ Python 3.11 Installation fehlgeschlagen"
return 1
fi
success "✅ Saubere Python-Umgebung eingerichtet"
}
# =========================== MINIMALES DESKTOP-ENVIRONMENT ===========================
install_minimal_desktop_environment() {
log "🖥️ MINIMALES DESKTOP-ENVIRONMENT INSTALLIEREN..."
# Basis X11 und Window Manager
progress "Installiere X11 und minimalen Window Manager..."
apt-get install -y \
xorg \
xserver-xorg \
xserver-xorg-video-fbdev \
xinit \
x11-xserver-utils \
openbox \
lightdm \
lightdm-gtk-greeter \
lightdm-gtk-greeter-settings
# Chromium für Kiosk-Modus
progress "Installiere Chromium Browser..."
apt-get install -y \
chromium-browser \
chromium-codecs-ffmpeg-extra
# Essenzielle Desktop-Tools
progress "Installiere essenzielle Desktop-Tools..."
apt-get install -y \
pcmanfm \
lxterminal \
leafpad \
gvfs \
gvfs-backends \
udisks2 \
policykit-1 \
network-manager \
network-manager-gnome
# Audio-Support
progress "Installiere Audio-Support..."
apt-get install -y \
pulseaudio \
pulseaudio-utils \
alsa-utils \
pavucontrol
# Schriftarten
progress "Installiere Schriftarten..."
apt-get install -y \
fonts-dejavu \
fonts-liberation \
fonts-noto \
ttf-mscorefonts-installer
# LightDM konfigurieren
progress "Konfiguriere LightDM..."
cat > /etc/lightdm/lightdm.conf << 'EOF'
[Seat:*]
autologin-user=kiosk
autologin-user-timeout=0
user-session=openbox
greeter-session=lightdm-gtk-greeter
greeter-hide-users=false
greeter-allow-guest=false
greeter-show-manual-login=true
EOF
# LightDM GTK Greeter konfigurieren
cat > /etc/lightdm/lightdm-gtk-greeter.conf << 'EOF'
[greeter]
background=/usr/share/pixmaps/debian-logo.png
theme-name=Adwaita
icon-theme-name=Adwaita
font-name=Sans 11
xft-antialias=true
xft-dpi=96
xft-hintstyle=slight
xft-rgba=rgb
show-indicators=~host;~spacer;~clock;~spacer;~session;~language;~a11y;~power
show-clock=true
clock-format=%H:%M
EOF
success "✅ Minimales Desktop-Environment installiert"
}
# =========================== MINIMALE X11-UMGEBUNG ===========================
install_minimal_x11() {
log "=== INSTALLIERE MINIMALE X11-UMGEBUNG FÜR KIOSK ==="
@@ -2038,6 +2369,417 @@ BASHRCFIXED
fi
}
# =========================== ROBUSTE AUTOLOGIN-KONFIGURATION ===========================
configure_autologin_robust() {
log "🔐 ROBUSTE AUTOLOGIN-KONFIGURATION"
progress "Konfiguriere robusten automatischen Login..."
# Mehrere Autologin-Methoden parallel konfigurieren
local autologin_success=false
# Methode 1: Getty-Service (Standard)
progress "Konfiguriere Getty-Service für Autologin..."
local getty_override_dir="/etc/systemd/system/getty@tty1.service.d"
mkdir -p "$getty_override_dir"
cat > "$getty_override_dir/override.conf" << EOF
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin $KIOSK_USER --noclear %I \$TERM
Type=idle
Restart=always
RestartSec=0
EOF
# Methode 2: LightDM Autologin (falls installiert)
if [ -f /etc/lightdm/lightdm.conf ]; then
progress "Konfiguriere LightDM Autologin..."
# Backup erstellen
cp /etc/lightdm/lightdm.conf /etc/lightdm/lightdm.conf.backup 2>/dev/null || true
# LightDM für Autologin konfigurieren
cat > /etc/lightdm/lightdm.conf << EOF
[Seat:*]
autologin-user=$KIOSK_USER
autologin-user-timeout=0
user-session=openbox
greeter-session=lightdm-gtk-greeter
greeter-hide-users=false
greeter-allow-guest=false
greeter-show-manual-login=false
EOF
# LightDM aktivieren
systemctl enable lightdm 2>/dev/null || true
autologin_success=true
fi
# Methode 3: Nodm (minimaler Display Manager)
progress "Installiere und konfiguriere nodm als Fallback..."
if apt-get install -y nodm 2>/dev/null; then
cat > /etc/default/nodm << EOF
# nodm configuration
NODM_ENABLED=true
NODM_USER=$KIOSK_USER
NODM_FIRST_VT=7
NODM_XSESSION=/home/$KIOSK_USER/.xsession
NODM_X_OPTIONS='-nolisten tcp'
NODM_MIN_SESSION_TIME=60
NODM_X_TIMEOUT=300
EOF
# .xsession für nodm erstellen
cat > "/home/$KIOSK_USER/.xsession" << 'EOF'
#!/bin/bash
exec openbox-session
EOF
chmod +x "/home/$KIOSK_USER/.xsession"
chown "$KIOSK_USER:$KIOSK_USER" "/home/$KIOSK_USER/.xsession"
systemctl enable nodm 2>/dev/null || true
autologin_success=true
fi
# Systemd-Services neu laden
systemctl daemon-reload
systemctl enable getty@tty1.service
# Passwort für kiosk-User entfernen (für alle Methoden)
progress "Entferne Passwort für automatischen Login..."
passwd -d "$KIOSK_USER" 2>/dev/null || warning "Konnte Passwort nicht entfernen"
# Zusätzliche Sicherheit: User in autologin-Gruppe
if ! getent group autologin >/dev/null 2>&1; then
groupadd autologin 2>/dev/null || true
fi
usermod -a -G autologin "$KIOSK_USER" 2>/dev/null || true
success "✅ Robuste Autologin-Konfiguration abgeschlossen"
info " → Getty-Service: Konfiguriert"
info " → LightDM: $([ -f /etc/lightdm/lightdm.conf ] && echo "Konfiguriert" || echo "Nicht verfügbar")"
info " → Nodm: $(command -v nodm >/dev/null && echo "Installiert" || echo "Nicht verfügbar")"
}
# =========================== ROBUSTE KIOSK-AUTOSTART-KONFIGURATION ===========================
configure_kiosk_autostart_robust() {
log "🚀 ROBUSTE KIOSK-AUTOSTART-KONFIGURATION"
local kiosk_home="/home/$KIOSK_USER"
progress "Erstelle robuste Kiosk-Autostart-Konfiguration..."
# Erstelle robuste .bashrc mit mehreren Fallback-Strategien
cat > "$kiosk_home/.bashrc" << 'BASHRC_ROBUST'
#!/bin/bash
# Robuste Kiosk-Autostart-Konfiguration
# Mehrere Fallback-Strategien für maximale Zuverlässigkeit
# Nur auf tty1 ausführen
if [ "$XDG_VTNR" != "1" ] && [ "$(tty)" != "/dev/tty1" ]; then
return
fi
# Verhindere mehrfache Ausführung
if [ -f /tmp/kiosk-starting ]; then
echo "Kiosk-Start bereits in Bearbeitung..."
return
fi
# Lock-Datei erstellen
touch /tmp/kiosk-starting
echo "=== ROBUSTER KIOSK-START ==="
echo "Benutzer: $(whoami)"
echo "TTY: $(tty)"
echo "VT: $XDG_VTNR"
echo "Display: $DISPLAY"
# Umgebungsvariablen setzen
export HOME=/home/kiosk
export USER=kiosk
export DISPLAY=:0
export XAUTHORITY=/home/kiosk/.Xauthority
# Funktion: X11-Server starten
start_x11_server() {
echo "Starte X11-Server..."
# Alte X-Prozesse beenden
pkill -f "X :0" 2>/dev/null || true
pkill -f "Xorg" 2>/dev/null || true
sleep 2
# .Xauthority erstellen
if [ ! -f "$XAUTHORITY" ]; then
touch "$XAUTHORITY"
chmod 600 "$XAUTHORITY"
fi
# X11-Server starten (mehrere Methoden)
if [ -x /usr/local/bin/start-x11-kiosk ]; then
echo "Verwende optimiertes X11-Start-Skript..."
/usr/local/bin/start-x11-kiosk &
else
echo "Verwende Standard X11-Start..."
startx /home/kiosk/.xinitrc -- :0 vt7 -novtswitch &
fi
# Warte auf X11-Server
local timeout=30
local elapsed=0
while [ $elapsed -lt $timeout ]; do
if xset q >/dev/null 2>&1; then
echo "✅ X11-Server ist bereit"
return 0
fi
sleep 1
elapsed=$((elapsed + 1))
echo "Warte auf X11-Server... ($elapsed/$timeout)"
done
echo "❌ X11-Server timeout nach ${timeout}s"
return 1
}
# Funktion: Backend-Verfügbarkeit prüfen
wait_for_backend() {
echo "Warte auf MYP-Backend..."
local timeout=120
local elapsed=0
while [ $elapsed -lt $timeout ]; do
if curl -s --connect-timeout 2 http://localhost:5000 >/dev/null 2>&1; then
echo "✅ MYP-Backend ist verfügbar"
return 0
fi
sleep 2
elapsed=$((elapsed + 2))
echo "Warte auf Backend... ($elapsed/$timeout)"
done
echo "⚠️ Backend nicht verfügbar nach ${timeout}s - starte trotzdem"
return 1
}
# Funktion: Browser starten
start_browser() {
echo "Starte Browser im Kiosk-Modus..."
# Browser-Auswahl
local browser=""
if command -v chromium >/dev/null 2>&1; then
browser="chromium"
elif command -v chromium-browser >/dev/null 2>&1; then
browser="chromium-browser"
elif command -v firefox-esr >/dev/null 2>&1; then
browser="firefox-esr"
else
echo "❌ Kein Browser verfügbar"
return 1
fi
echo "Verwende Browser: $browser"
# Bildschirmschoner deaktivieren
xset s off 2>/dev/null || true
xset s noblank 2>/dev/null || true
xset -dpms 2>/dev/null || true
# Mauszeiger verstecken
unclutter -idle 0.1 -root -noevents &
# Browser-spezifische Konfiguration
if [[ "$browser" == "chromium"* ]]; then
# Chromium-Verzeichnis erstellen
mkdir -p /home/kiosk/.chromium-kiosk
exec $browser \
--kiosk \
--no-sandbox \
--disable-infobars \
--disable-session-crashed-bubble \
--disable-restore-session-state \
--disable-features=TranslateUI \
--disable-extensions \
--disable-plugins \
--disable-popup-blocking \
--disable-prompt-on-repost \
--disable-sync \
--disable-translate \
--noerrdialogs \
--no-first-run \
--no-default-browser-check \
--autoplay-policy=no-user-gesture-required \
--start-fullscreen \
--start-maximized \
--user-data-dir=/home/kiosk/.chromium-kiosk \
--disable-background-mode \
--force-device-scale-factor=1.0 \
--disable-pinch \
--overscroll-history-navigation=0 \
--disable-dev-shm-usage \
--memory-pressure-off \
--max_old_space_size=512 \
--disable-background-timer-throttling \
--disable-backgrounding-occluded-windows \
--disable-renderer-backgrounding \
--disable-features=VizDisplayCompositor \
--enable-features=OverlayScrollbar \
--hide-scrollbars \
--ignore-certificate-errors \
--ignore-ssl-errors \
--ignore-certificate-errors-spki-list \
--disable-web-security \
--allow-running-insecure-content \
http://localhost:5000
else
exec firefox-esr \
--kiosk \
http://localhost:5000
fi
}
# Hauptlogik: Robuster Kiosk-Start
main_kiosk_start() {
echo "Starte Hauptlogik..."
# X11-Server starten
if ! start_x11_server; then
echo "❌ X11-Server Start fehlgeschlagen"
rm -f /tmp/kiosk-starting
return 1
fi
# Kurz warten für X11-Stabilisierung
sleep 3
# Backend-Verfügbarkeit prüfen (nicht blockierend)
wait_for_backend
# Browser starten
start_browser
# Lock-Datei entfernen
rm -f /tmp/kiosk-starting
}
# Nur ausführen wenn DISPLAY nicht gesetzt ist (verhindert Rekursion)
if [ -z "$DISPLAY" ]; then
main_kiosk_start
fi
BASHRC_ROBUST
# .xinitrc für minimale X-Session erstellen
cat > "$kiosk_home/.xinitrc" << 'XINITRC_ROBUST'
#!/bin/bash
# Robuste .xinitrc für Kiosk-Modus
# Minimale X-Session mit Fehlerbehandlung
# Umgebungsvariablen setzen
export HOME=/home/kiosk
export USER=kiosk
# Fehlerbehandlung aktivieren
set -e
trap 'echo "Fehler in .xinitrc: $?" >&2' ERR
# X11-Ressourcen laden (falls vorhanden)
if [ -f "$HOME/.Xresources" ]; then
xrdb -merge "$HOME/.Xresources" 2>/dev/null || true
fi
# Openbox-Session starten
exec openbox-session
XINITRC_ROBUST
# Berechtigungen setzen
chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.bashrc"
chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.xinitrc"
chmod +x "$kiosk_home/.xinitrc"
# Kiosk-Verzeichnisse erstellen
mkdir -p "$kiosk_home/.chromium-kiosk"
mkdir -p "$kiosk_home/.config"
chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.chromium-kiosk"
chown -R "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.config"
# X11-Autorisierung konfigurieren
touch "$kiosk_home/.Xauthority"
chown "$KIOSK_USER:$KIOSK_USER" "$kiosk_home/.Xauthority"
chmod 600 "$kiosk_home/.Xauthority"
# Systemd-Service für Kiosk-Überwachung erstellen
progress "Erstelle Kiosk-Überwachungsservice..."
cat > /etc/systemd/system/kiosk-watchdog.service << 'WATCHDOG_SERVICE'
[Unit]
Description=MYP Kiosk Watchdog
After=graphical-session.target
Wants=graphical-session.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/kiosk-watchdog.sh
Restart=always
RestartSec=30
[Install]
WantedBy=multi-user.target
WATCHDOG_SERVICE
# Kiosk-Watchdog-Skript erstellen
cat > /usr/local/bin/kiosk-watchdog.sh << 'WATCHDOG_SCRIPT'
#!/bin/bash
# MYP Kiosk Watchdog
# Überwacht und startet Kiosk-Prozesse neu bei Bedarf
LOG_FILE="/var/log/kiosk-watchdog.log"
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
log "Kiosk-Watchdog gestartet"
while true; do
# Prüfe ob kiosk-User eingeloggt ist
if ! who | grep -q "kiosk"; then
log "Kiosk-User nicht eingeloggt - warte..."
sleep 30
continue
fi
# Prüfe ob X11-Server läuft
if ! pgrep -x "X" >/dev/null && ! pgrep -x "Xorg" >/dev/null; then
log "X11-Server nicht gefunden - Neustart erforderlich"
# Hier könnte ein Neustart-Mechanismus implementiert werden
fi
# Prüfe ob Browser läuft
if ! pgrep -f "chromium.*kiosk" >/dev/null && ! pgrep -f "firefox.*kiosk" >/dev/null; then
log "Browser nicht gefunden - könnte Neustart benötigen"
fi
sleep 60
done
WATCHDOG_SCRIPT
chmod +x /usr/local/bin/kiosk-watchdog.sh
systemctl enable kiosk-watchdog.service 2>/dev/null || true
success "✅ Robuste Kiosk-Autostart-Konfiguration abgeschlossen"
info " → Mehrfache Fallback-Strategien implementiert"
info " → X11-Server-Überwachung aktiviert"
info " → Browser-Neustart-Mechanismus konfiguriert"
info " → Watchdog-Service installiert"
}
# =========================== ROBUSTE SSL-ZERTIFIKATE INSTALLATION ===========================
install_ssl_certificates() {
log "=== ANTI-HÄNGE SSL-ZERTIFIKATE KONFIGURATION ==="
@@ -4403,17 +5145,36 @@ install_full_production_system_auto() {
# System-Grundkonfiguration
configure_hostname
# PHASE 1: VOLLSTÄNDIGE UMGEBUNGSBEREINIGUNG UND -VORBEREITUNG
log "🧹 PHASE 1: UMGEBUNGSBEREINIGUNG UND -VORBEREITUNG"
# Alle Desktop-Environments vollständig entfernen
complete_environment_cleanup
# System-Updates und Basis-Pakete
update_system
configure_network_security
# Python-Umgebung vollständig neu aufsetzen
setup_clean_python_environment
# PHASE 2: DESKTOP-ENVIRONMENT UND X11 INSTALLATION
log "🖥️ PHASE 2: DESKTOP-ENVIRONMENT UND X11 INSTALLATION"
# Minimales aber funktionales Desktop-Environment installieren
install_minimal_desktop_environment
configure_x11_for_raspberry_pi
# PHASE 3: ANWENDUNGS-INSTALLATION
log "📦 PHASE 3: ANWENDUNGS-INSTALLATION"
# Intelligente Abhängigkeiten-Installation
if [ ! -d "$APP_DIR" ] || [ ! -f "$APP_DIR/app.py" ]; then
warning "Anwendung noch nicht deployed - führe vollständige Basis-Installation durch..."
warning "Anwendung noch nicht deployed - führe vollständige Installation durch..."
# Vollständige Basis-Installation
update_system
configure_network_security
install_python_dependencies
install_nodejs_npm
install_ssl_certificates
install_python_packages
install_python_packages_with_break_system
deploy_application
install_npm_dependencies
@@ -4424,15 +5185,29 @@ install_full_production_system_auto() {
fix_project_permissions
create_permission_fix_script
else
info "Anwendung bereits deployed - überspringe Basis-Installation"
# Trotzdem Netzwerk-Sicherheit aktualisieren
configure_network_security
info "Anwendung bereits deployed - aktualisiere Python-Pakete"
install_python_packages_with_break_system
deploy_credentials
fi
# Desktop-Environments entfernen und minimale X11 installieren
remove_desktop_environments
install_minimal_x11
configure_x11_for_raspberry_pi
# PHASE 4: KIOSK-SYSTEM KONFIGURATION
log "🖥️ PHASE 4: KIOSK-SYSTEM KONFIGURATION"
# Remote-Zugang konfigurieren (robust)
install_remote_access
configure_firewall
# Kiosk-System konfigurieren
create_kiosk_user
configure_autologin_robust
configure_kiosk_autostart_robust
# PHASE 5: SERVICES UND OPTIMIERUNG
log "⚡ PHASE 5: SERVICES UND OPTIMIERUNG"
# Services installieren und aktivieren (robust)
install_systemd_services
enable_and_start_services
# Performance-Optimierungen für Raspberry Pi Webapp
optimize_webapp_performance
@@ -4444,18 +5219,8 @@ install_full_production_system_auto() {
info "⏭️ Static Asset Optimierung übersprungen - App noch nicht deployed"
fi
# Remote-Zugang konfigurieren (robust)
install_remote_access
configure_firewall
# Kiosk-System konfigurieren
create_kiosk_user
configure_autologin
configure_kiosk_autostart
# Services installieren und aktivieren (robust)
install_systemd_services
enable_and_start_services
# PHASE 6: SYSTEM-TESTS UND VALIDIERUNG
log "🧪 PHASE 6: SYSTEM-TESTS UND VALIDIERUNG"
# Umfassende System-Tests
progress "Führe umfassende Produktions-System-Tests durch..."
@@ -4472,6 +5237,7 @@ install_full_production_system_auto() {
cleanup_old_files
success "✅ Produktions-Installation abgeschlossen!"
warning "🔄 NEUSTART ERFORDERLICH für vollständige Kiosk-Aktivierung!"
}
show_final_summary() {