From f44639e497d4a867cc46f8166b9923b64eda3715 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Sat, 31 May 2025 03:01:14 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=89=20Improved=20backend=20functionali?= =?UTF-8?q?ty=20&=20added=20documentation=20for=20installation=20correctio?= =?UTF-8?q?ns=20in=20raspberry=20pi=20scripts=20=F0=9F=8E=A8=F0=9F=93=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/app.py | 6 + backend/app/docs/INSTALLATION_KORREKTUREN.md | 1 + backend/app/install_raspberry_pi.sh | 161 ++++++++++++++++++- backend/app/schnellstart_raspberry_pi.sh | 18 ++- 4 files changed, 177 insertions(+), 9 deletions(-) create mode 100644 backend/app/docs/INSTALLATION_KORREKTUREN.md diff --git a/backend/app/app.py b/backend/app/app.py index f21c74c2..319aa7e4 100644 --- a/backend/app/app.py +++ b/backend/app/app.py @@ -41,6 +41,9 @@ from utils.queue_manager import start_queue_manager, stop_queue_manager, get_que from config.settings import SECRET_KEY, UPLOAD_FOLDER, ALLOWED_EXTENSIONS, ENVIRONMENT, SESSION_LIFETIME, SCHEDULER_ENABLED, SCHEDULER_INTERVAL, TAPO_USERNAME, TAPO_PASSWORD from utils.file_manager import file_manager, save_job_file, save_guest_file, save_avatar_file, save_asset_file, save_log_file, save_backup_file, save_temp_file, delete_file as delete_file_safe +# Datenbank-Engine für Kompatibilität mit init_simple_db.py +from models import engine as db_engine + # Blueprints importieren from blueprints.guest import guest_blueprint from blueprints.calendar import calendar_blueprint @@ -96,6 +99,9 @@ app.config["PERMANENT_SESSION_LIFETIME"] = SESSION_LIFETIME app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False app.config["WTF_CSRF_ENABLED"] = True +# Globale db-Variable für Kompatibilität mit init_simple_db.py +db = db_engine + # CSRF-Schutz initialisieren csrf = CSRFProtect(app) diff --git a/backend/app/docs/INSTALLATION_KORREKTUREN.md b/backend/app/docs/INSTALLATION_KORREKTUREN.md new file mode 100644 index 00000000..0519ecba --- /dev/null +++ b/backend/app/docs/INSTALLATION_KORREKTUREN.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/backend/app/install_raspberry_pi.sh b/backend/app/install_raspberry_pi.sh index 48da5c39..0be3a4ed 100644 --- a/backend/app/install_raspberry_pi.sh +++ b/backend/app/install_raspberry_pi.sh @@ -38,6 +38,17 @@ if [ "$EUID" -ne 0 ]; then error "Dieses Skript muss als Root ausgeführt werden. Verwende: sudo $0" fi +# Stelle sicher, dass wichtige Tools verfügbar sind +log "Prüfe System-Tools..." +export PATH="/usr/sbin:/sbin:/usr/bin:/bin:$PATH" + +# Prüfe kritische Befehle +for cmd in useradd usermod systemctl apt-get; do + if ! command -v "$cmd" &> /dev/null; then + error "Erforderlicher Befehl '$cmd' nicht gefunden. PATH: $PATH" + fi +done + log "=== MYP Druckerverwaltung - Raspberry Pi Installation ===" log "Debian 12 (Bookworm) Kiosk-Modus nach offizieller Anleitung" echo @@ -88,7 +99,6 @@ apt-get install -y \ sqlite3 \ nginx \ supervisor \ - chromium-browser \ xorg \ openbox \ lightdm \ @@ -103,13 +113,31 @@ apt-get install -y \ zlib1g-dev \ nodejs \ npm \ - --no-install-recommends || true + passwd \ + adduser \ + --no-install-recommends + +# Installiere Chromium (versuche verschiedene Paketnamen) +log "Installiere Chromium Browser..." +if apt-get install -y chromium 2>/dev/null; then + log "✅ Chromium erfolgreich installiert" +elif apt-get install -y chromium-browser 2>/dev/null; then + log "✅ Chromium-Browser erfolgreich installiert" +else + warning "⚠️ Chromium konnte nicht automatisch installiert werden" + warning " Manuell installieren mit: apt-get install chromium" +fi # Erstelle Anwendungsbenutzer log "Erstelle Anwendungsbenutzer '$APP_USER'..." if ! id "$APP_USER" &>/dev/null; then - useradd -m -s /bin/bash "$APP_USER" - usermod -aG sudo "$APP_USER" + if ! useradd -m -s /bin/bash "$APP_USER" 2>/dev/null; then + warning "Fehler bei useradd - versuche adduser..." + if ! adduser --disabled-password --gecos "" "$APP_USER" 2>/dev/null; then + error "Konnte Benutzer '$APP_USER' nicht erstellen. System-Tools prüfen." + fi + fi + usermod -aG sudo "$APP_USER" 2>/dev/null || warning "Konnte '$APP_USER' nicht zur sudo-Gruppe hinzufügen" log "Benutzer '$APP_USER' erstellt" else log "Benutzer '$APP_USER' existiert bereits" @@ -118,8 +146,13 @@ fi # Erstelle Kiosk-Benutzer (nach offizieller Anleitung) log "Erstelle Kiosk-Benutzer '$KIOSK_USER'..." if ! id "$KIOSK_USER" &>/dev/null; then - useradd -m -s /bin/bash "$KIOSK_USER" - usermod -aG audio,video "$KIOSK_USER" + if ! useradd -m -s /bin/bash "$KIOSK_USER" 2>/dev/null; then + warning "Fehler bei useradd - versuche adduser..." + if ! adduser --disabled-password --gecos "" "$KIOSK_USER" 2>/dev/null; then + error "Konnte Benutzer '$KIOSK_USER' nicht erstellen. System-Tools prüfen." + fi + fi + usermod -aG audio,video "$KIOSK_USER" 2>/dev/null || warning "Konnte '$KIOSK_USER' nicht zu Gruppen hinzufügen" log "Benutzer '$KIOSK_USER' erstellt" else log "Benutzer '$KIOSK_USER' existiert bereits" @@ -239,6 +272,22 @@ EOF chown "$APP_USER:$APP_USER" "$APP_DIR/.env" +# Erkenne verfügbares Chromium-Binary +log "Erkenne Chromium-Installation..." +CHROMIUM_BIN="" +for chromium_path in "/usr/bin/chromium" "/usr/bin/chromium-browser" "/snap/bin/chromium"; do + if [ -x "$chromium_path" ]; then + CHROMIUM_BIN="$chromium_path" + log "Chromium gefunden: $CHROMIUM_BIN" + break + fi +done + +if [ -z "$CHROMIUM_BIN" ]; then + warning "Chromium nicht gefunden - Kiosk-Modus möglicherweise nicht funktional" + CHROMIUM_BIN="/usr/bin/chromium" # Fallback +fi + # Erstelle Kiosk-Skript (nach offizieller Anleitung) log "Erstelle Kiosk-Skript..." cat > "$KIOSK_HOME/kiosk.sh" << EOF @@ -269,7 +318,7 @@ while ! curl -s http://localhost > /dev/null; do done # Starte Chromium im Kiosk-Modus (nach offizieller Anleitung) -/usr/bin/chromium-browser \\ +$CHROMIUM_BIN \\ --noerrdialogs \\ --disable-infobars \\ --kiosk \\ @@ -450,6 +499,29 @@ case "$1" in echo "=== Kiosk-Logs ===" journalctl -u myp-kiosk -f ;; + diagnose) + echo "=== MYP System-Diagnose ===" + echo "• Datum: $(date)" + echo "• System: $(uname -a)" + echo "• Distribution: $(lsb_release -d 2>/dev/null || cat /etc/os-release | head -1)" + echo "• Speicher: $(free -h | head -2)" + echo "• Festplatte: $(df -h / | tail -1)" + echo + echo "=== Services ===" + systemctl is-active myp-druckerverwaltung nginx myp-kiosk || true + echo + echo "=== Ports ===" + netstat -tulpn | grep ":80\|:5000" || true + echo + echo "=== Chromium ===" + which chromium chromium-browser 2>/dev/null || echo "Chromium nicht gefunden" + echo + echo "=== Benutzer ===" + id myp kiosk 2>/dev/null || echo "Benutzer nicht vollständig konfiguriert" + echo + echo "=== Letzte Logs ===" + journalctl -u myp-druckerverwaltung --no-pager -n 10 --since "1 hour ago" || true + ;; update) echo "Aktualisiere MYP Druckerverwaltung..." cd $APP_DIR @@ -475,7 +547,7 @@ case "$1" in systemctl restart myp-kiosk ;; *) - echo "Verwendung: $0 {start|stop|restart|status|logs|kiosk-logs|update|kiosk-restart}" + echo "Verwendung: $0 {start|stop|restart|status|logs|kiosk-logs|diagnose|update|kiosk-restart}" exit 1 ;; esac @@ -523,6 +595,77 @@ EOF chmod +x $LOCAL_BIN/myp-backup +# Erstelle Reparatur-Skript +log "Erstelle Reparatur-Skript..." +cat > "$LOCAL_BIN/myp-repair" << 'EOF' +#!/bin/bash + +echo "🔧 MYP Druckerverwaltung Reparatur-Tool" +echo "=====================================" +echo + +# Prüfe Root-Berechtigung +if [ "$EUID" -ne 0 ]; then + echo "❌ Dieses Skript muss als Root ausgeführt werden: sudo $0" + exit 1 +fi + +# Setze PATH +export PATH="/usr/sbin:/sbin:/usr/bin:/bin:$PATH" + +echo "1. Prüfe und repariere Services..." +systemctl daemon-reload +systemctl reset-failed myp-druckerverwaltung myp-kiosk nginx 2>/dev/null || true + +echo "2. Prüfe Benutzer..." +if ! id myp &>/dev/null; then + echo " - Erstelle myp-Benutzer..." + useradd -m -s /bin/bash myp 2>/dev/null || adduser --disabled-password --gecos "" myp +fi + +if ! id kiosk &>/dev/null; then + echo " - Erstelle kiosk-Benutzer..." + useradd -m -s /bin/bash kiosk 2>/dev/null || adduser --disabled-password --gecos "" kiosk + usermod -aG audio,video kiosk 2>/dev/null || true +fi + +echo "3. Prüfe Verzeichnisse..." +mkdir -p /opt/myp-druckerverwaltung /opt/myp-backups /home/kiosk/.config/openbox +chown myp:myp /opt/myp-druckerverwaltung +chown kiosk:kiosk /home/kiosk/.config -R + +echo "4. Prüfe Chromium..." +CHROMIUM_BIN="" +for chromium_path in "/usr/bin/chromium" "/usr/bin/chromium-browser" "/snap/bin/chromium"; do + if [ -x "$chromium_path" ]; then + CHROMIUM_BIN="$chromium_path" + echo " - Chromium gefunden: $CHROMIUM_BIN" + break + fi +done + +if [ -z "$CHROMIUM_BIN" ]; then + echo " - Installiere Chromium..." + apt-get update -y + apt-get install -y chromium || apt-get install -y chromium-browser || echo " - Chromium-Installation fehlgeschlagen" +fi + +echo "5. Repariere Berechtigungen..." +chmod +x /usr/local/bin/myp-* 2>/dev/null || true +chmod +x /home/kiosk/kiosk.sh 2>/dev/null || true + +echo "6. Starte Services neu..." +systemctl restart myp-druckerverwaltung nginx +systemctl enable myp-druckerverwaltung nginx myp-kiosk + +echo +echo "✅ Reparatur abgeschlossen!" +echo " Status prüfen mit: myp-maintenance status" +echo " Diagnose ausführen mit: myp-maintenance diagnose" +EOF + +chmod +x $LOCAL_BIN/myp-repair + # Erstelle Cron-Job für automatische Backups echo "0 2 * * * root $LOCAL_BIN/myp-backup" > $CRON_DIR/myp-backup @@ -581,6 +724,8 @@ info " • Kiosk-Logs: myp-maintenance kiosk-logs" info " • Nur Kiosk neustarten: myp-maintenance kiosk-restart" info " • Update: myp-maintenance update" info " • Backup erstellen: myp-backup" +info " • System-Diagnose: myp-maintenance diagnose" +info " • Automatische Reparatur: myp-repair" echo info "🔍 Zusätzliche Konfiguration:" info " • Kiosk-Skript: $KIOSK_HOME/kiosk.sh" diff --git a/backend/app/schnellstart_raspberry_pi.sh b/backend/app/schnellstart_raspberry_pi.sh index fa229807..044d1af0 100644 --- a/backend/app/schnellstart_raspberry_pi.sh +++ b/backend/app/schnellstart_raspberry_pi.sh @@ -51,6 +51,22 @@ if [ "$EUID" -ne 0 ]; then error "Dieses Skript muss als Root ausgeführt werden: sudo $0" fi +# Stelle sicher, dass wichtige Tools verfügbar sind +export PATH="/usr/sbin:/sbin:/usr/bin:/bin:$PATH" + +# Erkenne verfügbares Chromium-Binary +CHROMIUM_BIN="" +for chromium_path in "/usr/bin/chromium" "/usr/bin/chromium-browser" "/snap/bin/chromium"; do + if [ -x "$chromium_path" ]; then + CHROMIUM_BIN="$chromium_path" + break + fi +done + +if [ -z "$CHROMIUM_BIN" ]; then + CHROMIUM_BIN="chromium" # Fallback auf PATH +fi + # Raspberry Pi erkennen if ! grep -q "Raspberry Pi" /proc/device-tree/model 2>/dev/null; then warning "Nicht auf Raspberry Pi - Installation trotzdem fortsetzen? (j/N)" @@ -158,7 +174,7 @@ Version=1.0 Type=Application Name=MYP Browser-Ansicht Comment=Druckerverwaltung im Browser öffnen -Exec=chromium-browser $kiosk_url +Exec=$CHROMIUM_BIN $kiosk_url Icon=web-browser Terminal=false Categories=Network;