📝 "Update README and setup documentation with Gitmoji emojis" 🌟
This commit is contained in:
parent
c1b0353ac5
commit
b5fca69a0f
@ -454,7 +454,39 @@ Dieses Projekt ist für den internen Gebrauch bei Mercedes-Benz entwickelt.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Version**: 4.0.0
|
## 🆕 Version 4.0.4 - Setup-Korrekturen (2025-01-12)
|
||||||
|
|
||||||
|
### ✅ Behobene Probleme
|
||||||
|
- **Python-Import-Fehler behoben**: Flask-App kann jetzt korrekt importiert werden
|
||||||
|
- **Requirements.txt korrigiert**: Alle Versionskonflikte beseitigt (Werkzeug + Flask)
|
||||||
|
- **Internetverbindung-Erkennung**: Multi-Methoden-Prüfung (HTTP/DNS/ICMP/Gateway)
|
||||||
|
- **PYTHONPATH-Konflikte behoben**: Robuste Umgebungsvariablen-Behandlung
|
||||||
|
- **Robuste Installation**: Mehrstufige Validierung und Fallback-Mechanismen
|
||||||
|
- **Python-Umgebung**: Automatische PYTHONPATH-Konfiguration implementiert
|
||||||
|
|
||||||
|
### 🔧 Verbesserungen
|
||||||
|
- Erweiterte Fehlerbehandlung im Setup-Skript
|
||||||
|
- Sichere Test-Umgebung für Flask-App-Validierung
|
||||||
|
- Performance-Optimierungen für pip-Installation
|
||||||
|
- Robuste Netzwerk-Erkennung für Firewalls/Proxys/VirtualBox
|
||||||
|
- Umfassende Dokumentation der Korrekturen
|
||||||
|
|
||||||
|
### 📋 Nach Update empfohlen
|
||||||
|
```bash
|
||||||
|
# Setup-Skript erneut ausführen für korrigierte Installation
|
||||||
|
sudo ./setup.sh # Option 1 zum Testen der Korrekturen
|
||||||
|
|
||||||
|
# Das Setup sollte jetzt reibungslos durchlaufen ohne:
|
||||||
|
# - Python-Import-Fehler
|
||||||
|
# - PYTHONPATH-Konflikte
|
||||||
|
# - Internetverbindung-Fehlmeldungen
|
||||||
|
```
|
||||||
|
|
||||||
|
**Details**: Siehe [`docs/SETUP_KORREKTUREN.md`](docs/SETUP_KORREKTUREN.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Version**: 4.0.4 (Korrigiert)
|
||||||
**Plattform**: Debian/Linux (Raspberry Pi OS)
|
**Plattform**: Debian/Linux (Raspberry Pi OS)
|
||||||
**Modus**: HTTPS Kiosk (Port 443)
|
**Modus**: HTTPS Kiosk (Port 443)
|
||||||
**Setup**: Konsolidiertes `setup.sh` System
|
**Setup**: Konsolidiertes `setup.sh` System
|
||||||
|
@ -1 +1,263 @@
|
|||||||
|
# MYP Platform - Setup-Skript Korrekturen
|
||||||
|
|
||||||
|
**Datum:** 2025-01-12
|
||||||
|
**Version:** 4.0.4 (Korrigiert)
|
||||||
|
**Status:** ✅ Vollständig behoben
|
||||||
|
|
||||||
|
## PROBLEM-ANALYSE
|
||||||
|
|
||||||
|
### Hauptfehler
|
||||||
|
- **FEHLERHAFTE Python-Import fehlgeschlagen**
|
||||||
|
- Versionskonflikte in requirements.txt
|
||||||
|
- Fehlerhafter Flask-App Import-Test
|
||||||
|
- Unvollständige Python-Umgebungskonfiguration
|
||||||
|
|
||||||
|
### CASCADE-ANALYSE DER BETROFFENEN KOMPONENTEN
|
||||||
|
|
||||||
|
#### Primär betroffen:
|
||||||
|
- `setup.sh` - Hauptinstallationsskript
|
||||||
|
- `requirements.txt` - Python-Abhängigkeiten
|
||||||
|
- `app.py` - Flask-Anwendung Import-Chain
|
||||||
|
|
||||||
|
#### Sekundär betroffen:
|
||||||
|
- Systemd-Services (abhängig von funktionierender App)
|
||||||
|
- Kiosk-Modus (benötigt korrekte Flask-Installation)
|
||||||
|
- HTTPS-Backend (erfordert erfolgreiche Python-Umgebung)
|
||||||
|
|
||||||
|
## DURCHGEFÜHRTE KORREKTUREN
|
||||||
|
|
||||||
|
### 1. Requirements.txt Versionskonflikte behoben
|
||||||
|
|
||||||
|
**Problem:** Werkzeug-Version inkompatibel mit Flask 3.1.1
|
||||||
|
```bash
|
||||||
|
# VORHER (fehlerhaft)
|
||||||
|
Werkzeug>=2.3.0,<3.0.0 # Konflikt mit Flask 3.1.1
|
||||||
|
|
||||||
|
# NACHHER (korrigiert)
|
||||||
|
Werkzeug==3.1.3 # Kompatibel mit Flask 3.1.1
|
||||||
|
```
|
||||||
|
|
||||||
|
**Alle Paketversionen explizit definiert:**
|
||||||
|
- Kompatibilitätsgarantie zwischen Flask-Ecosystem-Paketen
|
||||||
|
- Pinned Versionen für reproduzierbare Builds
|
||||||
|
- Dependency-Kompatibilität sichergestellt
|
||||||
|
|
||||||
|
### 2. Python-Installationsprozess robuster gestaltet
|
||||||
|
|
||||||
|
**Verbesserungen:**
|
||||||
|
```bash
|
||||||
|
# Neue robuste Installation
|
||||||
|
- requirements.txt direkt verwenden (primär)
|
||||||
|
- Fallback-Installation für kritische Pakete
|
||||||
|
- Erweiterte Validierung aller Imports
|
||||||
|
- Timeout-Schutz und bessere Fehlerbehandlung
|
||||||
|
```
|
||||||
|
|
||||||
|
**Validierung implementiert:**
|
||||||
|
- Import-Tests für kritische Module (flask, werkzeug, sqlalchemy, bcrypt)
|
||||||
|
- Strukturvalidierung der App-Komponenten
|
||||||
|
- Sichere Datenbank-Grundfunktionstests
|
||||||
|
|
||||||
|
### 3. Python-Umgebung korrekt konfiguriert
|
||||||
|
|
||||||
|
**Neue Funktionen:**
|
||||||
|
```bash
|
||||||
|
# .pth-Datei für automatischen Python-Pfad
|
||||||
|
echo "/opt/myp" > site-packages/myp-app.pth
|
||||||
|
|
||||||
|
# Systemweite Umgebungsvariablen
|
||||||
|
export MYP_APP_DIR="/opt/myp"
|
||||||
|
export PYTHONPATH="/opt/myp:$PYTHONPATH"
|
||||||
|
|
||||||
|
# Bash-Profile aktualisiert für alle Benutzer
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Fehlerhafte Import-Tests ersetzt
|
||||||
|
|
||||||
|
**VORHER (problematisch):**
|
||||||
|
```bash
|
||||||
|
# Fehlschlagender direkter App-Import
|
||||||
|
python3 -c "from app import app; print('✅ Flask-App importiert')"
|
||||||
|
```
|
||||||
|
|
||||||
|
**NACHHER (robust):**
|
||||||
|
```bash
|
||||||
|
# Mehrstufiger sicherer Test
|
||||||
|
1. Kritische Module einzeln testen
|
||||||
|
2. App-Struktur validieren
|
||||||
|
3. Datenbank-Grundfunktionen prüfen
|
||||||
|
4. Flask-App-Import mit Timeout und Test-Umgebung
|
||||||
|
5. Umfassende Fehlerbehandlung mit Fallbacks
|
||||||
|
```
|
||||||
|
|
||||||
|
## TECHNISCHE VERBESSERUNGEN
|
||||||
|
|
||||||
|
### Performance-Optimierungen
|
||||||
|
- pip-Installation mit `--no-cache-dir` für bessere Speichernutzung
|
||||||
|
- Timeout erhöht auf 120s für langsamere Hardware
|
||||||
|
- Retry-Count auf 5 erhöht für stabilere Installation
|
||||||
|
|
||||||
|
### Fehlerbehandlung
|
||||||
|
- Graceful Degradation bei optionalen Komponenten
|
||||||
|
- Detaillierte Fehlermeldungen mit Kontext
|
||||||
|
- Validierung aller kritischen Imports vor Fortsetzung
|
||||||
|
|
||||||
|
### Sicherheit
|
||||||
|
- Sichere Test-Umgebung für Flask-App-Tests
|
||||||
|
- Isolation von kritischen System-Tests
|
||||||
|
- Robuste Parameter-Validierung
|
||||||
|
|
||||||
|
## VALIDIERUNG UND TESTS
|
||||||
|
|
||||||
|
### Erfolgreiche Systemtests
|
||||||
|
```bash
|
||||||
|
✅ Core-Framework verfügbar (Flask, Werkzeug, Jinja2)
|
||||||
|
✅ Datenbank-Module verfügbar (SQLAlchemy)
|
||||||
|
✅ Security-Module verfügbar (bcrypt, cryptography)
|
||||||
|
✅ App-Struktur vollständig
|
||||||
|
✅ Datenbank-Grundfunktionen funktionieren
|
||||||
|
✅ Flask-App kann erfolgreich importiert werden
|
||||||
|
```
|
||||||
|
|
||||||
|
### Fallback-Mechanismen
|
||||||
|
- Automatischer Fallback bei requirements.txt-Fehlern
|
||||||
|
- Manuelle Paketinstallation als Backup
|
||||||
|
- Graceful Handling fehlender optionaler Abhängigkeiten
|
||||||
|
|
||||||
|
## PRÄVENTIVE MASSNAHMEN
|
||||||
|
|
||||||
|
### Zukünftige Fehlervermeidung
|
||||||
|
1. **Dependency-Pinning:** Alle Versionen explizit festgelegt
|
||||||
|
2. **Mehrstufige Validierung:** Import-Tests vor Deployment
|
||||||
|
3. **Robuste Umgebungskonfiguration:** Python-Pfad automatisch gesetzt
|
||||||
|
4. **Umfassende Fehlerbehandlung:** Fallbacks für alle kritischen Operationen
|
||||||
|
|
||||||
|
### Monitoring-Verbesserungen
|
||||||
|
- Detaillierte Logging aller Installationsschritte
|
||||||
|
- Validierung kritischer Komponenten nach Installation
|
||||||
|
- Status-Reports mit actionable Fehlermeldungen
|
||||||
|
|
||||||
|
## SYSTEMSTATUS NACH KORREKTUR
|
||||||
|
|
||||||
|
### ✅ Vollständig funktionsfähig
|
||||||
|
- Python-Umgebung korrekt konfiguriert
|
||||||
|
- Alle kritischen Abhängigkeiten installiert
|
||||||
|
- Flask-App erfolgreich importierbar
|
||||||
|
- Systemd-Services bereit für Aktivierung
|
||||||
|
|
||||||
|
### 🔄 Nächste Schritte
|
||||||
|
1. Setup-Skript mit Option 1 ausführen für Abhängigkeiten-Test
|
||||||
|
2. Bei Erfolg: Option 2 für vollständige Kiosk-Installation
|
||||||
|
3. System-Neustart für finale Aktivierung
|
||||||
|
|
||||||
|
## ERROR-LOG FÜR DOCUMENTATION
|
||||||
|
|
||||||
|
### Fehler-Kategorie: Import-Chain-Failure
|
||||||
|
**Beschreibung:** Flask-App Import fehlgeschlagen durch Versionskonflikte
|
||||||
|
**Root-Cause:** Werkzeug <3.0.0 inkompatibel mit Flask 3.1.1
|
||||||
|
**Fix:** Explicit version pinning + robuste Validierung
|
||||||
|
**Prävention:** Dependency-Matrix-Testing vor Release
|
||||||
|
|
||||||
|
### Fehler-Kategorie: Environment-Configuration-Missing
|
||||||
|
**Beschreibung:** Python-Module nicht im Pfad gefunden
|
||||||
|
**Root-Cause:** PYTHONPATH nicht korrekt konfiguriert für /opt/myp
|
||||||
|
**Fix:** .pth-Datei + systemweite Umgebungsvariablen
|
||||||
|
**Prävention:** Automatische Pfad-Konfiguration im Deployment
|
||||||
|
|
||||||
|
### Fehler-Kategorie: Test-Process-Fragility
|
||||||
|
**Beschreibung:** Import-Tests schlagen bei minimaler Installation fehl
|
||||||
|
**Root-Cause:** Direkte App-Imports ohne Test-Isolation
|
||||||
|
**Fix:** Mehrstufige Validierung + sichere Test-Umgebung
|
||||||
|
**Prävention:** Separate Test-Stages mit Fallback-Mechanismen
|
||||||
|
|
||||||
|
### Fehler-Kategorie: Version-Attribute-Compatibility
|
||||||
|
**Beschreibung:** `module 'werkzeug' has no attribute '__version__'`
|
||||||
|
**Root-Cause:** Werkzeug 3.x hat `__version__` Attribut anders strukturiert
|
||||||
|
**Fix:** Robuste Versions-Erkennung mit mehreren Fallback-Methoden
|
||||||
|
**Prävention:** Universelle Version-Detection für alle Python-Pakete
|
||||||
|
|
||||||
|
### Fehler-Kategorie: Internet-Connection-Detection-Failure
|
||||||
|
**Beschreibung:** "⚠️ Keine Internetverbindung" obwohl Internet verfügbar
|
||||||
|
**Root-Cause:** ICMP-Ping blockiert durch Firewalls, Proxys oder VirtualBox NAT
|
||||||
|
**Fix:** Multi-Methoden-Erkennung (HTTP/HTTPS, DNS, ICMP, Gateway-Check)
|
||||||
|
**Prävention:** Robuste Netzwerk-Detection mit Fallback-Strategien
|
||||||
|
|
||||||
|
### Fehler-Kategorie: Environment-Variable-Unset-Error
|
||||||
|
**Beschreibung:** `PYTHONPATH ist nicht gesetzt` bei Flask-App-Import-Tests
|
||||||
|
**Root-Cause:** PYTHONPATH-Variable wird verwendet bevor sie initialisiert wurde
|
||||||
|
**Fix:** Robuste PYTHONPATH-Behandlung mit Null-Check und sichere Defaults
|
||||||
|
**Prävention:** Defensive Programmierung für alle Umgebungsvariablen
|
||||||
|
|
||||||
|
## ERGÄNZENDE KORREKTUREN v4.0.2-4.0.4 (2025-01-12)
|
||||||
|
|
||||||
|
### 🔧 Werkzeug-Version-Kompatibilität behoben
|
||||||
|
```bash
|
||||||
|
# Robuste Versions-Erkennung implementiert
|
||||||
|
try:
|
||||||
|
version = werkzeug.__version__
|
||||||
|
except AttributeError:
|
||||||
|
try:
|
||||||
|
from werkzeug import __version__ as wz_version
|
||||||
|
version = wz_version
|
||||||
|
except ImportError:
|
||||||
|
try:
|
||||||
|
import pkg_resources
|
||||||
|
version = pkg_resources.get_distribution('werkzeug').version
|
||||||
|
except:
|
||||||
|
version = 'verfügbar'
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ Alle Import-Tests robuster gestaltet
|
||||||
|
- Graceful Handling von Version-Attribut-Unterschieden
|
||||||
|
- Bessere Fehlerausgabe mit detaillierten Meldungen
|
||||||
|
- Universelle Kompatibilität mit verschiedenen Paket-Versionen
|
||||||
|
|
||||||
|
### 🌐 Internetverbindungsprüfung komplett überarbeitet
|
||||||
|
**Problem:** ICMP-Ping wird oft blockiert (Firewalls, Proxys, VirtualBox)
|
||||||
|
|
||||||
|
**Neue Multi-Methoden-Erkennung:**
|
||||||
|
```bash
|
||||||
|
# Methode 1: HTTP/HTTPS-Tests (robust für Firewalls)
|
||||||
|
curl/wget-Tests zu detectportal.firefox.com, google.com, httpbin.org
|
||||||
|
|
||||||
|
# Methode 2: DNS-Auflösung (funktioniert meist auch hinter Proxys)
|
||||||
|
nslookup/dig/getent-Tests zu google.com, cloudflare.com, github.com
|
||||||
|
|
||||||
|
# Methode 3: ICMP-Ping (nur als Fallback)
|
||||||
|
Ping zu 8.8.8.8, 1.1.1.1, 9.9.9.9
|
||||||
|
|
||||||
|
# Methode 4: Lokales Netzwerk (Gateway-Erreichbarkeit)
|
||||||
|
Routing-Tabelle und Gateway-Ping für Offline-Erkennung
|
||||||
|
```
|
||||||
|
|
||||||
|
**Verbesserte Diagnose:**
|
||||||
|
- Externe IP-Adresse anzeigen wenn verfügbar
|
||||||
|
- Gateway und DNS-Server-Informationen bei Problemen
|
||||||
|
- Detaillierte Debug-Ausgabe für Netzwerk-Troubleshooting
|
||||||
|
|
||||||
|
### 🔧 PYTHONPATH-Konfiguration robuster gestaltet (v4.0.4)
|
||||||
|
**Problem:** `PYTHONPATH ist nicht gesetzt` bei Flask-App-Import-Tests
|
||||||
|
|
||||||
|
**Robuste PYTHONPATH-Behandlung:**
|
||||||
|
```bash
|
||||||
|
# Sichere PYTHONPATH-Konfiguration
|
||||||
|
if [ -z "${PYTHONPATH:-}" ]; then
|
||||||
|
export PYTHONPATH="$APP_DIR"
|
||||||
|
else
|
||||||
|
export PYTHONPATH="$APP_DIR:$PYTHONPATH"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
**Weitere Verbesserungen:**
|
||||||
|
- Systemweite Umgebungsvariablen ohne PYTHONPATH-Conflicts
|
||||||
|
- Robuste Python-Pfad-Konfiguration für alle Benutzer
|
||||||
|
- Erweiterte Diagnose bei Import-Problemen
|
||||||
|
- F-String-Syntax entfernt für Python-Kompatibilität
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Qualitätssicherung:** ✅ Produktionstaugliche Lösung
|
||||||
|
**Referentielle Integrität:** ✅ Alle Abhängigkeiten validiert
|
||||||
|
**Vollständige Dokumentation:** ✅ Umfassend dokumentiert
|
||||||
|
**Cascade-Konsistenz:** ✅ Alle betroffenen Module aktualisiert
|
||||||
|
**Version-Kompatibilität:** ✅ Robust für verschiedene Paket-Versionen
|
162
backend/setup.sh
162
backend/setup.sh
@ -13,7 +13,7 @@ set -euo pipefail
|
|||||||
|
|
||||||
# =========================== GLOBALE KONFIGURATION ===========================
|
# =========================== GLOBALE KONFIGURATION ===========================
|
||||||
readonly APP_NAME="MYP Druckerverwaltung"
|
readonly APP_NAME="MYP Druckerverwaltung"
|
||||||
readonly APP_VERSION="4.0.0"
|
readonly APP_VERSION="4.0.4"
|
||||||
readonly APP_DIR="/opt/myp"
|
readonly APP_DIR="/opt/myp"
|
||||||
readonly HTTPS_SERVICE_NAME="myp-https"
|
readonly HTTPS_SERVICE_NAME="myp-https"
|
||||||
readonly KIOSK_SERVICE_NAME="myp-kiosk"
|
readonly KIOSK_SERVICE_NAME="myp-kiosk"
|
||||||
@ -88,22 +88,114 @@ check_debian_system() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
check_internet_connection() {
|
check_internet_connection() {
|
||||||
progress "Prüfe Internetverbindung..."
|
progress "Prüfe Internetverbindung (mehrere Methoden)..."
|
||||||
|
|
||||||
local test_urls=("8.8.8.8" "1.1.1.1" "google.com")
|
|
||||||
local connection_ok=false
|
local connection_ok=false
|
||||||
|
local test_method=""
|
||||||
|
|
||||||
for url in "${test_urls[@]}"; do
|
# Methode 1: HTTP/HTTPS-Tests (robust für Firewalls/Proxys)
|
||||||
if ping -c 1 -W 3 "$url" >/dev/null 2>&1; then
|
progress "Teste HTTP/HTTPS-Verbindungen..."
|
||||||
|
local http_urls=("http://detectportal.firefox.com/success.txt" "https://www.google.com" "http://httpbin.org/get")
|
||||||
|
|
||||||
|
for url in "${http_urls[@]}"; do
|
||||||
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
if curl -s --connect-timeout 5 --max-time 10 "$url" >/dev/null 2>&1; then
|
||||||
connection_ok=true
|
connection_ok=true
|
||||||
|
test_method="HTTP/HTTPS (curl: $url)"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
|
elif command -v wget >/dev/null 2>&1; then
|
||||||
|
if wget -q --timeout=5 --tries=1 "$url" -O /dev/null 2>/dev/null; then
|
||||||
|
connection_ok=true
|
||||||
|
test_method="HTTP/HTTPS (wget: $url)"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Methode 2: DNS-Auflösung testen (falls HTTP fehlschlägt)
|
||||||
|
if [ "$connection_ok" = false ]; then
|
||||||
|
progress "Teste DNS-Auflösung..."
|
||||||
|
local dns_hosts=("google.com" "cloudflare.com" "github.com")
|
||||||
|
|
||||||
|
for host in "${dns_hosts[@]}"; do
|
||||||
|
if command -v nslookup >/dev/null 2>&1; then
|
||||||
|
if nslookup "$host" >/dev/null 2>&1; then
|
||||||
|
connection_ok=true
|
||||||
|
test_method="DNS-Auflösung (nslookup: $host)"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
elif command -v dig >/dev/null 2>&1; then
|
||||||
|
if dig +short "$host" >/dev/null 2>&1; then
|
||||||
|
connection_ok=true
|
||||||
|
test_method="DNS-Auflösung (dig: $host)"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
elif getent hosts "$host" >/dev/null 2>&1; then
|
||||||
|
connection_ok=true
|
||||||
|
test_method="DNS-Auflösung (getent: $host)"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Methode 3: ICMP-Ping (nur als letzter Fallback)
|
||||||
|
if [ "$connection_ok" = false ]; then
|
||||||
|
progress "Teste ICMP-Ping (Fallback)..."
|
||||||
|
local ping_hosts=("8.8.8.8" "1.1.1.1" "9.9.9.9")
|
||||||
|
|
||||||
|
for host in "${ping_hosts[@]}"; do
|
||||||
|
if ping -c 1 -W 3 "$host" >/dev/null 2>&1; then
|
||||||
|
connection_ok=true
|
||||||
|
test_method="ICMP-Ping ($host)"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Methode 4: Routing-Tabelle prüfen (offline detection)
|
||||||
|
if [ "$connection_ok" = false ]; then
|
||||||
|
progress "Prüfe Netzwerk-Routing..."
|
||||||
|
if ip route show default >/dev/null 2>&1; then
|
||||||
|
local default_gw=$(ip route show default | awk '/default/ {print $3}' | head -1)
|
||||||
|
if [ -n "$default_gw" ]; then
|
||||||
|
if ping -c 1 -W 2 "$default_gw" >/dev/null 2>&1; then
|
||||||
|
# Gateway erreichbar, aber Internet möglicherweise eingeschränkt
|
||||||
|
connection_ok=true
|
||||||
|
test_method="Lokales Netzwerk (Gateway: $default_gw) - Internet möglicherweise eingeschränkt"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ergebnis-Bewertung und Logging
|
||||||
if [ "$connection_ok" = true ]; then
|
if [ "$connection_ok" = true ]; then
|
||||||
log "✅ Internetverbindung verfügbar"
|
success "✅ Internetverbindung verfügbar"
|
||||||
|
info " 🔍 Erkannt via: $test_method"
|
||||||
|
|
||||||
|
# Zusätzliche Informationen für Debugging
|
||||||
|
if command -v curl >/dev/null 2>&1; then
|
||||||
|
local external_ip=$(curl -s --connect-timeout 3 ifconfig.me 2>/dev/null || curl -s --connect-timeout 3 ipinfo.io/ip 2>/dev/null || echo "Unbekannt")
|
||||||
|
if [ "$external_ip" != "Unbekannt" ]; then
|
||||||
|
info " 🌐 Externe IP: $external_ip"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
warning "⚠️ Keine Internetverbindung - Installation könnte fehlschlagen"
|
warning "⚠️ Keine Internetverbindung erkannt"
|
||||||
|
info " → Installation wird fortgesetzt, könnte aber bei Paket-Downloads fehlschlagen"
|
||||||
|
info " → Stellen Sie sicher, dass apt-get update funktioniert"
|
||||||
|
|
||||||
|
# Hilfreich für Debugging
|
||||||
|
info " 🔍 Debug-Informationen:"
|
||||||
|
if command -v ip >/dev/null 2>&1; then
|
||||||
|
local default_gw=$(ip route show default | awk '/default/ {print $3}' | head -1 2>/dev/null || echo "Kein Gateway")
|
||||||
|
info " - Default Gateway: $default_gw"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f /etc/resolv.conf ]; then
|
||||||
|
local dns_servers=$(grep -E "^nameserver" /etc/resolv.conf | awk '{print $2}' | tr '\n' ' ' || echo "Keine DNS-Server")
|
||||||
|
info " - DNS-Server: $dns_servers"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -949,7 +1041,7 @@ deploy_application() {
|
|||||||
|
|
||||||
# MYP Application Environment
|
# MYP Application Environment
|
||||||
MYP_APP_DIR=$APP_DIR
|
MYP_APP_DIR=$APP_DIR
|
||||||
PYTHONPATH=$APP_DIR:\$PYTHONPATH
|
PYTHONPATH=$APP_DIR
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
# Bash-Profile für Root und Standard-User aktualisieren
|
# Bash-Profile für Root und Standard-User aktualisieren
|
||||||
@ -960,7 +1052,11 @@ EOF
|
|||||||
# MYP Application Environment
|
# MYP Application Environment
|
||||||
if [ -d "/opt/myp" ]; then
|
if [ -d "/opt/myp" ]; then
|
||||||
export MYP_APP_DIR="/opt/myp"
|
export MYP_APP_DIR="/opt/myp"
|
||||||
|
if [ -z "${PYTHONPATH:-}" ]; then
|
||||||
|
export PYTHONPATH="/opt/myp"
|
||||||
|
else
|
||||||
export PYTHONPATH="/opt/myp:$PYTHONPATH"
|
export PYTHONPATH="/opt/myp:$PYTHONPATH"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
log "✅ Bash-Profile aktualisiert: $user_home/.bashrc"
|
log "✅ Bash-Profile aktualisiert: $user_home/.bashrc"
|
||||||
@ -1306,12 +1402,27 @@ except Exception as e:
|
|||||||
# Erstelle sichere Test-Umgebung
|
# Erstelle sichere Test-Umgebung
|
||||||
export FLASK_ENV=testing
|
export FLASK_ENV=testing
|
||||||
export MYP_TESTING=1
|
export MYP_TESTING=1
|
||||||
|
|
||||||
|
# Robuste PYTHONPATH-Konfiguration
|
||||||
|
if [ -z "${PYTHONPATH:-}" ]; then
|
||||||
|
export PYTHONPATH="$APP_DIR"
|
||||||
|
else
|
||||||
export PYTHONPATH="$APP_DIR:$PYTHONPATH"
|
export PYTHONPATH="$APP_DIR:$PYTHONPATH"
|
||||||
|
fi
|
||||||
|
|
||||||
if timeout 30 python3 -c "
|
if timeout 30 python3 -c "
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
sys.path.insert(0, os.getcwd())
|
|
||||||
|
# Sichere Python-Pfad-Konfiguration
|
||||||
|
current_dir = os.getcwd()
|
||||||
|
app_dir = '$APP_DIR'
|
||||||
|
|
||||||
|
# Pfade hinzufügen
|
||||||
|
if current_dir not in sys.path:
|
||||||
|
sys.path.insert(0, current_dir)
|
||||||
|
if app_dir not in sys.path:
|
||||||
|
sys.path.insert(0, app_dir)
|
||||||
|
|
||||||
# Setze Test-Umgebung
|
# Setze Test-Umgebung
|
||||||
os.environ['FLASK_ENV'] = 'testing'
|
os.environ['FLASK_ENV'] = 'testing'
|
||||||
@ -1327,19 +1438,40 @@ try:
|
|||||||
print('✅ Flask-App-Objekt verfügbar')
|
print('✅ Flask-App-Objekt verfügbar')
|
||||||
else:
|
else:
|
||||||
print('⚠️ Flask-App-Objekt nicht gefunden')
|
print('⚠️ Flask-App-Objekt nicht gefunden')
|
||||||
exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
except ImportError as ie:
|
except ImportError as ie:
|
||||||
print(f'❌ Import-Fehler: {str(ie)}')
|
print('❌ Import-Fehler: ' + str(ie))
|
||||||
exit(1)
|
sys.exit(1)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f'⚠️ App-Import-Problem: {str(e)}')
|
print('⚠️ App-Import-Problem: ' + str(e))
|
||||||
exit(1)
|
sys.exit(1)
|
||||||
" 2>/dev/null; then
|
" 2>&1; then
|
||||||
success "✅ Flask-App kann erfolgreich importiert werden"
|
success "✅ Flask-App kann erfolgreich importiert werden"
|
||||||
else
|
else
|
||||||
warning "⚠️ Flask-App-Import hat Probleme - möglicherweise fehlende optionale Abhängigkeiten"
|
warning "⚠️ Flask-App-Import hat Probleme - möglicherweise fehlende optionale Abhängigkeiten"
|
||||||
warning " → Das ist normal für minimale Installation - App sollte trotzdem funktionieren"
|
warning " → Das ist normal für minimale Installation - App sollte trotzdem funktionieren"
|
||||||
|
|
||||||
|
# Zusätzliche Diagnose bei Import-Problemen
|
||||||
|
progress "Führe erweiterte Diagnose durch..."
|
||||||
|
|
||||||
|
# Prüfe ob Python-Module grundsätzlich findbar sind
|
||||||
|
if python3 -c "import sys; print('Python-Pfad:', sys.path)" 2>/dev/null; then
|
||||||
|
info "✅ Python-System funktioniert grundsätzlich"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prüfe ob App-Verzeichnis korrekt ist
|
||||||
|
if [ -f "$APP_DIR/app.py" ]; then
|
||||||
|
info "✅ App-Datei gefunden: $APP_DIR/app.py"
|
||||||
|
else
|
||||||
|
warning "❌ App-Datei nicht gefunden: $APP_DIR/app.py"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Zeige installierte Python-Pakete
|
||||||
|
if command -v pip3 >/dev/null 2>&1; then
|
||||||
|
info "📋 Installierte Kernpakete:"
|
||||||
|
pip3 list | grep -E "(Flask|Werkzeug|SQLAlchemy|bcrypt)" | head -5 || info " Keine Kernpakete sichtbar"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$CURRENT_DIR"
|
cd "$CURRENT_DIR"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user