From 34692dbb32fbb6b662718f8250550812770c539a Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Sat, 31 May 2025 18:04:53 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20"=F0=9F=8E=89=20Feature:=20Enhan?= =?UTF-8?q?ced=20Raspberry=20Pi=20setup=20script=20for=20quick=20deploymen?= =?UTF-8?q?t=20=F0=9F=8C=9F"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/schnellstart_raspberry_pi.sh | 346 +++++++++++++++++++++++ 1 file changed, 346 insertions(+) diff --git a/backend/app/schnellstart_raspberry_pi.sh b/backend/app/schnellstart_raspberry_pi.sh index 4796b533..06700fa3 100644 --- a/backend/app/schnellstart_raspberry_pi.sh +++ b/backend/app/schnellstart_raspberry_pi.sh @@ -600,6 +600,348 @@ EOF log "✅ System-Parameter Optimierung abgeschlossen" } +# ========================== WARTUNGSTOOLS ERSTELLEN ========================== +create_maintenance_tools() { + log "=== WARTUNGSTOOLS ERSTELLEN ===" + + progress "Erstelle Wartungs-Skript..." + + # Wartungsskript + cat > "/usr/local/bin/myp-maintenance" << 'EOF' +#!/bin/bash + +case "$1" in + start) + echo "Starte alle MYP-Services..." + systemctl start myp-druckerverwaltung + systemctl start nginx + systemctl start lightdm + echo "Services gestartet." + ;; + stop) + echo "Stoppe alle MYP-Services..." + systemctl stop lightdm + systemctl stop nginx + systemctl stop myp-druckerverwaltung + echo "Services gestoppt." + ;; + restart) + echo "Starte alle MYP-Services neu..." + systemctl restart myp-druckerverwaltung + sleep 3 + systemctl restart nginx + systemctl restart lightdm + echo "Services neugestartet." + ;; + status) + echo "=== MYP SYSTEM STATUS ===" + echo + echo "📱 Anwendung:" + systemctl status myp-druckerverwaltung --no-pager -l + echo + echo "🌐 Nginx Proxy:" + systemctl status nginx --no-pager -l + echo + echo "🖥️ Display Manager:" + systemctl status lightdm --no-pager -l + echo + echo "👤 Kiosk-Benutzer-Sessions:" + who | grep kiosk || echo "Kein Kiosk-Benutzer angemeldet" + echo + echo "🌐 Anwendung erreichbar:" + if curl -s http://localhost:5000 > /dev/null; then + echo "✅ http://localhost:5000 erreichbar" + else + echo "❌ http://localhost:5000 NICHT erreichbar" + fi + ;; + logs) + echo "=== ANWENDUNGS-LOGS (Strg+C zum Beenden) ===" + journalctl -u myp-druckerverwaltung -f + ;; + kiosk-logs) + echo "=== KIOSK-LOGS (Strg+C zum Beenden) ===" + echo "LightDM-Logs:" + journalctl -u lightdm -f & + echo "Session-Logs:" + tail -f /var/log/kiosk-session.log 2>/dev/null & + wait + ;; + exit-kiosk) + echo "🔐 KIOSK-MODUS BEENDEN" + echo "WARNUNG: Stoppt den Kiosk und aktiviert Wartungsmodus!" + echo "Passwort erforderlich für Sicherheit." + read -s -p "Kiosk-Passwort: " password + echo + if [ "$password" = "744563017196A" ]; then + echo "✅ Passwort korrekt - beende Kiosk-Modus..." + systemctl stop lightdm + systemctl enable ssh + systemctl start ssh + echo "🔧 Wartungsmodus aktiviert:" + echo " • Kiosk gestoppt" + echo " • SSH aktiviert" + echo " • Console verfügbar" + echo "Kiosk-Neustart mit: myp-maintenance start" + else + echo "❌ Falsches Passwort! Kiosk bleibt aktiv." + exit 1 + fi + ;; + enable-ssh) + echo "Aktiviere SSH für Wartung..." + systemctl enable ssh + systemctl start ssh + echo "✅ SSH aktiviert für Remote-Wartung" + echo "SSH-Status: $(systemctl is-active ssh)" + echo "IP-Adresse: $(hostname -I | awk '{print $1}')" + ;; + disable-ssh) + echo "Deaktiviere SSH für Sicherheit..." + systemctl stop ssh + systemctl disable ssh + echo "✅ SSH deaktiviert" + ;; + check-health) + echo "=== SYSTEM-GESUNDHEITSCHECK ===" + echo + # Services-Check + echo "📋 Service-Status:" + for service in myp-druckerverwaltung nginx lightdm; do + if systemctl is-active --quiet $service; then + echo " ✅ $service: aktiv" + else + echo " ❌ $service: INAKTIV" + fi + done + + echo + # Netzwerk-Check + echo "🌐 Netzwerk-Status:" + if curl -s http://localhost:5000 > /dev/null; then + echo " ✅ Anwendung erreichbar" + else + echo " ❌ Anwendung NICHT erreichbar" + fi + + echo + # Kiosk-Check + echo "🖥️ Kiosk-Status:" + if pgrep -u kiosk > /dev/null; then + echo " ✅ Kiosk-Benutzer angemeldet" + else + echo " ❌ Kiosk-Benutzer NICHT angemeldet" + fi + + if pgrep -f "chromium.*kiosk" > /dev/null; then + echo " ✅ Chromium-Kiosk läuft" + else + echo " ❌ Chromium-Kiosk läuft NICHT" + fi + echo + ;; + *) + echo "MYP Druckerverwaltung - Wartungstool" + echo + echo "VERWENDUNG: $0 BEFEHL" + echo + echo "SERVICE-MANAGEMENT:" + echo " start Alle Services starten" + echo " stop Alle Services stoppen" + echo " restart Alle Services neustarten" + echo " status Detaillierter Status aller Services" + echo + echo "LOGS & MONITORING:" + echo " logs Live Anwendungs-Logs anzeigen" + echo " kiosk-logs Live Kiosk-Logs anzeigen" + echo " check-health System-Gesundheitscheck" + echo + echo "KIOSK-KONTROLLE:" + echo " exit-kiosk Kiosk beenden (Passwort: 744563017196A)" + echo " enable-ssh SSH für Remote-Wartung aktivieren" + echo " disable-ssh SSH wieder deaktivieren" + echo + ;; +esac +EOF + + chmod +x "/usr/local/bin/myp-maintenance" + + # Kiosk-Starter-Skript + progress "Erstelle Kiosk-Starter-Skript..." + + KIOSK_HOME="/home/$KIOSK_USER" + + cat > "$KIOSK_HOME/start-kiosk.sh" << EOF +#!/bin/bash +# MYP Kiosk-Starter + +export DISPLAY=:0 + +# Logging für Debugging +exec > >(tee -a /var/log/kiosk-session.log) 2>&1 +echo "\$(date): Kiosk-Session gestartet für Benutzer $KIOSK_USER" + +# Bildschirmschoner deaktivieren +xset s off +xset s noblank +xset s noexpose +xset -dpms + +# Mauszeiger verstecken +unclutter -idle 0.5 -root & + +# Warte auf Anwendung +echo "Warte auf MYP-Anwendung..." +WAIT_COUNT=0 +while ! curl -s http://localhost:5000 > /dev/null; do + echo "Warte auf MYP-Anwendung... (\$WAIT_COUNT/30)" + sleep 2 + WAIT_COUNT=\$((WAIT_COUNT + 1)) + if [ \$WAIT_COUNT -gt 30 ]; then + echo "FEHLER: MYP-Anwendung nach 60s nicht erreichbar!" + break + fi +done + +# Starte Chromium im Kiosk-Modus +if command -v chromium &> /dev/null; then + CHROMIUM_BIN="chromium" +elif command -v chromium-browser &> /dev/null; then + CHROMIUM_BIN="chromium-browser" +else + echo "Chromium nicht gefunden! Versuche alternativ Firefox..." + if command -v firefox &> /dev/null; then + firefox --kiosk http://localhost:5000 + exit 0 + else + echo "Kein unterstützter Browser gefunden!" + exit 1 + fi +fi + +echo "Starte \$CHROMIUM_BIN im Kiosk-Modus..." + +\$CHROMIUM_BIN --kiosk --no-sandbox --disable-infobars --disable-session-crashed-bubble http://localhost:5000 + +echo "\$(date): Kiosk-Session beendet" +EOF + + chmod +x "$KIOSK_HOME/start-kiosk.sh" + chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/start-kiosk.sh" + + # Erstelle leere Log-Dateien + touch /var/log/kiosk-session.log + touch /var/log/kiosk-watchdog.log + touch /var/log/kiosk-autostart.log + touch /var/log/kiosk-fallback.log + chmod 666 /var/log/kiosk-session.log + chmod 666 /var/log/kiosk-watchdog.log + chmod 666 /var/log/kiosk-autostart.log + chmod 666 /var/log/kiosk-fallback.log + + log "✅ Wartungstools erstellt" +} + +# ========================== SERVICE-DATEIEN ERSTELLEN ========================== +create_service_files() { + log "=== SERVICE-DATEIEN ERSTELLEN ===" + + progress "Erstelle myp-druckerverwaltung.service..." + + # Service-Datei für die Hauptanwendung + cat > "/etc/systemd/system/myp-druckerverwaltung.service" << EOF +[Unit] +Description=MYP Druckerverwaltung Flask Application +After=network.target + +[Service] +Type=simple +User=$APP_USER +Group=$APP_USER +WorkingDirectory=$APP_DIR +Environment=PATH=/usr/local/bin:/usr/bin:/bin +Environment=PYTHONPATH=$APP_DIR +ExecStart=/usr/bin/python3 $APP_DIR/app.py +Restart=always +RestartSec=10 +StandardOutput=journal +StandardError=journal + +[Install] +WantedBy=multi-user.target +EOF + + # Erstelle eine einfache app.py falls keine vorhanden ist + if [ ! -f "$APP_DIR/app.py" ]; then + progress "Erstelle einfache app.py als Platzhalter..." + mkdir -p "$APP_DIR" + cat > "$APP_DIR/app.py" << 'EOF' +#!/usr/bin/python3 +# Einfache Flask-Anwendung als Platzhalter + +from flask import Flask, render_template_string + +app = Flask(__name__) + +@app.route('/') +def home(): + return render_template_string(""" + + + + MYP Druckerverwaltung + + + +
+

MYP Druckerverwaltung

+
+

System erfolgreich gestartet

+

Die MYP Druckerverwaltung läuft im Kiosk-Modus.

+

Sie können diese Anwendung nun durch Ihre eigentliche Anwendung ersetzen.

+
+
+ + + """) + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000) +EOF + chmod +x "$APP_DIR/app.py" + chown "$APP_USER:$APP_USER" "$APP_DIR/app.py" + + # Installiere Flask falls nicht vorhanden + if ! python3 -c "import flask" &>/dev/null; then + progress "Installiere Flask..." + pip3 install flask --break-system-packages || true + fi + fi + + # Erstelle Templates-Verzeichnis falls nicht vorhanden + if [ ! -d "$APP_DIR/templates" ]; then + mkdir -p "$APP_DIR/templates" + chown "$APP_USER:$APP_USER" "$APP_DIR/templates" + fi + + # Erstelle Static-Verzeichnis falls nicht vorhanden + if [ ! -d "$APP_DIR/static" ]; then + mkdir -p "$APP_DIR/static" + chown "$APP_USER:$APP_USER" "$APP_DIR/static" + fi + + # Systemd neu laden + systemctl daemon-reload + + log "✅ Service-Dateien erstellt" +} + # ========================== HAUPTFUNKTION ========================== main() { log "=== RASPBERRY PI SCHNELLSTART-OPTIMIERUNG GESTARTET ===" @@ -607,9 +949,11 @@ main() { check_root check_system install_essential_packages + create_service_files optimize_boot strengthen_autologin optimize_kiosk_user + create_maintenance_tools strengthen_watchdog optimize_services optimize_system_parameters @@ -619,9 +963,11 @@ main() { log "🎉 RASPBERRY PI SCHNELLSTART-OPTIMIERUNG ERFOLGREICH!" log "" log "📋 ZUSAMMENFASSUNG:" + log " ✅ Service-Dateien erstellt" log " ✅ Boot-Parameter optimiert" log " ✅ Autologin verstärkt" log " ✅ Kiosk-Benutzer optimiert" + log " ✅ Wartungstools erstellt" log " ✅ Watchdog-Services verstärkt" log " ✅ System-Services optimiert" log " ✅ System-Parameter optimiert"