📝 "Update report book for Mai-Jun 2025, improve backend setup
This commit is contained in:
816
backend/setup.sh
816
backend/setup.sh
@@ -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() {
|
||||
|
Reference in New Issue
Block a user