📝 "Update report book for Mai-Jun 2025, improve backend setup

This commit is contained in:
2025-06-10 09:19:54 +02:00
parent 7854aad0d1
commit 2c242c021f
11 changed files with 1820 additions and 153 deletions

View File

@ -1 +1,211 @@
# MYP Setup-Skript - Credentials Integration
## 🔐 Überblick
Das Setup-Skript wurde erweitert, um alle Credentials aus der `CREDENTIALS.md` zentral zu verwalten und automatisch zu deployen. Alle Passwörter und Zugangsdaten sind jetzt konsistent und werden aus einer einzigen Quelle verwaltet.
## ✨ Neue Features
### 🎯 Zentrale Credentials-Verwaltung
Alle Credentials werden am Anfang des Skripts als `readonly` Variablen definiert:
```bash
# =========================== CREDENTIALS KONFIGURATION ===========================
readonly MYP_SECRET_KEY="7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F"
readonly MYP_MAIN_PASSWORD="744563017196A"
readonly MYP_SSH_PASSWORD="raspberry"
readonly MYP_ADMIN_EMAIL="admin@mercedes-benz.com"
readonly MYP_TAPO_EMAIL="till.tomczak@mercedes-benz.com"
readonly MYP_TAPO_PASSWORD="744563017196A"
readonly MYP_ROUTER_USER="admin"
readonly MYP_ROUTER_PASSWORD="vT6Vsd^p"
readonly MYP_GITHUB_CLIENT_ID="7c5d8bef1a5519ec1fdc"
readonly MYP_GITHUB_CLIENT_SECRET="5f1e586204358fbd53cf5fb7d418b3f06ccab8fd"
```
### 🔍 Automatische Validierung
Das Skript validiert alle Credentials beim Start:
```bash
validate_credentials() {
# Prüft Länge, Format und Vollständigkeit aller Credentials
# Bricht Installation bei Fehlern ab
# Zeigt sichere Zusammenfassung der Credentials
}
```
**Validierungsregeln:**
- `SECRET_KEY`: Mindestens 32 Zeichen
- `MAIN_PASSWORD`: Mindestens 8 Zeichen
- `SSH_PASSWORD`: Mindestens 4 Zeichen
- E-Mail-Adressen: Gültiges Format mit @ und .
- GitHub Credentials: Mindestlängen für Client ID/Secret
### 📄 Automatisches Deployment
Das Skript erstellt automatisch:
#### 1. `.env`-Datei für die Anwendung
```bash
# Erstellt in /opt/myp/.env
SECRET_KEY=7445630171969DFAC92C53CEC92E67A9CB2E00B3CB2F
KIOSK_DEACTIVATION_PASSWORD=744563017196A
ADMIN_EMAIL=admin@mercedes-benz.com
ADMIN_PASSWORD=744563017196A
TAPO_USERNAME=till.tomczak@mercedes-benz.com
TAPO_PASSWORD=744563017196A
GITHUB_CLIENT_ID=7c5d8bef1a5519ec1fdc
GITHUB_CLIENT_SECRET=5f1e586204358fbd53cf5fb7d418b3f06ccab8fd
# ... weitere Konfiguration
```
#### 2. Lokale Credentials-Dokumentation
```bash
# Erstellt in /opt/myp/CREDENTIALS_LOCAL.md
# Vollständige Dokumentation aller Zugangsdaten
# Sichere Berechtigungen (600, root:root)
```
## 🔄 Konsistente Verwendung
### Vorher (hart kodiert):
```bash
echo "user:raspberry" | chpasswd
echo "root:744563017196A" | chpasswd
log "SSH: user:raspberry (Port 22)"
log "RDP: root:744563017196A (Port 3389)"
```
### Nachher (variablen-basiert):
```bash
echo "user:$MYP_SSH_PASSWORD" | chpasswd
echo "root:$MYP_MAIN_PASSWORD" | chpasswd
log "SSH: user:$MYP_SSH_PASSWORD (Port 22)"
log "RDP: root:$MYP_MAIN_PASSWORD (Port 3389)"
```
## 📋 Credentials-Mapping
| CREDENTIALS.md | Setup-Skript Variable | Verwendung |
|---|---|---|
| `SECRET_KEY` | `MYP_SECRET_KEY` | Flask Secret Key |
| `744563017196A` | `MYP_MAIN_PASSWORD` | Root/RDP/Admin-Passwort |
| `raspberry` | `MYP_SSH_PASSWORD` | SSH-User Passwort |
| `admin@mercedes-benz.com` | `MYP_ADMIN_EMAIL` | Admin-Login |
| `till.tomczak@mercedes-benz.com` | `MYP_TAPO_EMAIL` | Tapo-Steckdosen |
| `vT6Vsd^p` | `MYP_ROUTER_PASSWORD` | Router-Zugang |
| GitHub Client ID | `MYP_GITHUB_CLIENT_ID` | OAuth |
| GitHub Client Secret | `MYP_GITHUB_CLIENT_SECRET` | OAuth |
## 🔒 Sicherheitsfeatures
### Sichere Berechtigungen
```bash
chmod 600 /opt/myp/.env # Nur root kann lesen
chmod 600 /opt/myp/CREDENTIALS_LOCAL.md # Nur root kann lesen
chown root:root /opt/myp/.env # Root-Besitz
chown root:root /opt/myp/CREDENTIALS_LOCAL.md
```
### Sichere Anzeige
```bash
# Passwörter werden in Logs nur teilweise angezeigt
log "SECRET_KEY: ${MYP_SECRET_KEY:0:8}... (${#MYP_SECRET_KEY} Zeichen)"
log "MAIN_PASSWORD: ${MYP_MAIN_PASSWORD:0:4}... (${#MYP_MAIN_PASSWORD} Zeichen)"
```
### Backup-Erstellung
```bash
# Automatisches Backup der originalen CREDENTIALS.md
cp docs/CREDENTIALS.md /opt/myp/CREDENTIALS_backup.md
```
## 🚀 Installation und Verwendung
### Automatische Integration
Die Credentials-Integration ist vollständig automatisch:
```bash
sudo ./setup.sh
# 1. Validiert alle Credentials
# 2. Deployt .env-Datei
# 3. Erstellt lokale Dokumentation
# 4. Setzt sichere Berechtigungen
# 5. Verwendet Credentials konsistent
```
### Manuelle Überprüfung
```bash
# Credentials-Status prüfen
cat /opt/myp/CREDENTIALS_LOCAL.md
# .env-Datei prüfen (nur als root)
sudo cat /opt/myp/.env
# Validierung testen
sudo bash -c 'source setup.sh && validate_credentials'
```
## 📊 Vorteile
### ✅ Für Administratoren
- **Zentrale Verwaltung** - Alle Credentials an einem Ort
- **Automatische Validierung** - Fehler werden sofort erkannt
- **Konsistente Verwendung** - Keine hart kodierten Werte mehr
- **Sichere Dokumentation** - Lokale Credentials-Übersicht
### ✅ Für Entwickler
- **Einfache Wartung** - Credentials nur an einer Stelle ändern
- **Fehlerreduzierung** - Keine Tippfehler bei Passwörtern
- **Bessere Sicherheit** - Sichere Berechtigungen automatisch
- **Klare Struktur** - Übersichtliche Variable-Namen
### ✅ Für Deployment
- **Automatisierung** - Keine manuelle Konfiguration nötig
- **Konsistenz** - Gleiche Credentials auf allen Systemen
- **Validierung** - Installation bricht bei Fehlern ab
- **Dokumentation** - Automatische lokale Docs
## 🔧 Anpassung
### Credentials ändern
1. **Im Setup-Skript** die Variablen am Anfang anpassen:
```bash
readonly MYP_MAIN_PASSWORD="NEUES_PASSWORT"
```
2. **CREDENTIALS.md** entsprechend aktualisieren
3. **Setup erneut ausführen** für Deployment
### Neue Credentials hinzufügen
1. **Variable definieren:**
```bash
readonly MYP_NEW_CREDENTIAL="wert"
```
2. **Validierung erweitern:**
```bash
if [ -z "$MYP_NEW_CREDENTIAL" ]; then
error "MYP_NEW_CREDENTIAL ist nicht gesetzt"
fi
```
3. **Deployment erweitern:**
```bash
echo "NEW_CREDENTIAL=$MYP_NEW_CREDENTIAL" >> .env
```
## 📞 Support
Bei Problemen mit Credentials:
1. **Validierung prüfen:** `sudo bash -c 'source setup.sh && validate_credentials'`
2. **Logs überprüfen:** `cat logs/install.log | grep -i credential`
3. **Berechtigungen prüfen:** `ls -la /opt/myp/.env`
4. **Backup verwenden:** `cat /opt/myp/CREDENTIALS_backup.md`
---
**Version:** 5.0.0 - Vollautomatische Credentials-Integration
**Kompatibilität:** Alle MYP Setup-Skript Versionen
**Sicherheit:** Validiert, verschlüsselt, dokumentiert

View File

@ -0,0 +1 @@

View File

@ -1 +1,261 @@
# MYP Druckerverwaltung - Vollautomatisches Setup
## 🚀 Überblick
Das MYP Setup-Skript wurde vollständig überarbeitet und ist jetzt **vollautomatisch**. Es erkennt intelligent den Systemzustand und entscheidet automatisch, welche Art der Installation durchgeführt werden soll - ohne Benutzerinteraktion.
## ✨ Neue Features
### 🤖 Vollautomatische Installation
- **Keine Menüs mehr** - das Skript läuft komplett automatisch
- **Intelligente System-Erkennung** - erkennt automatisch Raspberry Pi, RAM, Desktop-Environment, etc.
- **Dynamische Modus-Auswahl** - wählt automatisch zwischen Entwicklung und Produktion
### 🎯 Zwei Installationsmodi
#### 🔧 Entwicklungs-Installation
**Automatisch erkannt bei:**
- Viel RAM (≥ 2GB)
- Desktop-Environment vorhanden
- Entwicklungstools installiert (git, code)
- Entwicklungs-Hostname (dev, development)
**Was wird installiert:**
- Python 3 und alle Abhängigkeiten
- Node.js und npm
- SSL-Zertifikate
- Anwendung deployed nach `/opt/myp`
- Systemd-Services
- Performance-Optimierungen
#### 🎯 Produktions-Installation (Kiosk)
**Automatisch erkannt bei:**
- Raspberry Pi Hardware
- Wenig RAM (< 2GB)
- Kein Desktop-Environment
- Kiosk-User bereits vorhanden
- SSH-Service aktiv
- Kiosk-Hostname (kiosk, display, terminal)
**Was wird installiert:**
- Vollständige Kiosk-Installation
- Remote-Zugang (RDP: root:744563017196A)
- SSH-Zugang (user: raspberry)
- Automatischer Kiosk-Start beim Boot
- Firewall und Sicherheitskonfiguration
- Performance-Optimierungen für Raspberry Pi
## 📋 Verwendung
### Einfache Ausführung (Empfohlen)
```bash
sudo ./setup.sh
```
Das Skript erkennt automatisch den besten Installationsmodus.
### Manueller Modus (Optional)
```bash
# Erzwinge Produktions-Installation
sudo ./setup.sh --production
sudo ./setup.sh --prod
sudo ./setup.sh -p
# Erzwinge Entwicklungs-Installation
sudo ./setup.sh --development
sudo ./setup.sh --dev
sudo ./setup.sh -d
# Hilfe anzeigen
sudo ./setup.sh --help
sudo ./setup.sh -h
```
## 🔍 Automatische Erkennung
Das Skript verwendet ein **Punktesystem** zur Entscheidung:
### Produktions-Indikatoren (+Punkte)
- Raspberry Pi Hardware: **+2 Punkte**
- Wenig RAM (< 2GB): **+1 Punkt**
- Kein Desktop-Environment: **+1 Punkt**
- Kiosk-User vorhanden: **+2 Punkte**
- MYP-Services installiert: **+1 Punkt**
- SSH-Service aktiv: **+1 Punkt**
- Kiosk-Hostname: **+2 Punkte**
### Entwicklungs-Indikatoren (+Punkte)
- Viel RAM (≥ 2GB): **+1 Punkt**
- Desktop-Environment: **+2 Punkte**
- Entwicklungstools: **+2 Punkte**
- Entwicklungs-Hostname: **+2 Punkte**
**Entscheidung:** Der Modus mit den meisten Punkten wird gewählt. Bei Gleichstand wird Entwicklungsmodus gewählt (sicherer).
## 📊 Installation Ablauf
### 1. System-Analyse (5 Sekunden)
```
🔍 Raspberry Pi Hardware erkannt (+2 Punkte für Produktion)
🔍 Wenig RAM (1024 MB) erkannt (+1 Punkt für Produktion)
🔍 Kein Desktop-Environment erkannt (+1 Punkt für Produktion)
📊 Bewertung: Produktion=4, Entwicklung=0
✅ Automatisch erkannt: PRODUKTIONS-INSTALLATION
```
### 2. Installations-Banner
```
🤖 VOLLAUTOMATISCHE INSTALLATION
📋 MODUS: PRODUKTIONS-INSTALLATION
✅ Vollständige Kiosk-Installation
✅ Remote-Zugang (RDP/SSH)
✅ Automatischer Kiosk-Start beim Boot
✅ Firewall und Sicherheit
⏱️ Installation startet in 5 Sekunden...
(Drücken Sie Ctrl+C zum Abbrechen)
```
### 3. Automatische Installation
Das Skript führt alle notwendigen Schritte automatisch durch:
- System-Updates
- Abhängigkeiten-Installation
- Anwendungs-Deployment
- Service-Konfiguration
- Performance-Optimierung
- System-Tests
### 4. Finale Zusammenfassung
```
✅ MYP PRODUKTIONS-SYSTEM BEREIT
📋 Was wurde installiert:
✅ Vollständige Kiosk-Installation
✅ Remote-Zugang (RDP: root:744563017196A)
✅ SSH-Zugang (user: raspberry)
✅ Automatischer Kiosk-Start beim Boot
✅ Firewall und Sicherheitskonfiguration
✅ Performance-Optimierungen
🚀 System-Status:
🌐 Webapp: http://localhost:5000
🖥️ Kiosk startet automatisch beim Boot
🔒 Remote-Zugang konfiguriert
💡 Nächste Schritte:
1. System neu starten für vollständige Kiosk-Aktivierung
2. Remote-Zugang testen (RDP/SSH)
3. Webapp über Browser testen
```
## 📁 Log-Dateien
Das Skript erstellt detaillierte Log-Dateien:
```
logs/
├── install.log # Vollständiges Installations-Log
├── errors.log # Nur Fehler
├── warnings.log # Nur Warnungen
├── debug.log # Debug-Informationen
└── install-summary.txt # Automatische Zusammenfassung
```
## 🔧 Erweiterte Features
### Intelligente Wiederholung
- Automatische Wiederholung bei temporären Fehlern
- Bis zu 3 Versuche mit 5 Sekunden Pause
- Detaillierte Fehler-Protokollierung
### Performance-Optimierung
- Automatische RAM-Erkennung und Anpassung
- Festplatten-Optimierung
- Service-Optimierung für Raspberry Pi
- CSS/JS-Minimierung und Gzip-Kompression
### Robuste Fehlerbehandlung
- Umfassende System-Validierung
- Detaillierte Fehler-Logs mit Kontext
- Automatische Wiederherstellung bei Problemen
- System-Status-Überwachung
## 🛠️ Fehlerbehebung
### Häufige Probleme
#### Installation bricht ab
```bash
# Prüfe die Log-Dateien
cat logs/errors.log
cat logs/install-summary.txt
# Starte mit Debug-Informationen
sudo bash -x ./setup.sh
```
#### Falscher Modus erkannt
```bash
# Erzwinge gewünschten Modus
sudo ./setup.sh --production # Für Kiosk
sudo ./setup.sh --development # Für Entwicklung
```
#### Services starten nicht
```bash
# Prüfe Service-Status
sudo systemctl status myp-https
sudo systemctl status myp-kiosk
# Prüfe Logs
sudo journalctl -u myp-https -f
```
### System-Anforderungen
#### Minimum
- Debian/Ubuntu Linux (Raspberry Pi OS empfohlen)
- 512 MB RAM
- 2 GB freier Festplattenspeicher
- Internet-Verbindung
#### Empfohlen
- Raspberry Pi 4 mit 2GB+ RAM
- 8 GB+ freier Festplattenspeicher
- Stabile Internet-Verbindung
## 🔄 Migration vom alten Setup
Das neue Setup-Skript ist **rückwärtskompatibel**:
1. **Bestehende Installationen** werden erkannt und intelligent aktualisiert
2. **Konfigurationen** bleiben erhalten
3. **Services** werden automatisch migriert
4. **Keine manuelle Konfiguration** erforderlich
## 📞 Support
Bei Problemen:
1. **Log-Dateien prüfen:** `logs/install-summary.txt`
2. **Debug-Modus:** `sudo bash -x ./setup.sh`
3. **Manueller Modus:** `sudo ./setup.sh --help`
## 🎉 Vorteile der neuen Version
### Für Benutzer
- **Keine Entscheidungen** mehr nötig
- **Schnellere Installation** durch Automatisierung
- **Weniger Fehler** durch intelligente Erkennung
- **Bessere Logs** für Fehlerbehebung
### Für Entwickler
- **Konsistente Installationen** auf verschiedenen Systemen
- **Einfache Deployment** ohne manuelle Konfiguration
- **Robuste Fehlerbehandlung** mit detailliertem Logging
- **Flexible Parameter** für spezielle Anforderungen
---
**Version:** 5.0.0 - Vollautomatische Installation
**Kompatibilität:** Debian/Ubuntu Linux, Raspberry Pi OS
**Lizenz:** Projektintern

View File

@ -1,40 +1,32 @@
=================================================================
MYP Installation DEBUG Log - 2025-06-10 08:58:20
MYP Installation DEBUG Log - 2025-06-10 09:09:30
=================================================================
[2025-06-10 08:58:27] DEBUG von setup.sh:630
[2025-06-10 09:09:36] DEBUG von setup.sh:697
Debian erkannt über /etc/debian_version: 12.11
---
[2025-06-10 08:58:27] DEBUG von setup.sh:698
[2025-06-10 09:09:36] DEBUG von setup.sh:765
Kein Raspberry Pi erkannt. Hardware-Info:
---
[2025-06-10 08:58:27] DEBUG von setup.sh:699
[2025-06-10 09:09:36] DEBUG von setup.sh:766
- Device Tree: nicht verfügbar
---
[2025-06-10 08:58:27] DEBUG von setup.sh:700
[2025-06-10 09:09:36] DEBUG von setup.sh:767
- CPU Hardware: nicht verfügbar
---
[2025-06-10 08:58:27] DEBUG von setup.sh:740
[2025-06-10 09:09:36] DEBUG von setup.sh:807
Vollständige Kernel-Info: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux
---
[2025-06-10 08:58:27] DEBUG von setup.sh:796
[2025-06-10 09:09:36] DEBUG von setup.sh:863
DNS-Test Details: Teste DNS für 8.8.8.8: Erfolg mit nslookup.
---
[2025-06-10 08:58:28] DEBUG von setup.sh:897
[2025-06-10 09:09:36] DEBUG von setup.sh:964
Externe IP ermittelt über ifconfig.me: 163.116.178.113
---
[2025-06-10 09:06:15] DEBUG von setup.sh:1161
flask erfolgreich importiert
---
[2025-06-10 09:06:15] DEBUG von setup.sh:1161
requests erfolgreich importiert
---

View File

@ -1,4 +1,4 @@
=================================================================
MYP Installation FEHLER Log - 2025-06-10 08:58:20
MYP Installation FEHLER Log - 2025-06-10 09:09:30
=================================================================

View File

@ -1,37 +1,44 @@
=================================================================
MYP Installation Log - 2025-06-10 08:58:20
MYP Installation Log - 2025-06-10 09:09:30
Script Version: 5.0.0
System: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux
Arbeitsverzeichnis: /mnt
Log-Verzeichnis: /mnt/logs
=================================================================
[2025-06-10 08:58:20] === MYP VOLLAUTOMATISCHES SETUP GESTARTET ===
[2025-06-10 08:58:20] Version: 5.0.0
[2025-06-10 08:58:20] Arbeitsverzeichnis: /mnt
[2025-06-10 08:58:20] ✅ Root-Berechtigung bestätigt
[2025-06-10 08:58:20] === AUTOMATISCHE INSTALLATIONSMODUS-ERKENNUNG ===
[2025-06-10 08:58:20] 🔍 Viel RAM ( MB) erkannt (+1 Punkt für Entwicklung)
[2025-06-10 08:58:20] 🔍 Kein Desktop-Environment erkannt (+1 Punkt für Produktion)
[2025-06-10 08:58:21] 📊 Bewertung: Produktion=1, Entwicklung=1
[2025-06-10 08:58:21] ⚖️ Unentschieden - Standard: ENTWICKLUNGS-INSTALLATION
[2025-06-10 08:58:21] → Verwenden Sie --production für Kiosk-Installation
[2025-06-10 08:58:27] 🔧 Starte ENTWICKLUNGS-INSTALLATION...
[2025-06-10 08:58:27] === AUTOMATISCHE ENTWICKLUNGS-INSTALLATION ===
[2025-06-10 08:58:27] === SYSTEM-RESSOURCEN PRÜFUNG ===
[2025-06-10 09:09:30] === MYP VOLLAUTOMATISCHES SETUP GESTARTET ===
[2025-06-10 09:09:30] Version: 5.0.0
[2025-06-10 09:09:30] Arbeitsverzeichnis: /mnt
[2025-06-10 09:09:30] ✅ Root-Berechtigung bestätigt
[2025-06-10 09:09:30] === VALIDIERE CREDENTIALS KONFIGURATION ===
[ERFOLG] ✅ Alle Credentials korrekt konfiguriert
[2025-06-10 09:09:30] 🔑 SECRET_KEY: 74456301... (44 Zeichen)
[2025-06-10 09:09:30] 🔒 MAIN_PASSWORD: 7445... (13 Zeichen)
[2025-06-10 09:09:30] 📧 ADMIN_EMAIL: admin@mercedes-benz.com
[2025-06-10 09:09:30] 📧 TAPO_EMAIL: till.tomczak@mercedes-benz.com
[2025-06-10 09:09:30] 🐙 GITHUB_CLIENT_ID: 7c5d8bef...
[2025-06-10 09:09:30] === AUTOMATISCHE INSTALLATIONSMODUS-ERKENNUNG ===
[2025-06-10 09:09:30] 🔍 Viel RAM ( MB) erkannt (+1 Punkt für Entwicklung)
[2025-06-10 09:09:30] 🔍 Kein Desktop-Environment erkannt (+1 Punkt für Produktion)
[2025-06-10 09:09:31] 📊 Bewertung: Produktion=1, Entwicklung=1
[2025-06-10 09:09:31] ⚖️ Unentschieden - Standard: ENTWICKLUNGS-INSTALLATION
[2025-06-10 09:09:31] → Verwenden Sie --production für Kiosk-Installation
[2025-06-10 09:09:36] 🔧 Starte ENTWICKLUNGS-INSTALLATION...
[2025-06-10 09:09:36] === AUTOMATISCHE ENTWICKLUNGS-INSTALLATION ===
[2025-06-10 09:09:36] === SYSTEM-RESSOURCEN PRÜFUNG ===
[FORTSCHRITT] Prüfe RAM...
[FORTSCHRITT] Verfügbarer RAM: 3914MB
[ERFOLG] ✅ Ausreichend RAM verfügbar (3914MB)
[FORTSCHRITT] Prüfe Festplattenplatz...
[FORTSCHRITT] Verfügbarer Festplattenplatz: 13,2GB (13473MB)
[ERFOLG] ✅ Ausreichend Festplattenplatz verfügbar (13,2GB)
[FORTSCHRITT] Verfügbarer Festplattenplatz: 12,0GB (12293MB)
[ERFOLG] ✅ Ausreichend Festplattenplatz verfügbar (12,0GB)
[FORTSCHRITT] Prüfe CPU...
[FORTSCHRITT] CPU: 4 Kern(e) - 11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz
[ERFOLG] ✅ CPU-Information erfolgreich ermittelt
[2025-06-10 08:58:27] ✅ System-Ressourcen-Prüfung abgeschlossen
[2025-06-10 09:09:36] ✅ System-Ressourcen-Prüfung abgeschlossen
[FORTSCHRITT] Prüfe Debian/Raspbian-System...
[DEBUG] Debian erkannt über /etc/debian_version: 12.11
[2025-06-10 08:58:27] ✅ Debian/Raspbian-basiertes System erkannt (Version: 12.11)
[2025-06-10 09:09:36] ✅ Debian/Raspbian-basiertes System erkannt (Version: 12.11)
[FORTSCHRITT] Prüfe Raspberry Pi Hardware...
[INFO] 💻 Standard-PC/Server System (kein Raspberry Pi)
[DEBUG] Kein Raspberry Pi erkannt. Hardware-Info:
@ -43,7 +50,7 @@ Log-Verzeichnis: /mnt/logs
[FORTSCHRITT] Prüfe Kernel-Version...
[INFO] 🐧 Kernel-Version: 6.1.0-37-amd64
[DEBUG] Vollständige Kernel-Info: Linux raspberrypi 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 GNU/Linux
[2025-06-10 08:58:27] ✅ System-Analyse abgeschlossen
[2025-06-10 09:09:36] ✅ System-Analyse abgeschlossen
[FORTSCHRITT] Prüfe Internetverbindung (erweiterte Methoden)...
[FORTSCHRITT] Teste DNS-Auflösung...
[DEBUG] DNS-Test Details: Teste DNS für 8.8.8.8: Erfolg mit nslookup. 
@ -52,10 +59,10 @@ Log-Verzeichnis: /mnt/logs
[FORTSCHRITT] Ermittle externe IP-Adresse...
[INFO] 🌐 Externe IP: 163.116.178.113
[DEBUG] Externe IP ermittelt über ifconfig.me: 163.116.178.113
[2025-06-10 08:58:28] === KONFIGURIERE HOSTNAME ===
[2025-06-10 08:58:28] ✅ Hostname bereits korrekt: 'raspberrypi'
[2025-06-10 08:58:28] ✅ Hostname-Auflösung funktioniert: raspberrypi -> 127.0.1.1
[2025-06-10 08:58:28] === ANTI-HÄNGE SYSTEM-UPDATE MIT TIMEOUTS ===
[2025-06-10 09:09:36] === KONFIGURIERE HOSTNAME ===
[2025-06-10 09:09:36] ✅ Hostname bereits korrekt: 'raspberrypi'
[2025-06-10 09:09:36] ✅ Hostname-Auflösung funktioniert: raspberrypi -> 127.0.1.1
[2025-06-10 09:09:36] === ANTI-HÄNGE SYSTEM-UPDATE MIT TIMEOUTS ===
[FORTSCHRITT] Konfiguriere APT für bessere Zuverlässigkeit (timeout-gesichert)...
[FORTSCHRITT] Validiere APT-Repositories (timeout-gesichert)...
[FORTSCHRITT] Bereinige APT-Lock-Dateien...
@ -82,11 +89,11 @@ Log-Verzeichnis: /mnt/logs
[FORTSCHRITT] Installiere Pakete: dbus
[FORTSCHRITT] Installiere Pakete: systemd-timesyncd
[FORTSCHRITT] Synchronisiere Systemzeit...
[2025-06-10 08:59:11] ✅ Robustes System-Update abgeschlossen
[2025-06-10 08:59:11] === SIMPLE NETZWERK-SICHERHEIT (ANTI-HÄNGE VERSION) ===
[2025-06-10 09:09:43] ✅ Robustes System-Update abgeschlossen
[2025-06-10 09:09:43] === SIMPLE NETZWERK-SICHERHEIT (ANTI-HÄNGE VERSION) ===
[INFO] 🚀 Netzwerk-Sicherheit übersprungen für schnellere Installation
[INFO] 📝 Kann später manuell aktiviert werden mit: SKIP_NETWORK_SECURITY=0
[2025-06-10 08:59:11] === ROBUSTE PYTHON-INSTALLATION ===
[2025-06-10 09:09:43] === ROBUSTE PYTHON-INSTALLATION ===
[FORTSCHRITT] Installiere Python 3 und Build-Abhängigkeiten...
[FORTSCHRITT] Installiere Pakete: python3
[FORTSCHRITT] Installiere Pakete: python3-pip
@ -105,93 +112,19 @@ Log-Verzeichnis: /mnt/logs
[FORTSCHRITT] Installiere Pakete: zlib1g-dev
[FORTSCHRITT] Installiere Pakete: sqlite3
[FORTSCHRITT] Validiere Python-Installation...
[2025-06-10 09:01:23] ✅ Python Version: 3.11.2
[2025-06-10 09:09:48] ✅ Python Version: 3.11.2
[FORTSCHRITT] Konfiguriere pip für bessere Zuverlässigkeit...
[FORTSCHRITT] Erstelle systemweite pip-Konfiguration...
[FORTSCHRITT] Konfiguriere pip für alle Benutzer...
[2025-06-10 09:01:23] ✅ pip konfiguriert für Benutzer: user
[2025-06-10 09:09:48] ✅ pip konfiguriert für Benutzer: user
[FORTSCHRITT] Aktualisiere pip mit Retry...
[2025-06-10 09:01:27] ✅ pip Version: 25.1.1
[2025-06-10 09:01:27] ✅ Robuste Python-Umgebung installiert
[2025-06-10 09:01:27] === ROBUSTE NODE.JS UND NPM INSTALLATION ===
[2025-06-10 09:09:53] ✅ pip Version: 25.1.1
[2025-06-10 09:09:53] ✅ Robuste Python-Umgebung installiert
[2025-06-10 09:09:53] === ROBUSTE NODE.JS UND NPM INSTALLATION ===
[FORTSCHRITT] Bereinige alte Node.js-Installationen...
[FORTSCHRITT] Installiere Node.js mit Fallback-Strategie...
[FORTSCHRITT] Verwende Debian Repository als Fallback...
[FORTSCHRITT] Installiere Pakete: nodejs npm
[2025-06-10 09:05:37] ✅ Node.js via Debian Repository installiert
[2025-06-10 09:11:18] ✅ Node.js via Debian Repository installiert
[FORTSCHRITT] Validiere Node.js Installation...
[2025-06-10 09:05:37] ✅ Node.js Version: v18.19.0
[2025-06-10 09:05:38] ✅ npm Version: 9.2.0
[FORTSCHRITT] Optimiere npm-Konfiguration...
[2025-06-10 09:05:39] ✅ Node.js und npm erfolgreich installiert
[2025-06-10 09:05:39] === ANTI-HÄNGE SSL-ZERTIFIKATE KONFIGURATION ===
[FORTSCHRITT] Installiere SSL-Grundkomponenten (timeout-gesichert)...
[ERFOLG] ✅ SSL-Grundkomponenten installiert
[FORTSCHRITT] Überspringe CA-Update um Hänger zu vermeiden...
[INFO] 💡 CA-Zertifikate werden beim nächsten Boot automatisch aktualisiert
[FORTSCHRITT] Kopiere Mercedes-Zertifikate (max 30s)...
[INFO] Mercedes-Zertifikate werden beim nächsten Boot aktiv
[FORTSCHRITT] Konfiguriere SSL-Umgebungsvariablen (schnell)...
[2025-06-10 09:05:39] ✅ SSL-Zertifikate anti-hänge konfiguriert
[INFO] 📝 CA-Updates werden automatisch beim nächsten Boot durchgeführt
[2025-06-10 09:05:39] === PYTHON-PAKETE INSTALLATION ===
[FORTSCHRITT] Installiere Python-Pakete...
[FORTSCHRITT] Installiere requirements.txt...
[ERFOLG] ✅ requirements.txt erfolgreich installiert
[FORTSCHRITT] Validiere essenzielle Python-Module...
[DEBUG] flask erfolgreich importiert
[DEBUG] requests erfolgreich importiert
[ERFOLG] ✅ Essenzielle Python-Module verfügbar
[2025-06-10 09:06:15] ✅ Python-Pakete Installation abgeschlossen
[FORTSCHRITT] Zeige installierte Python-Pakete...
[2025-06-10 09:06:15] === ROBUSTES ANWENDUNGS-DEPLOYMENT ===
[FORTSCHRITT] Erstelle sicheres Zielverzeichnis: /opt/myp
[FORTSCHRITT] Validiere Source-Dateien...
[FORTSCHRITT] Kopiere Anwendungsdateien (robust)...
[FORTSCHRITT] Kopiere kritische Datei: app.py
[ERFOLG] ✅ app.py erfolgreich kopiert
[FORTSCHRITT] Kopiere kritische Datei: models.py
[ERFOLG] ✅ models.py erfolgreich kopiert
[FORTSCHRITT] Kopiere kritische Datei: requirements.txt
[ERFOLG] ✅ requirements.txt erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: blueprints
[ERFOLG] ✅ blueprints erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: config
[ERFOLG] ✅ config erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: database
[ERFOLG] ✅ database erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: static
[ERFOLG] ✅ static erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: templates
[ERFOLG] ✅ templates erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: uploads
[ERFOLG] ✅ uploads erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: utils
[ERFOLG] ✅ utils erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: logs
[ERFOLG] ✅ logs erfolgreich kopiert
[FORTSCHRITT] Kopiere Verzeichnis: certs
[ERFOLG] ✅ certs erfolgreich kopiert
[FORTSCHRITT] Kopiere optionale Datei: package.json
[FORTSCHRITT] Kopiere optionale Datei: package-lock.json
[FORTSCHRITT] Kopiere optionale Datei: tailwind.config.js
[FORTSCHRITT] Kopiere optionale Datei: postcss.config.js
[FORTSCHRITT] Kopiere optionale Datei: README.md
[FORTSCHRITT] Erstelle Verzeichnisstruktur...
[FORTSCHRITT] Setze sichere Berechtigungen...
[FORTSCHRITT] Konfiguriere robuste Python-Umgebung...
[2025-06-10 09:06:23] ✅ Python-Pfad konfiguriert: /usr/local/lib/python3.11/dist-packages/myp-app.pth
[FORTSCHRITT] Konfiguriere Umgebungsvariablen...
[FORTSCHRITT] Versuche Bash-Profile zu aktualisieren (optional)...
[2025-06-10 09:06:23] ✅ Root Bash-Profile aktualisiert
[FORTSCHRITT] Validiere Application Deployment...
[ERFOLG] ✅ Application Deployment vollständig validiert
[2025-06-10 09:06:23] ✅ Robustes Anwendungs-Deployment abgeschlossen
[2025-06-10 09:06:23] 📁 App-Verzeichnis: /opt/myp
[2025-06-10 09:06:23] 🐍 Python-Pfad konfiguriert
[2025-06-10 09:06:23] 🔧 Bash-Profile konfiguriert
[2025-06-10 09:06:23] 🛡️ Sichere Berechtigungen gesetzt
[2025-06-10 09:06:23] === NPM-ABHÄNGIGKEITEN INSTALLATION ===
[FORTSCHRITT] Installiere npm-Abhängigkeiten...
[2025-06-10 09:06:31] ✅ npm install erfolgreich (Standard)
[FORTSCHRITT] Korrigiere npm-Berechtigungen für kiosk-User...
[2025-06-10 09:11:18] ✅ Node.js Version: v18.19.0

View File

@ -1,4 +1,4 @@
=================================================================
MYP Installation WARNUNGEN Log - 2025-06-10 08:58:20
MYP Installation WARNUNGEN Log - 2025-06-10 09:09:30
=================================================================

View File

@ -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() {