# MYP Platform - Häufige Fehler und Lösungen Dieses Dokument sammelt häufige Installations- und Konfigurationsfehler mit ihren bewährten Lösungen. ## 📦 Python-Paket-Installationsfehler ### Send2Trash Installation schlägt fehl **Problem:** ``` ERROR: Failed building wheel for Send2Trash error: Microsoft Visual C++ 14.0 is required ``` **Lösung:** - Send2Trash wurde aus requirements.txt entfernt - Native Alternative in `backend/utils/file_utils.py` implementiert - Verwendet plattformspezifische Papierkorb-APIs: - Windows: PowerShell + Visual Basic FileSystem - Linux: gio/gvfs-trash/XDG-Standard - macOS: osascript + Finder **Code-Ersatz:** ```python # Alt: from send2trash import send2trash send2trash(file_path) # Neu: from utils.file_utils import move_to_trash move_to_trash(file_path) ``` ### Python-magic-bin Windows-Fehler **Problem:** ``` ERROR: Could not find a version that satisfies the requirement python-magic-bin ``` **Lösung:** - Paket ist Windows-spezifisch und wird automatisch übersprungen auf Linux - Setup-Skript erstellt bereinigte requirements.txt ohne problematische Pakete - Plattformspezifische Conditional-Installation: `; sys_platform == "win32"` ### RPi.GPIO auf Non-Raspberry Pi **Problem:** ``` RuntimeError: This module can only be run on a Raspberry Pi! ``` **Lösung:** - Conditional-Installation: `RPi.GPIO; sys_platform == "linux"` - Wird automatisch übersprungen wenn nicht auf Raspberry Pi - Fallback-Hardware-Detection in Hardware-Modulen ## 🔧 Systemkonfigurationsfehler ### Hostname-Änderung schlägt fehl **Problem:** ``` hostnamectl: command not found /etc/hostname: Permission denied ``` **Lösung:** ```bash # Prüfe systemd-Verfügbarkeit if command -v hostnamectl >/dev/null 2>&1; then sudo hostnamectl set-hostname m040tbaraspi001 else # Fallback für ältere Systeme echo "m040tbaraspi001" | sudo tee /etc/hostname sudo hostname m040tbaraspi001 fi # Hosts-Datei aktualisieren sudo sed -i 's/127.0.1.1.*/127.0.1.1\tm040tbaraspi001/' /etc/hosts ``` ### SSL-Zertifikat-Generierung schlägt fehl **Problem:** ``` openssl: command not found Permission denied: /opt/myp/ssl/ ``` **Lösung:** ```bash # OpenSSL installieren sudo apt update && sudo apt install -y openssl # Verzeichnis mit korrekten Berechtigungen erstellen sudo mkdir -p /opt/myp/ssl sudo chown -R $USER:$USER /opt/myp/ssl sudo chmod 755 /opt/myp/ssl # Self-signed Zertifikat generieren openssl req -x509 -newkey rsa:4096 -keyout /opt/myp/ssl/key.pem \ -out /opt/myp/ssl/cert.pem -days 365 -nodes \ -subj "/C=DE/ST=NRW/L=Duesseldorf/O=Mercedes-Benz/CN=m040tbaraspi001" ``` ### Systemd-Service Installation schlägt fehl **Problem:** ``` Failed to enable unit: Unit file does not exist systemctl: command not found ``` **Lösung:** ```bash # Prüfe systemd-Verfügbarkeit if ! command -v systemctl >/dev/null 2>&1; then echo "systemd nicht verfügbar - verwende alternatives Init-System" # Fallback auf SysV init oder manuelle Autostart-Einrichtung return 1 fi # Service-Datei kopieren und aktivieren sudo cp myp-*.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable myp-app.service sudo systemctl enable myp-kiosk.service ``` ## 🌐 Netzwerkkonfigurationsfehler ### Firewall blockiert Zugriff **Problem:** ``` Connection refused: https://m040tbaraspi001.de040.corpintra.net:443 curl: (7) Failed to connect ``` **Lösung:** ```bash # UFW-Firewall konfigurieren sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw allow 5000/tcp # Flask Development sudo ufw --force enable # iptables direkt (falls UFW nicht verfügbar) sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables-save | sudo tee /etc/iptables/rules.v4 ``` ### DNS-Auflösung schlägt fehl **Problem:** ``` nslookup: can't resolve 'm040tbaraspi001.de040.corpintra.net' ping: unknown host ``` **Lösung:** ```bash # Lokale hosts-Datei erweitern echo "127.0.0.1 m040tbaraspi001.local" | sudo tee -a /etc/hosts echo "127.0.0.1 m040tbaraspi001.de040.corpintra.net" | sudo tee -a /etc/hosts # DNS-Server prüfen und setzen echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf # NetworkManager DNS (Ubuntu/Debian) sudo systemctl restart NetworkManager ``` ## 🖥️ Desktop- und Kiosk-Fehler ### Graphical Session Target Not Found **Problem:** ``` graphical session target not found Unit graphical-session.target could not be found Failed to start myp-kiosk.service ``` **Ursache**: Das `graphical-session.target` existiert nicht auf allen Raspberry Pi-Konfigurationen **🚀 SCHNELLE LÖSUNG:** ```bash # Super-Skript ausführen (behebt ALLES automatisch): cd /opt/myp sudo ./setup_https_only.sh # Das Super-Skript erkennt und behebt automatisch: # ✅ Graphical session target Problem # ✅ Service-Konfiguration reparieren # ✅ Korrekte Targets verwenden # ✅ Headless/Desktop-System automatisch erkennen ``` **🔧 Manuelle Lösung:** ```bash # 1. Service-Datei anpassen sudo systemctl edit myp-kiosk.service --full # 2. Ersetze in der [Unit]-Sektion: # VON: After=graphical-session.target # ZU: After=graphical.target # 3. SystemD neu laden sudo systemctl daemon-reload sudo systemctl restart myp-kiosk ``` **📋 Für verschiedene Szenarien:** ```bash # Headless-System (ohne Display): sudo systemctl disable myp-kiosk # Desktop-Environment installieren: sudo apt install --no-install-recommends xserver-xorg xinit # Graphical Target als Standard setzen: sudo systemctl set-default graphical.target # Verfügbare Targets prüfen: systemctl list-unit-files --type=target | grep graphical ``` ### Chromium startet nicht im Kiosk-Modus **Problem:** ``` chromium-browser: command not found [ERROR:gpu_init.cc] GPU initialization failed ``` **Lösung:** ```bash # Chromium installieren sudo apt update && sudo apt install -y chromium-browser # GPU-Acceleration deaktivieren für Headless-Systeme chromium-browser --no-sandbox --disable-gpu --disable-software-rasterizer \ --disable-background-timer-throttling --disable-renderer-backgrounding \ --disable-backgrounding-occluded-windows --kiosk "$URL" # Fallback auf andere Browser if ! command -v chromium-browser >/dev/null 2>&1; then if command -v firefox >/dev/null 2>&1; then firefox --kiosk "$URL" elif command -v google-chrome >/dev/null 2>&1; then google-chrome --kiosk --no-sandbox "$URL" fi fi ``` ### Desktop-Verknüpfung wird nicht angezeigt **Problem:** ``` .desktop file created but not visible Icon not displayed ``` **Lösung:** ```bash # Desktop-Datei ausführbar machen chmod +x ~/Desktop/myp-kiosk.desktop # Icon kopieren sudo cp backend/static/mercedes.svg /usr/share/pixmaps/myp-mercedes.svg sudo chmod 644 /usr/share/pixmaps/myp-mercedes.svg # Desktop-Datenbank aktualisieren update-desktop-database ~/.local/share/applications/ xdg-desktop-menu forceupdate # Gnome: Trusted Application markieren dconf write /org/gnome/desktop/interface/enable-animations false ``` ## 📊 Datenbank- und Persistenzfehler ### SQLite-Datenbank Berechtigungsfehler **Problem:** ``` sqlite3.OperationalError: attempt to write a readonly database PermissionError: [Errno 13] Permission denied: 'instance/myp.db' ``` **Lösung:** ```bash # Verzeichnis und Datei-Berechtigungen korrigieren sudo chown -R $USER:$USER /opt/myp/instance/ chmod 755 /opt/myp/instance/ chmod 644 /opt/myp/instance/*.db # Backup-Verzeichnis mit Schreibrechten mkdir -p /opt/myp/instance/backups chmod 755 /opt/myp/instance/backups ``` ### Backup-Prozess schlägt fehl **Problem:** ``` rsync: command not found tar: cannot create backup disk full ``` **Lösung:** ```bash # Notwendige Tools installieren sudo apt install -y rsync tar gzip # Speicherplatz prüfen df -h /opt/myp/ # Alte Backups aufräumen (älter als 30 Tage) find /opt/myp/instance/backups -name "*.tar.gz" -mtime +30 -delete # Komprimierte Backups tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz instance/ ``` ## 🔐 Sicherheits- und Authentifizierungsfehler ### JWT-Token-Validierung schlägt fehl **Problem:** ``` jwt.DecodeError: Invalid token SECRET_KEY not set ``` **Lösung:** ```python # In config.py sicherstellen: import secrets SECRET_KEY = secrets.token_urlsafe(32) # Oder aus Umgebungsvariable: SECRET_KEY = os.environ.get('SECRET_KEY') or secrets.token_urlsafe(32) # Token-Expiration prüfen: JWT_ACCESS_TOKEN_EXPIRES = timedelta(hours=24) ``` ### SSL Browser-Kompatibilitätsfehler (ERR_SSL_KEY_USAGE_INCOMPATIBLE) **Problem:** ``` ERR_SSL_KEY_USAGE_INCOMPATIBLE This site can't provide a secure connection SSL certificate key usage incompatible ``` **🚀 SUPER-SKRIPT LÖSUNG (Intelligente Komplettlösung):** ```bash # Das EINZIGE Super-Skript für ALLE Probleme: cd /opt/myp sudo ./setup_https_only.sh # Das intelligente Super-Skript macht automatisch: # ✅ ERR_SSL_KEY_USAGE_INCOMPATIBLE beheben # ✅ Browser-kompatible SSL-Zertifikate erstellen # ✅ Port 5000 blockieren, nur Port 443 öffnen # ✅ SSL-Zertifikat-Gesundheit prüfen und erneuern # ✅ Alle SSL-Probleme automatisch reparieren # ✅ Connection refused beheben # ✅ Graphical session target beheben # ✅ Service-Dependencies reparieren # ✅ Port-Konflikte lösen # ✅ Kiosk intelligent konfigurieren # ✅ Firewall für maximale Sicherheit ``` **Lösung:** **🍓 RASPBERRY PI (Zielsystem) - PRIMÄRE LÖSUNG:** ```bash # SSL-Fix auf Raspberry Pi ausführen ssh pi@m040tbaraspi001 sudo chmod +x /tmp/fix_ssl_raspberry.sh sudo /tmp/fix_ssl_raspberry.sh # Oder via Setup-Skript cd /opt/myp sudo ./setup.sh # Option [1] wählen ``` **🔧 Alternative Tools:** ```bash # Cross-Platform Python Tool cd backend python3 ssl_fix.py # Oder manuell neue browser-kompatible Zertifikate generieren: cd backend/ssl openssl genrsa -out key.pem 2048 # Erstelle OpenSSL-Konfiguration mit korrekten Extensions cat > ssl_fix.conf << 'EOF' [req] distinguished_name = req_distinguished_name req_extensions = v3_req prompt = no [req_distinguished_name] C = DE ST = Baden-Wuerttemberg L = Stuttgart O = Mercedes-Benz AG OU = MYP Druckerverwaltung CN = m040tbaraspi001 [v3_req] basicConstraints = critical, CA:FALSE keyUsage = critical, digitalSignature, keyEncipherment, keyAgreement extendedKeyUsage = critical, serverAuth, clientAuth subjectAltName = critical, @alt_names nsCertType = server [alt_names] DNS.1 = localhost DNS.2 = m040tbaraspi001 DNS.3 = m040tbaraspi001.de040.corpintra.net IP.1 = 127.0.0.1 EOF # Generiere browser-kompatibles Zertifikat openssl req -new -x509 -key key.pem -out cert.pem -days 365 \ -config ssl_fix.conf -extensions v3_req -sha256 # Validiere Extensions openssl x509 -in cert.pem -noout -text | grep -A5 "Key Usage" # Danach: Browser-Cache leeren und MYP neu starten ``` ### HTTPS-Redirect-Loop **Problem:** ``` ERR_TOO_MANY_REDIRECTS Infinite redirect between http and https ``` **Lösung:** ```python # In Flask-App prüfen: from flask_talisman import Talisman # Nur HTTPS forcieren wenn Zertifikat verfügbar if os.path.exists('/opt/myp/ssl/cert.pem'): Talisman(app, force_https=True) else: # Development: HTTP erlauben Talisman(app, force_https=False) ``` ## 📝 Log-Dateien zur Fehlerdiagnose ### Wichtige Log-Standorte: ```bash # MYP Application Logs /opt/myp/logs/app/app.log /opt/myp/logs/errors/error.log # Systemd Service Logs journalctl -u myp-app.service -f journalctl -u myp-kiosk.service -f # System-Logs /var/log/syslog /var/log/nginx/error.log # Falls Nginx verwendet wird ``` ### Log-Analyse-Befehle: ```bash # Letzte 50 Fehler tail -50 /opt/myp/logs/errors/error.log | grep ERROR # Live-Monitoring tail -f /opt/myp/logs/app/app.log # Fehler der letzten Stunde journalctl -u myp-app.service --since "1 hour ago" | grep ERROR ``` ## 🛠️ Debugging-Tools ### System-Informationen sammeln: ```bash # System-Overview uname -a lsb_release -a python3 --version pip3 list | grep -E "(Flask|requests)" # Netzwerk-Status ip addr show ss -tulpn | grep :443 curl -I http://localhost:5000/health # Prozess-Status ps aux | grep -E "(python|myp)" systemctl status myp-* ``` ### Performance-Monitoring: ```bash # CPU und Memory top -p $(pgrep -f "python.*myp") htop # Disk I/O iotop df -h /opt/myp/ # Network iftop netstat -i ``` ## 📋 Vorbeugende Maßnahmen ### Regelmäßige Wartung: ```bash # System-Updates sudo apt update && sudo apt upgrade -y # Python-Pakete aktualisieren pip3 list --outdated python3 -m pip install --upgrade pip # Log-Rotation einrichten sudo logrotate -f /etc/logrotate.conf # Disk-Cleanup sudo apt autoremove -y sudo apt autoclean ``` ### Monitoring-Setup: ```bash # Cron-Job für Health-Check (alle 5 Minuten) echo "*/5 * * * * curl -f http://localhost:5000/health || systemctl restart myp-app.service" | crontab - # Log-Size monitoring echo "0 2 * * * find /opt/myp/logs -name '*.log' -size +100M -exec truncate -s 50M {} \;" | crontab - ``` --- **💡 Tipp:** Vor jeder größeren Änderung ein vollständiges Backup erstellen: ```bash sudo tar -czf /tmp/myp_backup_$(date +%Y%m%d_%H%M%S).tar.gz /opt/myp/ ``` ### Connection Refused (Kiosk-Modus) **Problem:** ``` Connection refused ERR_CONNECTION_REFUSED Kiosk startet aber kann sich nicht mit MYP-Server verbinden ``` **Ursachen:** - MYP-Server läuft nicht (myp-https/myp-app Service) - Ports 443/5000 sind blockiert oder nicht belegt - SSL-Zertifikate fehlen oder sind ungültig - Python-Module fehlen oder sind defekt - Firewall blockiert Verbindungen **🚀 Schnelle Lösung:** ```bash # Super-Skript ausführen (INTELLIGENTE Komplettlösung): cd /opt/myp sudo ./setup_https_only.sh # Das Super-Skript erkennt und repariert automatisch: # ✅ Connection refused Probleme # ✅ Service-Status prüfen und reparieren # ✅ Python-Module reparieren # ✅ Port-Konflikte lösen # ✅ SSL-Zertifikate validieren ``` **🔍 Manuelle Diagnose (falls nötig):** ```bash # Service-Logs prüfen journalctl -u myp-production -f journalctl -u myp-https -f journalctl -u myp-app -f # Port-Status prüfen netstat -tulpn | grep -E ':(443|5000|80)' ``` **🔧 Manuelle Reparatur:** ```bash # 1. Services stoppen und neu starten sudo systemctl stop myp-kiosk myp-https myp-app sudo systemctl start myp-app myp-https myp-kiosk # 2. Firewall-Ports öffnen sudo ufw allow 443 sudo ufw allow 5000 sudo ufw allow 80 # 3. SSL-Zertifikate regenerieren cd /opt/myp sudo ./fix_ssl_raspberry.sh # 4. Python-Module neu installieren cd /opt/myp sudo python3 -m pip install -r requirements.txt --break-system-packages --force-reinstall # 5. App manuell testen cd /opt/myp python3 app.py ``` **🎯 Verbindungstest:** ```bash # Teste lokale Verbindungen curl -k https://localhost:443 curl http://localhost:5000 curl -k https://m040tbaraspi001.de040.corpintra.net # Teste von anderem System curl -k https://192.168.1.XXX:443 ``` **📋 Häufige Lösungen:** - **Service läuft nicht**: `sudo systemctl enable --now myp-https` - **Port blockiert**: `sudo ufw allow 443 && sudo ufw allow 5000` - **SSL-Fehler**: `sudo ./fix_ssl_raspberry.sh` - **Python-Fehler**: `sudo python3 -m pip install flask --break-system-packages` - **Kiosk-URL falsch**: Prüfe `/etc/systemd/system/myp-kiosk.service` --- **📞 Support:** Bei ungelösten Problemen alle relevanten Logs und die Ausgabe der Debugging-Tools sammeln.