🎉 Optimierung der RDP-Server-Installation und Firewall-Konfiguration im Backend 🛠️. Vereinfachte Installation von xrdp und XFCE, verbesserte Fehlerbehandlung und Validierung der Firewall-Einstellungen. Aktualisierte Logik zur Überprüfung des Dienststatus und zur Konfiguration von Netzwerkquellen.
This commit is contained in:
parent
7b37d54e59
commit
fc6ba6e87e
@ -16,10 +16,8 @@ sudo ./setup.sh
|
||||
```
|
||||
|
||||
**Installationsoptionen**:
|
||||
1. **Nur Abhängigkeiten installieren** - System vorbereiten ohne Kiosk-Modus
|
||||
2. **Finale Kiosk-Installation** - Vollständige Kiosk-Konfiguration
|
||||
3. **Nur Services installieren** - Systemd-Services aktualisieren
|
||||
4. **System-Test** - Funktionalität überprüfen
|
||||
1. **Abhängigkeiten installieren** - System für manuelles Testen vorbereiten
|
||||
2. **Vollständige Kiosk-Installation** - Automatischer Kiosk-Modus mit Remote-Zugang
|
||||
|
||||
**Nach der Installation**: System mit `sudo reboot` neustarten für automatischen Kiosk-Modus.
|
||||
|
||||
@ -64,6 +62,7 @@ python app.py --debug
|
||||
- **Chromium-Vollbildmodus** ohne Desktop-Environment
|
||||
- **Automatischer Login** und Browser-Start
|
||||
- **Watchdog-Überwachung** für Systemstabilität
|
||||
- **Remote-Zugang** via SSH und RDP mit Firewall-Schutz
|
||||
- **Responsive Design** für Desktop-Nutzung
|
||||
|
||||
### Sicherheit
|
||||
@ -71,6 +70,9 @@ python app.py --debug
|
||||
- **CSRF-Schutz** und Session-Management
|
||||
- **Rate-Limiting** und Eingabevalidierung
|
||||
- **Systemd-Service-Isolation**
|
||||
- **IPv6 vollständig deaktiviert** für erhöhte Sicherheit
|
||||
- **IP-Spoofing-Schutz** und DDoS-Abwehr
|
||||
- **TCP-Optimierungen** und RFC-Compliance
|
||||
|
||||
## 🏗️ Architektur
|
||||
|
||||
@ -144,18 +146,14 @@ backend/
|
||||
sudo ./setup.sh
|
||||
|
||||
# Menüoptionen:
|
||||
# 1. Nur Abhängigkeiten installieren und System vorbereiten
|
||||
# 2. Finale Installation mit kompletter Kiosk-Modus-Konfiguration
|
||||
# 3. Nur Services installieren/aktualisieren
|
||||
# 4. System-Test durchführen
|
||||
# 5. Beenden
|
||||
# 1. Abhängigkeiten installieren für manuelles Testen
|
||||
# 2. Vollständige Kiosk-Installation mit Remote-Zugang
|
||||
# 3. Beenden
|
||||
```
|
||||
|
||||
**Installationsmodi**:
|
||||
- **Option 1**: Ideal für Entwicklung und erste Tests
|
||||
- **Option 2**: Vollständige Produktionsinstallation
|
||||
- **Option 3**: Service-Updates ohne Systemänderungen
|
||||
- **Option 4**: Diagnose und Wartung
|
||||
- **Option 1**: Ideal für Entwicklung, manuelle Tests und Debugging
|
||||
- **Option 2**: Vollständige Produktionsinstallation mit automatischem Kiosk-Start
|
||||
|
||||
### Option 2: Manuelle Installation
|
||||
|
||||
@ -209,6 +207,10 @@ sudo systemctl enable myp-kiosk.service
|
||||
### Netzwerk-Zugriff
|
||||
- **HTTPS**: `https://<raspberry-pi-ip>:443`
|
||||
|
||||
### Remote-Zugang (falls konfiguriert)
|
||||
- **SSH**: `ssh user@<raspberry-pi-ip>` (Passwort: `raspberry`)
|
||||
- **RDP**: `<raspberry-pi-ip>:3389` (Benutzer: `root`, Passwort: `744563017196A`)
|
||||
|
||||
### Standard-Anmeldedaten
|
||||
- **Benutzername**: `admin`
|
||||
- **Passwort**: `admin123`
|
||||
@ -271,7 +273,7 @@ curl -k https://localhost:443
|
||||
openssl s_client -connect localhost:443 -servername localhost
|
||||
|
||||
# Automatische Tests mit setup.sh
|
||||
sudo ./setup.sh # Option 4: System-Test
|
||||
sudo ./setup.sh # Option 5: System-Test
|
||||
```
|
||||
|
||||
### Log-Dateien
|
||||
@ -401,7 +403,7 @@ sudo journalctl -u kiosk-watchdog -f
|
||||
|
||||
### Support
|
||||
Bei Problemen:
|
||||
1. **System-Test durchführen**: `sudo ./setup.sh` → Option 4
|
||||
1. **System-Test durchführen**: `sudo ./setup.sh` → Option 5
|
||||
2. **Log-Bundle erstellen**:
|
||||
```bash
|
||||
sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \
|
||||
|
Binary file not shown.
Binary file not shown.
@ -2,18 +2,19 @@
|
||||
|
||||
## Übersicht der Änderungen
|
||||
|
||||
Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, benutzerfreundliches Setup-System.
|
||||
Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges, benutzerfreundliches Setup-System mit **vereinfachten 2 Installationsmodi**.
|
||||
|
||||
## 🔄 Strukturelle Änderungen
|
||||
|
||||
### Neue Dateien
|
||||
|
||||
- **`setup.sh`** - Konsolidiertes Hauptinstallationsskript mit Menüführung
|
||||
- **`setup.sh`** - Konsolidiertes Hauptinstallationsskript mit **2 Hauptoptionen**
|
||||
- **`systemd/`** - Neues Verzeichnis für alle systemd-Service-Dateien
|
||||
- `systemd/myp-https.service`
|
||||
- `systemd/myp-kiosk.service`
|
||||
- `systemd/kiosk-watchdog.service`
|
||||
- `systemd/kiosk-watchdog-python.service`
|
||||
- `systemd/myp-firewall.service` - **Erweiterte Firewall-Konfiguration**
|
||||
- **`docs/SETUP_ANLEITUNG.md`** - Detaillierte Anleitung für das neue Setup-System
|
||||
|
||||
### Entfernte Dateien
|
||||
@ -27,49 +28,50 @@ Diese Version konsolidiert alle bisherigen Installationsskripte in ein einziges,
|
||||
- **`README.md`** - Vollständig überarbeitet für neues Setup-System
|
||||
- **Version erhöht auf 4.0.0**
|
||||
|
||||
## 🚀 Neue Features
|
||||
## 🔄 Neue Features
|
||||
|
||||
### Menügeführte Installation
|
||||
### Vereinfachte Installation
|
||||
Das neue `setup.sh` bietet **nur 2 Hauptoptionen** für maximale Benutzerfreundlichkeit:
|
||||
|
||||
Das neue `setup.sh` bietet vier verschiedene Installationsmodi:
|
||||
1. **Abhängigkeiten installieren für manuelles Testen**
|
||||
- Vollständige Systemvorbereitung
|
||||
- Alle Abhängigkeiten installiert
|
||||
- Anwendung deployed und getestet
|
||||
- Bereit für manuelle Entwicklung
|
||||
- **Ideal für**: Entwicklung, Tests, Debugging
|
||||
|
||||
1. **Nur Abhängigkeiten installieren**
|
||||
2. **Vollständige Kiosk-Installation mit Remote-Zugang**
|
||||
- **Automatischer Kiosk-Modus** beim Boot
|
||||
- **SSH-Zugang**: `user:raspberry`
|
||||
- **RDP-Zugang**: `root:744563017196A` mit XFCE
|
||||
- **Erweiterte Firewall**: 192.168.0.0/16 + localhost + m040tbaraspi001
|
||||
- **Automatischer Login** und Browser-Start
|
||||
- **Ideal für**: Produktionsumgebungen, finale Deployment
|
||||
|
||||
- Python, Node.js, SSL-Zertifikate
|
||||
- Anwendungsdeployment
|
||||
- Minimaler Funktionstest
|
||||
- Ideal für Entwicklung
|
||||
2. **Finale Kiosk-Installation**
|
||||
### Erweiterte Firewall-Konfiguration
|
||||
- **Netzwerk-Bereich**: `192.168.0.0/16` (erweitert von /24)
|
||||
- **Localhost-Support**: IPv4 und IPv6
|
||||
- **Hostname-Integration**: Automatische Erkennung lokaler und Remote-Hostnames
|
||||
- **Spezifischer Remote-Host**: `m040tbaraspi001`
|
||||
- **Automatische Konfiguration** beim Systemstart
|
||||
|
||||
- Vollständige Produktionsinstallation
|
||||
- Desktop-Environment-Entfernung
|
||||
- Kiosk-Benutzer-Setup
|
||||
- Service-Aktivierung
|
||||
3. **Nur Services installieren**
|
||||
### Automatischer Kiosk-Start
|
||||
- **Vollautomatische Konfiguration** ohne manuelle Eingriffe
|
||||
- **X-Server-Autostart** beim Login
|
||||
- **Browser-Autostart** mit HTTPS-Backend-Erkennung
|
||||
- **Robuste Fehlerbehandlung** und Fallback-Mechanismen
|
||||
- **Optimierte Performance** für Kiosk-Umgebungen
|
||||
|
||||
- Service-Updates ohne Systemänderungen
|
||||
- Systemd-Konfiguration neu laden
|
||||
- Optional: Services aktivieren
|
||||
4. **System-Test**
|
||||
|
||||
- HTTPS-Verbindungstest
|
||||
- SSL-Zertifikat-Validierung
|
||||
- Service-Status-Überprüfung
|
||||
- Systemressourcen-Monitoring
|
||||
|
||||
### Verbesserte Modularität
|
||||
|
||||
- **Getrennte Installationsphasen** für bessere Kontrolle
|
||||
- **Fallback-Mechanismen** für robuste Installation
|
||||
- **Intelligente Abhängigkeitserkennung**
|
||||
- **Automatische Fehlerbehandlung**
|
||||
|
||||
### Erweiterte Logging-Funktionen
|
||||
|
||||
- **Farbkodierte Ausgabe** für bessere Lesbarkeit
|
||||
- **Detailliertes Installationslog** (`/var/log/myp-install.log`)
|
||||
- **Strukturierte Fehlermeldungen**
|
||||
- **Fortschrittsanzeigen**
|
||||
### Erweiterte Netzwerk-Sicherheit
|
||||
- **IPv6 vollständig deaktiviert** auf allen Ebenen (GRUB, Kernel, Firewall)
|
||||
- **IP-Spoofing-Schutz** mit Reverse Path Filtering
|
||||
- **SYN-Flood-Schutz** mit optimierten TCP-Einstellungen
|
||||
- **DDoS-Abwehr** durch Broadcast-Ping-Schutz
|
||||
- **TCP-RFC-Compliance** verhindert aggressive Paketwiederholungen
|
||||
- **Optimierte Netzwerk-Performance** durch TCP-Window-Skalierung
|
||||
- **Anti-Fingerprinting** durch deaktivierte TCP-Timestamps
|
||||
- **Verdächtige Pakete werden geloggt** (Martian-Pakete)
|
||||
- **Paketweiterleitung deaktiviert** (kein Router-Verhalten)
|
||||
|
||||
## 🔧 Technische Verbesserungen
|
||||
|
||||
|
@ -1 +1,471 @@
|
||||
|
||||
# MYP Druckerverwaltung - Debian/Linux Kiosk-Installation
|
||||
|
||||
## Übersicht
|
||||
|
||||
Diese Anleitung beschreibt die Installation der MYP Druckerverwaltung als vollständigen Kiosk-Modus auf Debian/Linux-Systemen (insbesondere Raspberry Pi OS). Das System wird für den Desktop-Modus optimiert und läuft mit HTTPS auf Port 443.
|
||||
|
||||
## Systemanforderungen
|
||||
|
||||
### Zielplattform
|
||||
- **Debian/Raspbian** (Raspberry Pi OS empfohlen)
|
||||
- **Kein Windows-Support** - Windows dient nur als Entwicklungsumgebung
|
||||
- **Desktop-Modus** - Responsiv, aber keine Touch-Optimierung
|
||||
- **Chromium-Kiosk-Modus** für die Anzeige
|
||||
|
||||
### Hardware-Anforderungen
|
||||
- Raspberry Pi 4 (empfohlen) oder vergleichbares Debian-System
|
||||
- Mindestens 2GB RAM
|
||||
- 16GB SD-Karte oder größer
|
||||
- Netzwerkverbindung (Ethernet oder WLAN)
|
||||
- Monitor mit HDMI-Anschluss
|
||||
|
||||
## Schnellinstallation
|
||||
|
||||
### 1. Repository klonen
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd backend
|
||||
```
|
||||
|
||||
### 2. Installationsskript ausführen
|
||||
```bash
|
||||
sudo chmod +x combined.sh
|
||||
sudo ./combined.sh
|
||||
```
|
||||
|
||||
### 3. Installationsoptionen
|
||||
Das Skript bietet folgende Optionen:
|
||||
|
||||
1. **System-Abhängigkeiten installieren**
|
||||
- Python 3, Node.js, npm, SSL-Zertifikate
|
||||
- Verwendet `pip install --break-system-packages`
|
||||
- Kein virtuelles Environment
|
||||
|
||||
2. **VOLLSTÄNDIGER KIOSK-MODUS (HTTPS Port 443)**
|
||||
- ⚠️ **ENTFERNT ALLE DESKTOP-ENVIRONMENTS!**
|
||||
- Installiert minimale X11-Umgebung
|
||||
- Erstellt SSL-Zertifikate automatisch
|
||||
- Konfiguriert Autologin und Chromium-Kiosk
|
||||
- **NEUSTART ERFORDERLICH!**
|
||||
|
||||
## Detaillierte Installation
|
||||
|
||||
### Schritt 1: System vorbereiten
|
||||
|
||||
```bash
|
||||
# Als Root ausführen
|
||||
sudo su
|
||||
|
||||
# System aktualisieren
|
||||
apt-get update && apt-get upgrade -y
|
||||
|
||||
# Grundlegende Tools installieren
|
||||
apt-get install -y curl wget git nano htop
|
||||
```
|
||||
|
||||
### Schritt 2: Abhängigkeiten installieren
|
||||
|
||||
Das Installationsskript installiert automatisch:
|
||||
|
||||
#### Python-Umgebung
|
||||
- Python 3.x
|
||||
- pip (neueste Version)
|
||||
- Entwicklungstools (build-essential, libssl-dev, etc.)
|
||||
|
||||
#### Node.js und npm
|
||||
- Node.js LTS
|
||||
- npm (neueste kompatible Version)
|
||||
- TailwindCSS und Frontend-Dependencies
|
||||
|
||||
#### Python-Pakete
|
||||
```bash
|
||||
# Automatisch installiert mit --break-system-packages
|
||||
Flask==3.1.1
|
||||
Flask-Login==0.6.3
|
||||
Flask-WTF==1.2.1
|
||||
SQLAlchemy==2.0.36
|
||||
bcrypt==4.2.1
|
||||
cryptography==44.0.0
|
||||
Werkzeug==3.1.3
|
||||
requests==2.32.3
|
||||
psutil==6.1.1
|
||||
gunicorn==23.0.0
|
||||
```
|
||||
|
||||
### Schritt 3: SSL-Zertifikate
|
||||
|
||||
#### Automatische Generierung
|
||||
Das System generiert automatisch selbstsignierte SSL-Zertifikate:
|
||||
|
||||
```bash
|
||||
# Zertifikate werden erstellt in:
|
||||
/opt/myp/certs/localhost/localhost.crt
|
||||
/opt/myp/certs/localhost/localhost.key
|
||||
|
||||
# Automatisch zum System CA-Store hinzugefügt:
|
||||
/usr/local/share/ca-certificates/localhost.crt
|
||||
```
|
||||
|
||||
#### Manuelle Zertifikat-Generierung
|
||||
```bash
|
||||
# Falls erforderlich, manuell generieren:
|
||||
sudo python3 -c "
|
||||
import sys; sys.path.insert(0, '/opt/myp')
|
||||
from utils.ssl_config import ensure_ssl_certificates
|
||||
ensure_ssl_certificates('/opt/myp', True)
|
||||
"
|
||||
```
|
||||
|
||||
### Schritt 4: Systemd-Services
|
||||
|
||||
#### HTTPS Backend-Service
|
||||
```bash
|
||||
# Service-Datei: /etc/systemd/system/myp-https.service
|
||||
sudo systemctl enable myp-https.service
|
||||
sudo systemctl start myp-https.service
|
||||
|
||||
# Status prüfen
|
||||
sudo systemctl status myp-https.service
|
||||
```
|
||||
|
||||
#### Kiosk-Browser-Service
|
||||
```bash
|
||||
# Service-Datei: /etc/systemd/system/myp-kiosk.service
|
||||
sudo systemctl enable myp-kiosk.service
|
||||
|
||||
# Wird automatisch nach Autologin gestartet
|
||||
```
|
||||
|
||||
### Schritt 5: Kiosk-Konfiguration
|
||||
|
||||
#### Autologin einrichten
|
||||
```bash
|
||||
# Getty-Service für automatischen Login
|
||||
# Konfiguration in: /etc/systemd/system/getty@tty1.service.d/override.conf
|
||||
|
||||
[Service]
|
||||
ExecStart=
|
||||
ExecStart=-/sbin/agetty --autologin kiosk --noclear %I $TERM
|
||||
```
|
||||
|
||||
#### Browser-Konfiguration
|
||||
```bash
|
||||
# Chromium-Kiosk startet automatisch mit:
|
||||
# - Vollbildmodus
|
||||
# - SSL-Zertifikat-Ignorierung für localhost
|
||||
# - Optimierte Performance-Einstellungen
|
||||
# - URL: https://localhost:443
|
||||
```
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Netzwerk-Zugriff
|
||||
|
||||
#### HTTPS-URLs
|
||||
- **Lokal**: `https://localhost:443`
|
||||
- **Netzwerk**: `https://<raspberry-pi-ip>:443`
|
||||
|
||||
#### Firewall (falls aktiviert)
|
||||
```bash
|
||||
# Port 443 öffnen
|
||||
sudo ufw allow 443/tcp
|
||||
```
|
||||
|
||||
### SSL-Zertifikat für Netzwerk-Zugriff
|
||||
|
||||
Für Zugriff von anderen Geräten im Netzwerk:
|
||||
|
||||
```bash
|
||||
# Zertifikat mit IP-Adresse generieren
|
||||
sudo python3 -c "
|
||||
import sys; sys.path.insert(0, '/opt/myp')
|
||||
from utils.ssl_config import SSLCertificateManager
|
||||
manager = SSLCertificateManager('/opt/myp')
|
||||
manager.generate_ssl_certificate(force_regenerate=True)
|
||||
"
|
||||
```
|
||||
|
||||
### Anwendungskonfiguration
|
||||
|
||||
#### Datenbank
|
||||
- SQLite-Datenbank in `/opt/myp/database/`
|
||||
- Automatische Backups in `/opt/myp/database/backups/`
|
||||
|
||||
#### Logs
|
||||
- Anwendungslogs in `/opt/myp/logs/`
|
||||
- Systemd-Logs: `journalctl -u myp-https -f`
|
||||
|
||||
#### Uploads
|
||||
- Dateien in `/opt/myp/uploads/`
|
||||
- Temporäre Dateien in `/opt/myp/uploads/temp/`
|
||||
|
||||
## Wartung und Überwachung
|
||||
|
||||
### Service-Management
|
||||
|
||||
```bash
|
||||
# HTTPS-Service
|
||||
sudo systemctl start myp-https.service
|
||||
sudo systemctl stop myp-https.service
|
||||
sudo systemctl restart myp-https.service
|
||||
sudo systemctl status myp-https.service
|
||||
|
||||
# Kiosk-Service
|
||||
sudo systemctl start myp-kiosk.service
|
||||
sudo systemctl stop myp-kiosk.service
|
||||
sudo systemctl status myp-kiosk.service
|
||||
|
||||
# Logs anzeigen
|
||||
sudo journalctl -u myp-https -f
|
||||
sudo journalctl -u myp-kiosk -f
|
||||
```
|
||||
|
||||
### Watchdog-Service
|
||||
|
||||
Der Watchdog-Service überwacht automatisch:
|
||||
- HTTPS Backend-Erreichbarkeit
|
||||
- SSL-Zertifikat-Gültigkeit
|
||||
- Kiosk-Browser-Status
|
||||
- Systemressourcen
|
||||
|
||||
```bash
|
||||
# Watchdog-Service verwalten
|
||||
sudo systemctl enable kiosk-watchdog.service
|
||||
sudo systemctl start kiosk-watchdog.service
|
||||
|
||||
# Watchdog-Logs
|
||||
sudo tail -f /var/log/kiosk-watchdog.log
|
||||
```
|
||||
|
||||
### System-Tests
|
||||
|
||||
```bash
|
||||
# HTTPS-Erreichbarkeit testen
|
||||
curl -k https://localhost:443
|
||||
|
||||
# SSL-Zertifikat prüfen
|
||||
openssl s_client -connect localhost:443 -servername localhost
|
||||
|
||||
# Service-Status prüfen
|
||||
sudo systemctl is-active myp-https
|
||||
sudo systemctl is-active myp-kiosk
|
||||
```
|
||||
|
||||
## Fehlerbehebung
|
||||
|
||||
### Häufige Probleme
|
||||
|
||||
#### 1. HTTPS nicht erreichbar
|
||||
```bash
|
||||
# Service-Status prüfen
|
||||
sudo systemctl status myp-https.service
|
||||
|
||||
# Logs überprüfen
|
||||
sudo journalctl -u myp-https -n 50
|
||||
|
||||
# SSL-Zertifikate neu generieren
|
||||
sudo python3 /opt/myp/utils/ssl_config.py /opt/myp --force
|
||||
sudo systemctl restart myp-https.service
|
||||
```
|
||||
|
||||
#### 2. Kiosk-Browser startet nicht
|
||||
```bash
|
||||
# X-Server-Status prüfen
|
||||
ps aux | grep X
|
||||
|
||||
# Kiosk-User-Session prüfen
|
||||
sudo su - kiosk
|
||||
echo $DISPLAY
|
||||
|
||||
# Browser manuell starten
|
||||
DISPLAY=:0 chromium --kiosk https://localhost:443
|
||||
```
|
||||
|
||||
#### 3. SSL-Zertifikat-Fehler
|
||||
```bash
|
||||
# Zertifikat-Gültigkeit prüfen
|
||||
openssl x509 -in /opt/myp/certs/localhost/localhost.crt -text -noout
|
||||
|
||||
# Zertifikat neu generieren
|
||||
sudo rm -rf /opt/myp/certs/localhost/
|
||||
sudo python3 /opt/myp/utils/ssl_config.py /opt/myp --force
|
||||
sudo systemctl restart myp-https.service
|
||||
```
|
||||
|
||||
#### 4. Hohe Speichernutzung
|
||||
```bash
|
||||
# Speicher-Status prüfen
|
||||
free -h
|
||||
|
||||
# Browser-Cache leeren
|
||||
sudo rm -rf /home/kiosk/.chromium-kiosk/Default/Cache/*
|
||||
sudo rm -rf /home/kiosk/.cache/*
|
||||
|
||||
# System-Cache leeren
|
||||
sudo sync
|
||||
sudo echo 3 > /proc/sys/vm/drop_caches
|
||||
```
|
||||
|
||||
### Log-Dateien
|
||||
|
||||
#### Anwendungslogs
|
||||
```bash
|
||||
# Hauptanwendung
|
||||
tail -f /opt/myp/logs/app/app.log
|
||||
|
||||
# Authentifizierung
|
||||
tail -f /opt/myp/logs/auth/auth.log
|
||||
|
||||
# Drucker-Management
|
||||
tail -f /opt/myp/logs/printers/printers.log
|
||||
|
||||
# Job-Management
|
||||
tail -f /opt/myp/logs/jobs/jobs.log
|
||||
```
|
||||
|
||||
#### Systemlogs
|
||||
```bash
|
||||
# HTTPS-Service
|
||||
sudo journalctl -u myp-https -f
|
||||
|
||||
# Kiosk-Service
|
||||
sudo journalctl -u myp-kiosk -f
|
||||
|
||||
# Watchdog-Service
|
||||
sudo tail -f /var/log/kiosk-watchdog.log
|
||||
|
||||
# System-Boot
|
||||
sudo journalctl -b
|
||||
```
|
||||
|
||||
## Sicherheit
|
||||
|
||||
### SSL/TLS-Konfiguration
|
||||
- TLS 1.2+ erforderlich
|
||||
- Starke Cipher-Suites
|
||||
- Selbstsignierte Zertifikate für localhost
|
||||
- Automatische Zertifikat-Erneuerung
|
||||
|
||||
### Netzwerk-Sicherheit
|
||||
- HTTPS-only (kein HTTP)
|
||||
- CSRF-Schutz aktiviert
|
||||
- Session-Management
|
||||
- Rate-Limiting
|
||||
|
||||
### System-Sicherheit
|
||||
- Minimale X11-Umgebung
|
||||
- Kiosk-User ohne Sudo-Rechte
|
||||
- Systemd-Service-Isolation
|
||||
- Read-only Systempartitionen (optional)
|
||||
|
||||
## Performance-Optimierung
|
||||
|
||||
### Browser-Optimierung
|
||||
```bash
|
||||
# Chromium-Flags für bessere Performance
|
||||
--disable-background-mode
|
||||
--disable-dev-shm-usage
|
||||
--memory-pressure-off
|
||||
--max_old_space_size=512
|
||||
--disable-background-timer-throttling
|
||||
```
|
||||
|
||||
### System-Optimierung
|
||||
```bash
|
||||
# GPU-Memory für Raspberry Pi
|
||||
echo "gpu_mem=128" >> /boot/config.txt
|
||||
|
||||
# Swap-Datei optimieren
|
||||
sudo dphys-swapfile swapoff
|
||||
sudo sed -i 's/CONF_SWAPSIZE=100/CONF_SWAPSIZE=512/' /etc/dphys-swapfile
|
||||
sudo dphys-swapfile setup
|
||||
sudo dphys-swapfile swapon
|
||||
```
|
||||
|
||||
### Datenbank-Optimierung
|
||||
```bash
|
||||
# SQLite-Optimierungen in der Anwendung
|
||||
PRAGMA journal_mode=WAL;
|
||||
PRAGMA synchronous=NORMAL;
|
||||
PRAGMA cache_size=10000;
|
||||
PRAGMA temp_store=memory;
|
||||
```
|
||||
|
||||
## Backup und Wiederherstellung
|
||||
|
||||
### Automatische Backups
|
||||
```bash
|
||||
# Datenbank-Backups
|
||||
/opt/myp/database/backups/
|
||||
|
||||
# Konfiguration sichern
|
||||
sudo tar -czf /opt/myp/backups/config-$(date +%Y%m%d).tar.gz \
|
||||
/opt/myp/config/ \
|
||||
/etc/systemd/system/myp-*.service \
|
||||
/home/kiosk/.xinitrc \
|
||||
/home/kiosk/.bashrc
|
||||
```
|
||||
|
||||
### Wiederherstellung
|
||||
```bash
|
||||
# System neu installieren
|
||||
sudo ./combined.sh
|
||||
|
||||
# Datenbank wiederherstellen
|
||||
sudo cp backup.db /opt/myp/database/app.db
|
||||
sudo chown root:root /opt/myp/database/app.db
|
||||
|
||||
# Services neustarten
|
||||
sudo systemctl restart myp-https.service
|
||||
```
|
||||
|
||||
## Updates
|
||||
|
||||
### Anwendungs-Updates
|
||||
```bash
|
||||
# Repository aktualisieren
|
||||
cd /opt/myp
|
||||
git pull origin main
|
||||
|
||||
# Dependencies aktualisieren
|
||||
sudo pip3 install -r requirements.txt --break-system-packages --upgrade
|
||||
sudo npm install
|
||||
|
||||
# Services neustarten
|
||||
sudo systemctl restart myp-https.service
|
||||
```
|
||||
|
||||
### System-Updates
|
||||
```bash
|
||||
# System aktualisieren
|
||||
sudo apt-get update && sudo apt-get upgrade -y
|
||||
|
||||
# Nach Updates neustarten
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
## Support und Dokumentation
|
||||
|
||||
### Weitere Dokumentation
|
||||
- `docs/API_DOCUMENTATION.md` - API-Referenz
|
||||
- `docs/CONFIGURATION.md` - Konfigurationsoptionen
|
||||
- `docs/TROUBLESHOOTING.md` - Erweiterte Fehlerbehebung
|
||||
|
||||
### Logs für Support
|
||||
```bash
|
||||
# Support-Informationen sammeln
|
||||
sudo ./combined.sh # Option 5: System-Tests
|
||||
|
||||
# Log-Bundle erstellen
|
||||
sudo tar -czf myp-logs-$(date +%Y%m%d).tar.gz \
|
||||
/opt/myp/logs/ \
|
||||
/var/log/kiosk-watchdog.log \
|
||||
/var/log/myp-install.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Version**: 3.6.1
|
||||
**Letzte Aktualisierung**: Automatisch generiert
|
||||
**Plattform**: Debian/Linux (Raspberry Pi OS)
|
||||
**Modus**: HTTPS Kiosk (Port 443)
|
@ -1 +1,206 @@
|
||||
|
||||
# Log-Funktionalität Implementierung
|
||||
|
||||
## Problembeschreibung
|
||||
Die System-Logs im Admin-Dashboard wurden nicht geladen. Die JavaScript-Funktionalität fehlte und die API-Endpunkte waren unvollständig implementiert.
|
||||
|
||||
## Durchgeführte Fixes
|
||||
|
||||
### 1. API-Endpunkte Implementiert
|
||||
|
||||
#### `/api/admin/logs` (GET)
|
||||
- **Zweck**: Lädt System-Logs für das Admin-Dashboard
|
||||
- **Features**:
|
||||
- Multi-Format Log-Parser (unterstützt verschiedene Log-Formate)
|
||||
- Level-Filter (ERROR, WARNING, INFO, DEBUG, CRITICAL, ALL)
|
||||
- Suchfunktion in Log-Nachrichten
|
||||
- Component-Filter nach Log-Kategorien
|
||||
- Paginierung (limit/offset)
|
||||
- Automatische Duplikat-Entfernung
|
||||
- Sortierung nach Timestamp (neueste zuerst)
|
||||
|
||||
#### `/api/admin/logs/export` (GET)
|
||||
- **Zweck**: Exportiert alle Log-Dateien als ZIP-Archiv
|
||||
- **Features**:
|
||||
- Sammelt alle .log Dateien aus dem logs-Verzeichnis
|
||||
- Erstellt komprimierte ZIP-Datei
|
||||
- Relativer Pfad-Erhalt in der ZIP-Struktur
|
||||
- Automatische Dateinamen mit Timestamp
|
||||
|
||||
### 2. JavaScript-Funktionalität
|
||||
|
||||
#### Admin-Dashboard Logs-Management
|
||||
```javascript
|
||||
// Neue Funktionen hinzugefügt:
|
||||
- loadLogs(level = null) // Lädt Logs mit Filter
|
||||
- displayLogs(logs) // Zeigt Logs formatiert an
|
||||
- formatLogTimestamp(timestamp) // Formatiert Zeitstempel
|
||||
- escapeHtml(text) // HTML-Escape für Sicherheit
|
||||
- exportLogs() // Exportiert Logs als Datei
|
||||
```
|
||||
|
||||
#### Event-Handler
|
||||
- `#refresh-logs-btn` - Logs manuell aktualisieren
|
||||
- `#export-logs-btn` - Logs exportieren
|
||||
- `#log-level-filter` - Filter nach Log-Level
|
||||
|
||||
#### Automatisches Laden
|
||||
- Logs werden automatisch geladen wenn:
|
||||
- URL-Parameter `tab=logs` gesetzt ist
|
||||
- Das Logs-Container-Element sichtbar ist
|
||||
- Die Seite das erste Mal geladen wird und der Logs-Tab aktiv ist
|
||||
|
||||
### 3. HTML-Template Fixes
|
||||
|
||||
#### Progress Bar Fixes
|
||||
- Entfernt problematische Jinja2-Style-Attribute aus HTML
|
||||
- Verlagert Style-Definitionen in separaten `<style>`-Block
|
||||
- Behebt Linter-Fehler in Zeilen 121, 147, 173, 206, 455
|
||||
|
||||
#### Log-Display Komponenten
|
||||
- Verbesserte Log-Anzeige mit Level-spezifischen Farben
|
||||
- Icons für verschiedene Log-Level (❌, ⚠️, ℹ️, 🔍, 🚨)
|
||||
- Responsive Layout für Log-Einträge
|
||||
- Hover-Effekte und Transitionen
|
||||
|
||||
### 4. Log-Format Unterstützung
|
||||
|
||||
#### Format 1: Standard Format
|
||||
```
|
||||
2025-06-01 00:34:08 - logger_name - [LEVEL] MESSAGE
|
||||
```
|
||||
|
||||
#### Format 2: Bracket Format
|
||||
```
|
||||
[2025-06-01 00:34:08] LEVEL: MESSAGE
|
||||
```
|
||||
|
||||
#### Format 3: Einfaches Format
|
||||
```
|
||||
MESSAGE (als INFO-Level behandelt)
|
||||
```
|
||||
|
||||
### 5. Error Handling & Performance
|
||||
|
||||
#### Robuste Fehlerbehandlung
|
||||
- Try-catch für jeden Log-Parser-Schritt
|
||||
- Fallback bei nicht lesbaren Dateien
|
||||
- Graceful Degradation bei API-Fehlern
|
||||
|
||||
#### Performance-Optimierungen
|
||||
- Maximal 10 Log-Dateien verarbeitet
|
||||
- Maximal 500 Zeilen pro Datei
|
||||
- Maximal 50 Einträge pro Datei
|
||||
- UTF-8 Encoding mit Fehler-Ignorierung
|
||||
|
||||
### 6. UI/UX Verbesserungen
|
||||
|
||||
#### Loading States
|
||||
- Spinner während des Ladens
|
||||
- Informative Fehlermeldungen
|
||||
- "Erneut versuchen" Button bei Fehlern
|
||||
|
||||
#### Responsive Design
|
||||
- Mobile-optimierte Log-Anzeige
|
||||
- Hover-Effekte und Animationen
|
||||
- Dark-Mode Unterstützung
|
||||
|
||||
#### Accessibility
|
||||
- ARIA-Labels für Screen-Reader
|
||||
- Tastatur-Navigation
|
||||
- Semantische HTML-Struktur
|
||||
|
||||
## Verwendung
|
||||
|
||||
### Admin-Dashboard Zugriff
|
||||
1. Als Administrator einloggen
|
||||
2. Zum Admin-Dashboard navigieren
|
||||
3. "Logs" Tab auswählen
|
||||
4. Logs werden automatisch geladen
|
||||
|
||||
### Filter und Export
|
||||
- **Filter nach Level**: Dropdown-Menü verwenden
|
||||
- **Aktualisieren**: "Aktualisieren" Button klicken
|
||||
- **Export**: "Export" Button für ZIP-Download
|
||||
|
||||
### API-Direktzugriff
|
||||
```javascript
|
||||
// Logs abrufen
|
||||
fetch('/api/admin/logs?level=ERROR&limit=50')
|
||||
.then(response => response.json())
|
||||
.then(data => console.log(data.logs));
|
||||
|
||||
// Logs exportieren
|
||||
window.location.href = '/api/admin/logs/export';
|
||||
```
|
||||
|
||||
## Technische Details
|
||||
|
||||
### Abhängigkeiten
|
||||
- **Frontend**: Admin-unified.js, Tailwind CSS
|
||||
- **Backend**: Flask, SQLAlchemy, Python logging
|
||||
- **Tools**: zipfile, glob, datetime
|
||||
|
||||
### Sicherheit
|
||||
- Admin-Berechtigung erforderlich (`@admin_required`)
|
||||
- CSRF-Token Validierung
|
||||
- HTML-Escape für Log-Inhalte
|
||||
- Input-Sanitization für Filter-Parameter
|
||||
|
||||
### Logs-Verzeichnis Struktur
|
||||
```
|
||||
backend/logs/
|
||||
├── app/
|
||||
├── auth/
|
||||
├── jobs/
|
||||
├── printers/
|
||||
├── scheduler/
|
||||
├── errors/
|
||||
└── *.log (direkte Log-Dateien)
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Manuelle Tests
|
||||
1. ✅ Logs-Tab Laden
|
||||
2. ✅ Level-Filter Funktionalität
|
||||
3. ✅ Export-Funktionalität
|
||||
4. ✅ Error-Handling bei fehlenden Logs
|
||||
5. ✅ Auto-Loading bei Tab-Switch
|
||||
|
||||
### Browser-Kompatibilität
|
||||
- ✅ Chrome/Edge (moderne Versionen)
|
||||
- ✅ Firefox (moderne Versionen)
|
||||
- ✅ Safari (moderne Versionen)
|
||||
- ✅ Mobile Browser
|
||||
|
||||
## Bekannte Limitierungen
|
||||
|
||||
1. **Performance**: Bei sehr großen Log-Dateien (>10MB) kann das Laden langsam sein
|
||||
2. **Memory**: Alle Logs werden im Speicher verarbeitet
|
||||
3. **Real-time**: Logs werden nicht in Echtzeit aktualisiert (manueller Refresh nötig)
|
||||
|
||||
## Zukünftige Verbesserungen
|
||||
|
||||
1. **WebSocket Integration** für Real-time Log-Updates
|
||||
2. **Paginierung UI** für bessere Navigation
|
||||
3. **Erweiterte Filter** (Datum, Komponente, Benutzer)
|
||||
4. **Log-Archivierung** und automatische Bereinigung
|
||||
5. **Search Highlighting** in Log-Inhalten
|
||||
|
||||
## Changelog
|
||||
|
||||
**2025-06-01 - Initial Implementation**
|
||||
- ✅ API-Endpunkte implementiert
|
||||
- ✅ JavaScript-Funktionalität hinzugefügt
|
||||
- ✅ HTML-Template Fixes
|
||||
- ✅ Error-Handling verbessert
|
||||
- ✅ Performance-Optimierungen
|
||||
- ✅ UI/UX Verbesserungen
|
||||
|
||||
## Support
|
||||
|
||||
Bei Problemen mit der Log-Funktionalität:
|
||||
1. Browser-Konsole auf Fehler prüfen
|
||||
2. Netzwerk-Tab für API-Anfragen überprüfen
|
||||
3. Server-Logs für Backend-Fehler analysieren
|
||||
4. Admin-Berechtigung verifizieren
|
@ -27,9 +27,9 @@ Das neue konsolidierte `setup.sh` Skript ersetzt alle bisherigen Installationssk
|
||||
|
||||
## Installationsmodi
|
||||
|
||||
### 1. Nur Abhängigkeiten installieren
|
||||
### 1. Abhängigkeiten installieren für manuelles Testen
|
||||
|
||||
**Zweck**: System vorbereiten ohne Kiosk-Modus zu aktivieren
|
||||
**Zweck**: System vollständig vorbereiten für manuelle Tests und Entwicklung
|
||||
|
||||
**Was wird installiert**:
|
||||
- Python 3 und pip
|
||||
@ -49,21 +49,31 @@ sudo ./setup.sh
|
||||
|
||||
**Ideal für**:
|
||||
- Entwicklungsumgebungen
|
||||
- Erste Installation und Tests
|
||||
- Systeme ohne Kiosk-Anforderungen
|
||||
- Manuelle Tests und Debugging
|
||||
- Systeme ohne automatischen Kiosk-Modus
|
||||
- Erste Installation und Validierung
|
||||
|
||||
### 2. Finale Kiosk-Installation
|
||||
**Nach der Installation**:
|
||||
- HTTPS-Backend manuell starten: `cd /opt/myp && python3 app.py`
|
||||
- System bereit für Entwicklung und Tests
|
||||
|
||||
**Zweck**: Vollständige Kiosk-Modus-Konfiguration
|
||||
### 2. Vollständige Kiosk-Installation mit Remote-Zugang
|
||||
|
||||
**Zweck**: Komplette Produktionsinstallation mit automatischem Kiosk-Modus
|
||||
|
||||
**Was wird konfiguriert**:
|
||||
- Alle Abhängigkeiten (falls noch nicht installiert)
|
||||
- Desktop-Environments entfernen
|
||||
- Alle Abhängigkeiten (automatisch falls noch nicht installiert)
|
||||
- Desktop-Environments vollständig entfernen
|
||||
- Minimale X11-Umgebung installieren
|
||||
- Kiosk-Benutzer erstellen
|
||||
- Automatischen Login konfigurieren
|
||||
- **SSH-Server** mit Benutzer `user:raspberry`
|
||||
- **RDP-Server (xrdp)** mit TLS für `root:744563017196A`
|
||||
- **XFCE Desktop-Umgebung** für RDP-Sessions
|
||||
- **firewalld** mit erweiterten Netzwerk-Regeln
|
||||
- Kiosk-Benutzer erstellen und konfigurieren
|
||||
- **Automatischen Login** auf tty1 konfigurieren
|
||||
- **Automatischen Kiosk-Start** beim Login einrichten
|
||||
- Systemd-Services installieren und aktivieren
|
||||
- System-Test durchführen
|
||||
- Umfassende System-Tests
|
||||
- Alte Dateien aufräumen
|
||||
|
||||
**Verwendung**:
|
||||
@ -75,48 +85,13 @@ sudo ./setup.sh
|
||||
**Ideal für**:
|
||||
- Produktionsumgebungen
|
||||
- Dedizierte Kiosk-Systeme
|
||||
- Finale Deployment
|
||||
- Finale Deployment mit Remote-Administration
|
||||
- Vollautomatische Systeme
|
||||
|
||||
### 3. Nur Services installieren
|
||||
|
||||
**Zweck**: Systemd-Services aktualisieren ohne Systemänderungen
|
||||
|
||||
**Was wird gemacht**:
|
||||
- Service-Dateien aus `systemd/` nach `/etc/systemd/system/` kopieren
|
||||
- systemd-Konfiguration neu laden
|
||||
- Optional: Services aktivieren und starten
|
||||
|
||||
**Verwendung**:
|
||||
```bash
|
||||
sudo ./setup.sh
|
||||
# Wähle Option 3
|
||||
```
|
||||
|
||||
**Ideal für**:
|
||||
- Service-Updates
|
||||
- Konfigurationsänderungen
|
||||
- Wartung bestehender Installationen
|
||||
|
||||
### 4. System-Test
|
||||
|
||||
**Zweck**: Funktionalität der Installation überprüfen
|
||||
|
||||
**Was wird getestet**:
|
||||
- HTTPS-Verbindung zu localhost:443
|
||||
- SSL-Zertifikat-Gültigkeit
|
||||
- Service-Status aller systemd-Services
|
||||
- Systemressourcen
|
||||
|
||||
**Verwendung**:
|
||||
```bash
|
||||
sudo ./setup.sh
|
||||
# Wähle Option 4
|
||||
```
|
||||
|
||||
**Ideal für**:
|
||||
- Fehlerdiagnose
|
||||
- Wartung
|
||||
- Regelmäßige Systemprüfungen
|
||||
**Nach der Installation**:
|
||||
- **Neustart erforderlich**: `sudo reboot`
|
||||
- Automatischer Kiosk-Modus beim Boot
|
||||
- Remote-Zugang verfügbar über SSH und RDP
|
||||
|
||||
## Systemd-Services
|
||||
|
||||
@ -145,6 +120,17 @@ sudo ./setup.sh
|
||||
- **Zweck**: Python-basierte Überwachung
|
||||
- **Ergänzung**: Zusätzliche Überwachungsfunktionen
|
||||
|
||||
### myp-firewall.service
|
||||
- **Zweck**: Automatische Firewall-Konfiguration beim Systemstart
|
||||
- **Benutzer**: root
|
||||
- **Abhängigkeiten**: firewalld.service
|
||||
- **Funktionen**:
|
||||
- Zone `myp-backend` für Netzwerk 192.168.0.0/24
|
||||
- HTTPS-Port 443/tcp
|
||||
- SSH-Port 22/tcp
|
||||
- RDP-Port 3389/tcp
|
||||
- Automatische Aktivierung beim Boot
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### SSL-Zertifikate
|
||||
@ -166,6 +152,79 @@ sudo ./setup.sh
|
||||
- Gruppen: audio, video, input, dialout, plugdev, users
|
||||
- Passwortlos für Sicherheit
|
||||
|
||||
### Remote-Zugang
|
||||
|
||||
**SSH-Zugang**:
|
||||
- Benutzer: `user`
|
||||
- Passwort: `raspberry`
|
||||
- Port: 22
|
||||
- Sudo-Berechtigung: ja
|
||||
|
||||
**RDP-Zugang**:
|
||||
- Benutzer: `root`
|
||||
- Passwort: `744563017196A`
|
||||
- Port: 3389
|
||||
- Desktop: XFCE
|
||||
- Verschlüsselung: TLS 1.2/1.3
|
||||
|
||||
**Firewall-Konfiguration**:
|
||||
- Zone: `myp-backend`
|
||||
- Quell-Netzwerke:
|
||||
- `192.168.0.0/16` (erweitertes lokales Netzwerk)
|
||||
- `127.0.0.1/32` (localhost IPv4)
|
||||
- `raspberrypi` (lokaler Hostname - automatisch gesetzt)
|
||||
- `m040tbaraspi001` (Frontend-Server - falls auflösbar)
|
||||
- Erlaubte Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)
|
||||
- **IPv6 vollständig deaktiviert und blockiert**
|
||||
- Automatische Konfiguration beim Systemstart
|
||||
|
||||
### Hostname-Konfiguration
|
||||
|
||||
**Automatische Hostname-Setzung**:
|
||||
- Lokaler Hostname wird automatisch auf `raspberrypi` gesetzt
|
||||
- `/etc/hostname` und `/etc/hosts` werden entsprechend aktualisiert
|
||||
- Hostname-Auflösung wird getestet und konfiguriert
|
||||
- Firewall-Integration für lokalen Hostname
|
||||
|
||||
**Frontend-Server Integration**:
|
||||
- `m040tbaraspi001` wird als separater Frontend-Server behandelt
|
||||
- Automatische IP-Auflösung für `m040tbaraspi001` und `m040tbaraspi001.de040.corpintra.net`
|
||||
- Firewall-Regel wird hinzugefügt, falls der Server auflösbar ist
|
||||
- Keine Abhängigkeit - System funktioniert auch ohne Frontend-Server
|
||||
|
||||
### Netzwerk-Sicherheit
|
||||
|
||||
**IPv6-Deaktivierung**:
|
||||
- Vollständige Deaktivierung auf Kernel-Ebene
|
||||
- GRUB-Konfiguration: `ipv6.disable=1`
|
||||
- Sysctl-Konfiguration für alle Interfaces
|
||||
- NetworkManager/systemd-networkd Konfiguration
|
||||
- Firewall blockiert alle IPv6-Pakete
|
||||
|
||||
**IP-Spoofing-Schutz**:
|
||||
- Reverse Path Filtering aktiviert
|
||||
- Source Routing deaktiviert
|
||||
- ICMP Redirects ignoriert
|
||||
- Secure Redirects deaktiviert
|
||||
|
||||
**DDoS-Schutz**:
|
||||
- SYN-Flood-Schutz mit SYN-Cookies
|
||||
- Optimierte TCP-Backlog-Größe
|
||||
- Begrenzte SYN/SYNACK-Wiederholungen
|
||||
- Broadcast-Ping-Schutz (Smurf-Angriffe)
|
||||
|
||||
**TCP-Optimierungen**:
|
||||
- RFC-konforme Retry-Limits
|
||||
- Optimierte Window-Skalierung
|
||||
- Deaktivierte TCP-Timestamps (Anti-Fingerprinting)
|
||||
- Deaktivierte TCP-SACK (Sicherheit)
|
||||
- Time-Wait-Assassination-Schutz
|
||||
|
||||
**Logging und Monitoring**:
|
||||
- Martian-Pakete werden geloggt
|
||||
- Verdächtige Netzwerkaktivitäten protokolliert
|
||||
- Bogus ICMP-Antworten ignoriert
|
||||
|
||||
### Verzeichnisstruktur
|
||||
|
||||
```
|
||||
@ -209,7 +268,7 @@ sudo ./setup.sh
|
||||
3. **SSL-Zertifikat-Probleme**
|
||||
```bash
|
||||
sudo ./setup.sh
|
||||
# Option 4 für System-Test
|
||||
# Option 5 für System-Test
|
||||
```
|
||||
|
||||
4. **Service-Neustart**
|
||||
@ -218,20 +277,67 @@ sudo ./setup.sh
|
||||
sudo systemctl restart kiosk-watchdog
|
||||
```
|
||||
|
||||
5. **SSH-Verbindung fehlgeschlagen**
|
||||
```bash
|
||||
# SSH-Service prüfen
|
||||
sudo systemctl status ssh
|
||||
|
||||
# SSH-Port prüfen
|
||||
sudo ss -tlnp | grep :22
|
||||
|
||||
# Firewall-Regeln prüfen
|
||||
sudo firewall-cmd --list-all
|
||||
```
|
||||
|
||||
6. **RDP-Verbindung fehlgeschlagen**
|
||||
```bash
|
||||
# xrdp-Service prüfen
|
||||
sudo systemctl status xrdp
|
||||
|
||||
# RDP-Port prüfen
|
||||
sudo ss -tlnp | grep :3389
|
||||
|
||||
# xrdp-Logs prüfen
|
||||
sudo journalctl -u xrdp -f
|
||||
```
|
||||
|
||||
7. **Firewall-Probleme**
|
||||
```bash
|
||||
# Firewall-Status prüfen
|
||||
sudo systemctl status firewalld
|
||||
|
||||
# Aktive Zonen anzeigen
|
||||
sudo firewall-cmd --get-active-zones
|
||||
|
||||
# Zone-Konfiguration prüfen
|
||||
sudo firewall-cmd --zone=myp-backend --list-all
|
||||
|
||||
# Firewall neu konfigurieren
|
||||
sudo ./setup.sh
|
||||
# Option 4 für Remote-Zugang
|
||||
```
|
||||
|
||||
### Manuelle Service-Verwaltung
|
||||
|
||||
```bash
|
||||
# Services aktivieren
|
||||
sudo systemctl enable myp-https myp-kiosk kiosk-watchdog
|
||||
sudo systemctl enable myp-https myp-kiosk kiosk-watchdog myp-firewall
|
||||
|
||||
# Services starten
|
||||
sudo systemctl start myp-https myp-kiosk kiosk-watchdog
|
||||
|
||||
# Remote-Services aktivieren
|
||||
sudo systemctl enable ssh xrdp firewalld
|
||||
sudo systemctl start ssh xrdp firewalld
|
||||
|
||||
# Status prüfen
|
||||
sudo systemctl status myp-https myp-kiosk kiosk-watchdog
|
||||
sudo systemctl status myp-https myp-kiosk kiosk-watchdog myp-firewall
|
||||
sudo systemctl status ssh xrdp firewalld
|
||||
|
||||
# Logs anzeigen
|
||||
sudo journalctl -u myp-https -f
|
||||
sudo journalctl -u xrdp -f
|
||||
sudo journalctl -u firewalld -f
|
||||
```
|
||||
|
||||
## Wartung
|
||||
@ -254,7 +360,7 @@ sudo journalctl -u myp-https -f
|
||||
4. **System-Test**
|
||||
```bash
|
||||
sudo ./setup.sh
|
||||
# Option 4
|
||||
# Option 5
|
||||
```
|
||||
|
||||
## Sicherheit
|
||||
@ -299,7 +405,7 @@ Wenn Sie eine bestehende Installation mit `combined.sh` oder `installer.sh` habe
|
||||
Bei Problemen:
|
||||
|
||||
1. **Log-Dateien prüfen**
|
||||
2. **System-Test durchführen** (Option 4)
|
||||
2. **System-Test durchführen** (Option 5)
|
||||
3. **Services neu starten**
|
||||
4. **Installation wiederholen** mit entsprechender Option
|
||||
|
||||
|
@ -1 +1,269 @@
|
||||
|
||||
# Wartungs-Modal Reparatur - Dokumentation
|
||||
|
||||
## Problem-Analyse
|
||||
|
||||
Das Wartungs-Modal im Admin-Bereich funktionierte nicht korrekt aufgrund mehrerer Probleme:
|
||||
|
||||
### 1. Fehlende `setLoadingState` Methode
|
||||
- **Problem**: Die JavaScript-Klasse `MaintenanceModal` rief `this.setLoadingState()` auf, aber die Methode war nicht definiert
|
||||
- **Symptom**: JavaScript-Fehler beim Ausführen von Wartungsaktionen
|
||||
- **Lösung**: Vollständige `setLoadingState` Methode implementiert mit:
|
||||
- Button-Deaktivierung während Loading
|
||||
- Spinner-Animation hinzufügen/entfernen
|
||||
- Loading-Overlay-Management
|
||||
|
||||
### 2. Fehlende API-Endpunkte
|
||||
- **Problem**: Das Modal rief API-Endpunkte auf, die nicht existierten:
|
||||
- `/api/admin/maintenance/clear-cache`
|
||||
- `/api/admin/maintenance/optimize-database`
|
||||
- `/api/admin/maintenance/create-backup`
|
||||
- **Symptom**: 404-Fehler bei API-Aufrufen
|
||||
- **Lösung**: Vollständige API-Endpunkte implementiert
|
||||
|
||||
### 3. Template-Syntax-Fehler
|
||||
- **Problem**: Jinja2-Template-Syntax `{{ url_for("optimization_settings") }}` wurde im JavaScript verwendet
|
||||
- **Symptom**: JavaScript-Syntax-Fehler
|
||||
- **Lösung**: Direkte URL-Navigation implementiert
|
||||
|
||||
### 4. Doppelte Event-Listener / Event-Handler-Konflikt ⚠️ **KRITISCH**
|
||||
- **Problem**: Modal wurde mehrfach initialisiert und es gab konkurrierende Event-Handler
|
||||
- **Symptom**: Modal öffnet sich und schließt sich sofort wieder automatisch
|
||||
- **Ursache**:
|
||||
- `MaintenanceModal` Klasse in `admin.html` registrierte Event-Handler
|
||||
- `AdminDashboard` Klasse in `admin-unified.js` registrierte ebenfalls Event-Handler für denselben Button
|
||||
- Beide Handler wurden gleichzeitig ausgeführt, was zu Konflikten führte
|
||||
- **Lösung**:
|
||||
- Event-Handler-Konflikt durch Deaktivierung des konkurrierenden Handlers behoben
|
||||
- Singleton-Pattern für `MaintenanceModal` implementiert
|
||||
- Event-Propagation mit `stopImmediatePropagation()` verhindert
|
||||
|
||||
## Implementierte Lösungen
|
||||
|
||||
### 1. JavaScript-Reparaturen in `templates/admin.html`
|
||||
|
||||
```javascript
|
||||
class MaintenanceModal {
|
||||
constructor() {
|
||||
this.modal = document.getElementById('maintenance-modal');
|
||||
this.triggerBtn = document.getElementById('maintenance-btn');
|
||||
this.closeBtn = document.getElementById('close-maintenance-modal');
|
||||
this.isOpen = false;
|
||||
this.isLoading = false;
|
||||
this.isInitialized = false; // ✅ Neu hinzugefügt
|
||||
|
||||
// ✅ Verhindere doppelte Initialisierung
|
||||
if (window.maintenanceModalInstance) {
|
||||
return window.maintenanceModalInstance;
|
||||
}
|
||||
|
||||
this.initializeEventListeners();
|
||||
this.isInitialized = true;
|
||||
window.maintenanceModalInstance = this; // ✅ Singleton-Pattern
|
||||
}
|
||||
|
||||
initializeEventListeners() {
|
||||
// ✅ Modal öffnen - mit Event-Delegation und Konflikt-Vermeidung
|
||||
if (this.triggerBtn) {
|
||||
// Entferne alle existierenden Event-Listener
|
||||
this.triggerBtn.removeEventListener('click', this.handleTriggerClick);
|
||||
|
||||
// Füge neuen Event-Listener hinzu
|
||||
this.handleTriggerClick = (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
e.stopImmediatePropagation(); // ✅ Verhindert andere Handler
|
||||
|
||||
console.log('🛠️ Wartungs-Modal wird geöffnet...');
|
||||
this.openModal();
|
||||
};
|
||||
|
||||
this.triggerBtn.addEventListener('click', this.handleTriggerClick, { capture: true });
|
||||
}
|
||||
|
||||
// ✅ Modal schließen - verbesserte Event-Behandlung
|
||||
if (this.closeBtn) {
|
||||
this.closeBtn.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.closeModal();
|
||||
});
|
||||
}
|
||||
|
||||
// ✅ Modal schließen bei Klick außerhalb - aber nur auf das Overlay
|
||||
if (this.modal) {
|
||||
this.modal.addEventListener('click', (e) => {
|
||||
// Nur schließen wenn direkt auf das Modal-Overlay geklickt wird
|
||||
if (e.target === this.modal) {
|
||||
this.closeModal();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ✅ ESC-Taste zum Schließen
|
||||
document.addEventListener('keydown', (e) => {
|
||||
if (e.key === 'Escape' && this.isOpen) {
|
||||
e.preventDefault();
|
||||
this.closeModal();
|
||||
}
|
||||
});
|
||||
|
||||
// Wartungs-Aktionen
|
||||
this.initializeMaintenanceActions();
|
||||
}
|
||||
|
||||
// ✅ Verbesserte openModal Methode
|
||||
openModal() {
|
||||
if (this.modal && !this.isOpen) {
|
||||
console.log('✅ Modal wird geöffnet');
|
||||
this.modal.classList.remove('hidden');
|
||||
this.isOpen = true;
|
||||
document.body.style.overflow = 'hidden';
|
||||
|
||||
// Focus-Management für Barrierefreiheit
|
||||
setTimeout(() => {
|
||||
const firstFocusable = this.modal.querySelector('button:not(#close-maintenance-modal)');
|
||||
if (firstFocusable) {
|
||||
firstFocusable.focus();
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
|
||||
// ✅ Verbesserte closeModal Methode
|
||||
closeModal() {
|
||||
if (this.modal && this.isOpen) {
|
||||
console.log('❌ Modal wird geschlossen');
|
||||
this.modal.classList.add('hidden');
|
||||
this.isOpen = false;
|
||||
document.body.style.overflow = '';
|
||||
|
||||
// Focus zurück zum Trigger-Button
|
||||
if (this.triggerBtn) {
|
||||
this.triggerBtn.focus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ... weitere Methoden ...
|
||||
}
|
||||
|
||||
// ✅ Globale Instanz-Verwaltung mit Konflikt-Vermeidung
|
||||
let maintenanceModal = null;
|
||||
|
||||
// ✅ Initialisierung nach DOM-Laden - aber nur einmal
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// Verhindere doppelte Initialisierung
|
||||
if (!window.maintenanceModalInstance && !maintenanceModal) {
|
||||
console.log('🔧 Wartungs-Modal wird initialisiert...');
|
||||
maintenanceModal = new MaintenanceModal();
|
||||
|
||||
// ✅ Deaktiviere andere Event-Handler für den Wartungs-Button
|
||||
const maintenanceBtn = document.getElementById('maintenance-btn');
|
||||
if (maintenanceBtn) {
|
||||
// Entferne alle anderen Event-Listener durch Klonen
|
||||
const newBtn = maintenanceBtn.cloneNode(true);
|
||||
maintenanceBtn.parentNode.replaceChild(newBtn, maintenanceBtn);
|
||||
|
||||
// Füge nur unseren Event-Listener hinzu
|
||||
newBtn.addEventListener('click', (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
e.stopImmediatePropagation();
|
||||
|
||||
if (maintenanceModal) {
|
||||
maintenanceModal.openModal();
|
||||
}
|
||||
}, { capture: true });
|
||||
}
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### 2. Deaktivierung des konkurrierenden Event-Handlers in `static/js/admin-unified.js`
|
||||
|
||||
```javascript
|
||||
attachSystemButtons() {
|
||||
// System Status Button
|
||||
this.addEventListenerSafe('#system-status-btn', 'click', (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.showSystemStatus();
|
||||
});
|
||||
|
||||
// Analytics Button
|
||||
this.addEventListenerSafe('#analytics-btn', 'click', (e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
this.showAnalytics();
|
||||
});
|
||||
|
||||
// ✅ Maintenance Button - DEAKTIVIERT wegen Konflikt mit MaintenanceModal
|
||||
// Das Wartungs-Modal wird jetzt direkt in admin.html verwaltet
|
||||
// this.addEventListenerSafe('#maintenance-btn', 'click', (e) => {
|
||||
// e.preventDefault();
|
||||
// e.stopPropagation();
|
||||
// this.showMaintenance();
|
||||
// });
|
||||
|
||||
// ... weitere Buttons ...
|
||||
}
|
||||
```
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
1. **API-Endpunkte hinzufügen**: Die oben gezeigten API-Endpunkte müssen in `app.py` eingefügt werden
|
||||
2. **Testen**: Das Wartungs-Modal nach der Implementierung testen
|
||||
3. **Logging**: Überprüfen der Log-Ausgaben für erfolgreiche Wartungsaktionen
|
||||
4. **Backup-Verzeichnis**: Sicherstellen, dass das `database/backups` Verzeichnis existiert
|
||||
|
||||
## Funktionalitäten
|
||||
|
||||
Nach der Reparatur bietet das Wartungs-Modal folgende Funktionen:
|
||||
|
||||
### ✅ Cache leeren
|
||||
- Löscht Flask-Cache (falls vorhanden)
|
||||
- Entfernt temporäre MYP/TBA-Dateien
|
||||
- Führt Python Garbage Collection durch
|
||||
- Zeigt Anzahl der gelöschten Dateien an
|
||||
|
||||
### ✅ Datenbank optimieren
|
||||
- SQLite VACUUM (Komprimierung)
|
||||
- SQLite ANALYZE (Statistiken aktualisieren)
|
||||
- SQLite REINDEX (Indizes neu aufbauen)
|
||||
- Bereinigung verwaister Dateien (älter als 7 Tage)
|
||||
- Detaillierte Ergebnisanzeige
|
||||
|
||||
### ✅ Backup erstellen
|
||||
- ZIP-Backup mit Zeitstempel
|
||||
- Enthält Datenbank, Konfigurationsdateien und wichtige Uploads
|
||||
- Automatische Bereinigung alter Backups (nur 10 neueste behalten)
|
||||
- Größenanzeige und Dateiliste
|
||||
|
||||
### ✅ Erweiterte Einstellungen
|
||||
- Navigation zu Optimierungs-Einstellungen
|
||||
- Fehlerbehandlung bei Navigation
|
||||
|
||||
## Benutzerfreundlichkeit
|
||||
|
||||
- **Loading-Zustände**: Buttons werden während Aktionen deaktiviert
|
||||
- **Spinner-Animationen**: Visuelle Rückmeldung während Verarbeitung
|
||||
- **Bestätigungsdialoge**: Sicherheitsabfragen vor kritischen Aktionen
|
||||
- **Detaillierte Notifications**: Erfolgs- und Fehlermeldungen mit Details
|
||||
- **Schließbare Notifications**: Benutzer können Meldungen manuell schließen
|
||||
- **Keyboard-Support**: ESC-Taste schließt das Modal
|
||||
- **Focus-Management**: Barrierefreie Navigation
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- **Admin-Berechtigung**: Alle API-Endpunkte erfordern Admin-Rechte
|
||||
- **CSRF-Schutz**: CSRF-Token bei allen API-Aufrufen
|
||||
- **Logging**: Alle Wartungsaktionen werden geloggt
|
||||
- **Fehlerbehandlung**: Robuste Fehlerbehandlung verhindert System-Crashes
|
||||
- **Datei-Größen-Limits**: Backup-Dateien sind auf 10MB begrenzt
|
||||
|
||||
## Wartung
|
||||
|
||||
- **Automatische Bereinigung**: Alte Backups werden automatisch gelöscht
|
||||
- **Fehler-Logging**: Alle Fehler werden in den App-Logs erfasst
|
||||
- **Performance-Überwachung**: Optimierungszeiten werden gemessen
|
||||
- **Benutzer-Tracking**: Wartungsaktionen werden Benutzern zugeordnet
|
474
backend/setup.sh
474
backend/setup.sh
@ -1083,50 +1083,41 @@ install_remote_access() {
|
||||
echo "user:raspberry" | chpasswd || warning "Konnte Passwort für SSH-Benutzer nicht aktualisieren"
|
||||
fi
|
||||
|
||||
# RDP-Server (xrdp) installieren
|
||||
progress "Installiere RDP-Server (xrdp)..."
|
||||
# RDP-Server (xrdp) installieren - vereinfachter Ansatz
|
||||
progress "Installiere RDP-Server (xrdp) - vereinfachte Installation..."
|
||||
|
||||
# Minimale Desktop-Umgebung für RDP installieren
|
||||
progress "Installiere minimale Desktop-Umgebung für RDP..."
|
||||
# Alle bestehenden xrdp-Installationen entfernen
|
||||
progress "Entferne vorherige xrdp-Installationen..."
|
||||
systemctl stop xrdp xrdp-sesman 2>/dev/null || true
|
||||
systemctl disable xrdp xrdp-sesman 2>/dev/null || true
|
||||
apt-get remove --purge -y xrdp 2>/dev/null || true
|
||||
rm -rf /etc/xrdp /var/log/xrdp* 2>/dev/null || true
|
||||
|
||||
# XFCE als leichtgewichtige Desktop-Umgebung installieren
|
||||
progress "Installiere XFCE Desktop-Umgebung..."
|
||||
apt-get install -y xfce4 xfce4-goodies dbus-x11 || error "XFCE Installation fehlgeschlagen"
|
||||
|
||||
# xrdp installieren
|
||||
apt-get install -y xrdp || error "xrdp Installation fehlgeschlagen"
|
||||
|
||||
# xrdp-Benutzer zur ssl-cert Gruppe hinzufügen
|
||||
usermod -aG ssl-cert xrdp 2>/dev/null || true
|
||||
|
||||
# Erstelle xrdp-Session-Konfiguration für XFCE
|
||||
progress "Konfiguriere XFCE für xrdp..."
|
||||
|
||||
# Erstelle .xsession für alle Benutzer
|
||||
cat > /etc/skel/.xsession << 'EOF'
|
||||
#!/bin/bash
|
||||
# XFCE Session für xrdp
|
||||
export XDG_SESSION_DESKTOP=xfce
|
||||
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share:/var/lib/snapd/desktop
|
||||
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
|
||||
startxfce4
|
||||
EOF
|
||||
|
||||
# Kopiere .xsession für root
|
||||
cp /etc/skel/.xsession /root/.xsession
|
||||
chmod +x /root/.xsession
|
||||
|
||||
# Kopiere .xsession für user (falls vorhanden)
|
||||
if id "user" &>/dev/null; then
|
||||
cp /etc/skel/.xsession /home/user/.xsession
|
||||
chown user:user /home/user/.xsession
|
||||
chmod +x /home/user/.xsession
|
||||
# XFCE Desktop installieren (minimal)
|
||||
progress "Installiere minimale XFCE-Umgebung..."
|
||||
if ! apt-get install -y xfce4-session xfce4-panel xfce4-terminal xfce4-settings xfdesktop4 dbus-x11; then
|
||||
warning "Minimale XFCE-Installation fehlgeschlagen - verwende Fallback..."
|
||||
apt-get install -y xfce4 dbus-x11 || error "XFCE Installation fehlgeschlagen"
|
||||
fi
|
||||
|
||||
# xrdp-Konfiguration vereinfachen
|
||||
progress "Konfiguriere xrdp..."
|
||||
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.backup
|
||||
# xrdp neu installieren
|
||||
progress "Installiere xrdp neu..."
|
||||
apt-get update
|
||||
apt-get install -y xrdp || error "xrdp Installation fehlgeschlagen"
|
||||
|
||||
# Benutzer zur xrdp-Gruppe hinzufügen
|
||||
usermod -aG xrdp root 2>/dev/null || true
|
||||
if id "user" &>/dev/null; then
|
||||
usermod -aG xrdp user 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# Erstelle minimale xrdp-Konfiguration
|
||||
progress "Erstelle minimale xrdp-Konfiguration..."
|
||||
|
||||
# Backup der Original-Konfiguration
|
||||
cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.original 2>/dev/null || true
|
||||
|
||||
# Sehr einfache xrdp.ini
|
||||
cat > /etc/xrdp/xrdp.ini << 'EOF'
|
||||
[Globals]
|
||||
ini_version=1
|
||||
@ -1137,15 +1128,15 @@ tcp_keepalive=true
|
||||
security_layer=rdp
|
||||
autorun=
|
||||
allow_channels=true
|
||||
allow_multimon=true
|
||||
allow_multimon=false
|
||||
bitmap_cache=true
|
||||
bitmap_compression=true
|
||||
bulk_compression=true
|
||||
max_bpp=32
|
||||
bulk_compression=false
|
||||
max_bpp=24
|
||||
new_cursors=true
|
||||
use_fastpath=both
|
||||
require_credentials=true
|
||||
ask_for_reconnect_reason=true
|
||||
ask_for_reconnect_reason=false
|
||||
enable_token_login=false
|
||||
|
||||
[Xorg]
|
||||
@ -1156,20 +1147,10 @@ password=ask
|
||||
ip=127.0.0.1
|
||||
port=-1
|
||||
code=20
|
||||
|
||||
[Xvnc]
|
||||
name=Xvnc
|
||||
lib=libvnc.so
|
||||
username=ask
|
||||
password=ask
|
||||
ip=127.0.0.1
|
||||
port=-1
|
||||
code=10
|
||||
EOF
|
||||
|
||||
# xrdp-sesman Konfiguration
|
||||
progress "Konfiguriere xrdp-sesman..."
|
||||
cp /etc/xrdp/sesman.ini /etc/xrdp/sesman.ini.backup
|
||||
|
||||
# Einfache sesman.ini
|
||||
cp /etc/xrdp/sesman.ini /etc/xrdp/sesman.ini.original 2>/dev/null || true
|
||||
|
||||
cat > /etc/xrdp/sesman.ini << 'EOF'
|
||||
[Globals]
|
||||
@ -1178,24 +1159,18 @@ ListenPort=3350
|
||||
EnableUserWindowManager=true
|
||||
UserWindowManager=startxfce4
|
||||
DefaultWindowManager=startxfce4
|
||||
ReconnectSh=/etc/xrdp/reconnectwm.sh
|
||||
|
||||
[Security]
|
||||
AllowRootLogin=true
|
||||
MaxLoginRetry=4
|
||||
TerminalServerUsers=tsusers
|
||||
TerminalServerAdmins=tsadmins
|
||||
AlwaysGroupCheck=false
|
||||
RestrictOutboundClipboard=false
|
||||
RestrictInboundClipboard=false
|
||||
|
||||
[Sessions]
|
||||
X11DisplayOffset=10
|
||||
MaxSessions=50
|
||||
MaxSessions=10
|
||||
KillDisconnected=false
|
||||
IdleTimeLimit=0
|
||||
DisconnectedTimeLimit=0
|
||||
Policy=UBD
|
||||
|
||||
[Logging]
|
||||
LogFile=xrdp-sesman.log
|
||||
@ -1209,72 +1184,100 @@ param2=-nolisten
|
||||
param3=tcp
|
||||
param4=-dpi
|
||||
param5=96
|
||||
|
||||
[Xvnc]
|
||||
param1=-bs
|
||||
param2=-nolisten
|
||||
param3=tcp
|
||||
param4=-localhost
|
||||
param5=-dpi
|
||||
param6=96
|
||||
EOF
|
||||
|
||||
# Erstelle .xsession für XFCE
|
||||
progress "Konfiguriere XFCE-Sessions..."
|
||||
|
||||
# Root-Passwort für RDP setzen
|
||||
progress "Setze Root-Passwort für RDP-Zugang..."
|
||||
# Root .xsession
|
||||
cat > /root/.xsession << 'EOF'
|
||||
#!/bin/bash
|
||||
export XDG_SESSION_DESKTOP=xfce
|
||||
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share
|
||||
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
|
||||
exec startxfce4
|
||||
EOF
|
||||
chmod +x /root/.xsession
|
||||
|
||||
# User .xsession (falls user existiert)
|
||||
if id "user" &>/dev/null; then
|
||||
cat > /home/user/.xsession << 'EOF'
|
||||
#!/bin/bash
|
||||
export XDG_SESSION_DESKTOP=xfce
|
||||
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share
|
||||
export XDG_CONFIG_DIRS=/etc/xdg/xdg-xfce:/etc/xdg
|
||||
exec startxfce4
|
||||
EOF
|
||||
chown user:user /home/user/.xsession
|
||||
chmod +x /home/user/.xsession
|
||||
fi
|
||||
|
||||
# Root-Passwort setzen
|
||||
progress "Setze Root-Passwort für RDP..."
|
||||
echo "root:744563017196A" | chpasswd || error "Kann Root-Passwort nicht setzen"
|
||||
|
||||
# Polkit-Regel für xrdp erstellen
|
||||
progress "Erstelle Polkit-Regeln für xrdp..."
|
||||
mkdir -p /etc/polkit-1/localauthority/50-local.d
|
||||
# Log-Verzeichnisse erstellen mit korrekten Berechtigungen
|
||||
progress "Erstelle Log-Verzeichnisse..."
|
||||
mkdir -p /var/log
|
||||
touch /var/log/xrdp.log /var/log/xrdp-sesman.log 2>/dev/null || true
|
||||
chown xrdp:xrdp /var/log/xrdp*.log 2>/dev/null || true
|
||||
chmod 644 /var/log/xrdp*.log 2>/dev/null || true
|
||||
|
||||
cat > /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << 'EOF'
|
||||
[Allow Colord all Users]
|
||||
Identity=unix-user:*
|
||||
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
|
||||
ResultAny=no
|
||||
ResultInactive=no
|
||||
ResultActive=yes
|
||||
EOF
|
||||
# Erstelle xrdp-Konfigurationsverzeichnisse
|
||||
mkdir -p /etc/xrdp/cert /var/run/xrdp
|
||||
chown xrdp:xrdp /etc/xrdp/cert /var/run/xrdp 2>/dev/null || true
|
||||
|
||||
# xrdp-Service aktivieren und starten
|
||||
# Services aktivieren und starten
|
||||
progress "Starte xrdp-Services..."
|
||||
systemctl enable xrdp
|
||||
|
||||
# systemd daemon reload
|
||||
systemctl daemon-reload
|
||||
|
||||
# Services aktivieren
|
||||
systemctl enable xrdp-sesman
|
||||
systemctl enable xrdp
|
||||
|
||||
# Services stoppen falls sie laufen
|
||||
systemctl stop xrdp 2>/dev/null || true
|
||||
systemctl stop xrdp-sesman 2>/dev/null || true
|
||||
|
||||
# Services neu starten
|
||||
# Services starten (sesman zuerst)
|
||||
systemctl start xrdp-sesman
|
||||
sleep 2
|
||||
systemctl start xrdp
|
||||
|
||||
# Warte und prüfe Status
|
||||
sleep 3
|
||||
|
||||
# Prüfe sesman-Status
|
||||
if systemctl is-active --quiet xrdp-sesman; then
|
||||
success "✅ xrdp-sesman erfolgreich gestartet"
|
||||
|
||||
# Jetzt xrdp starten
|
||||
systemctl start xrdp
|
||||
sleep 3
|
||||
|
||||
if systemctl is-active --quiet xrdp; then
|
||||
success "✅ xrdp erfolgreich gestartet"
|
||||
else
|
||||
warning "⚠️ xrdp konnte nicht gestartet werden"
|
||||
journalctl -u xrdp --no-pager -l | tail -10
|
||||
fi
|
||||
else
|
||||
warning "⚠️ xrdp-sesman konnte nicht gestartet werden"
|
||||
journalctl -u xrdp-sesman --no-pager -l | tail -10
|
||||
fi
|
||||
|
||||
cd "$CURRENT_DIR"
|
||||
|
||||
# Status prüfen
|
||||
if systemctl is-active --quiet xrdp; then
|
||||
log "✅ Remote-Zugang konfiguriert:"
|
||||
# Finaler Status-Check
|
||||
if systemctl is-active --quiet xrdp && systemctl is-active --quiet xrdp-sesman; then
|
||||
log "✅ Remote-Zugang vollständig konfiguriert:"
|
||||
log " 📡 SSH: user:raspberry (Port 22)"
|
||||
log " 🖥️ RDP: root:744563017196A (Port 3389)"
|
||||
log " 🖥️ RDP: user:raspberry (Port 3389)"
|
||||
elif systemctl is-active --quiet ssh; then
|
||||
log "✅ SSH-Zugang konfiguriert:"
|
||||
log " 📡 SSH: user:raspberry (Port 22)"
|
||||
warning "⚠️ RDP-Installation unvollständig"
|
||||
info "Manuelle Überprüfung erforderlich:"
|
||||
info " systemctl status xrdp"
|
||||
info " systemctl status xrdp-sesman"
|
||||
info " journalctl -u xrdp -f"
|
||||
else
|
||||
warning "⚠️ xrdp-Service konnte nicht gestartet werden - starte Debugging..."
|
||||
debug_xrdp_issues
|
||||
|
||||
# Nach Debugging nochmal prüfen
|
||||
if systemctl is-active --quiet xrdp; then
|
||||
log "✅ Remote-Zugang nach Debugging konfiguriert:"
|
||||
log " 📡 SSH: user:raspberry (Port 22)"
|
||||
log " 🖥️ RDP: root:744563017196A (Port 3389)"
|
||||
else
|
||||
log "✅ SSH-Zugang konfiguriert:"
|
||||
log " 📡 SSH: user:raspberry (Port 22)"
|
||||
warning "⚠️ RDP-Zugang konnte nicht konfiguriert werden"
|
||||
info "Manuelle Fehlerbehebung erforderlich - siehe Logs"
|
||||
fi
|
||||
error "❌ Weder SSH noch RDP konnten konfiguriert werden"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -1291,23 +1294,45 @@ configure_firewall() {
|
||||
systemctl start firewalld
|
||||
|
||||
# Warte kurz bis firewalld vollständig gestartet ist
|
||||
sleep 3
|
||||
sleep 5
|
||||
|
||||
progress "Konfiguriere firewalld-Zonen und -Regeln..."
|
||||
|
||||
# Zone definieren
|
||||
firewall-cmd --permanent --new-zone=myp-backend 2>/dev/null || true
|
||||
# Firewall-Status prüfen
|
||||
if ! firewall-cmd --state >/dev/null 2>&1; then
|
||||
error "firewalld ist nicht aktiv oder reagiert nicht"
|
||||
fi
|
||||
|
||||
# Bestehende Zone entfernen falls vorhanden
|
||||
progress "Entferne bestehende myp-backend Zone falls vorhanden..."
|
||||
if firewall-cmd --permanent --get-zones | grep -q "myp-backend"; then
|
||||
log "Entferne bestehende myp-backend Zone..."
|
||||
firewall-cmd --permanent --delete-zone=myp-backend 2>/dev/null || true
|
||||
firewall-cmd --reload
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
# Zone neu erstellen
|
||||
progress "Erstelle neue myp-backend Zone..."
|
||||
if ! firewall-cmd --permanent --new-zone=myp-backend; then
|
||||
error "Fehler beim Erstellen der myp-backend Zone"
|
||||
fi
|
||||
|
||||
# Konfiguration neu laden
|
||||
firewall-cmd --reload
|
||||
sleep 2
|
||||
|
||||
# Erweiterte Netzwerk-Quellen definieren (nur IPv4)
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source=192.168.0.0/16
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source=127.0.0.1/32
|
||||
progress "Füge Netzwerk-Quellen hinzu..."
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source=192.168.0.0/16 || error "Fehler beim Hinzufügen des 192.168.0.0/16 Netzwerks"
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source=127.0.0.1/32 || error "Fehler beim Hinzufügen von localhost"
|
||||
|
||||
# Lokaler Hostname "raspberrypi" hinzufügen
|
||||
local local_hostname="raspberrypi"
|
||||
progress "Füge lokalen Hostname hinzu: $local_hostname"
|
||||
local local_ip=$(getent hosts "$local_hostname" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
||||
if [ -n "$local_ip" ]; then
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source="$local_ip/32" 2>/dev/null || true
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source="$local_ip/32" 2>/dev/null || warning "Konnte lokalen Hostname nicht hinzufügen"
|
||||
log "✅ Lokaler Hostname $local_hostname hinzugefügt: $local_ip"
|
||||
else
|
||||
info "Lokaler Hostname $local_hostname nicht auflösbar - wird beim nächsten Boot verfügbar sein"
|
||||
@ -1317,51 +1342,100 @@ configure_firewall() {
|
||||
progress "Füge Frontend-Server hinzu: m040tbaraspi001"
|
||||
local frontend_ip=$(getent hosts "m040tbaraspi001" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
||||
if [ -n "$frontend_ip" ]; then
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_ip/32" 2>/dev/null || true
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_ip/32" 2>/dev/null || warning "Konnte Frontend-Server IP nicht hinzufügen"
|
||||
log "✅ Frontend-Server m040tbaraspi001 hinzugefügt: $frontend_ip"
|
||||
else
|
||||
# Versuche auch mit FQDN
|
||||
local frontend_fqdn_ip=$(getent hosts "m040tbaraspi001.de040.corpintra.net" | awk '{print $1}' | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -1 2>/dev/null || true)
|
||||
if [ -n "$frontend_fqdn_ip" ]; then
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_fqdn_ip/32" 2>/dev/null || true
|
||||
firewall-cmd --permanent --zone=myp-backend --add-source="$frontend_fqdn_ip/32" 2>/dev/null || warning "Konnte Frontend-Server FQDN nicht hinzufügen"
|
||||
log "✅ Frontend-Server m040tbaraspi001.de040.corpintra.net hinzugefügt: $frontend_fqdn_ip"
|
||||
else
|
||||
info "Frontend-Server m040tbaraspi001 nicht auflösbar - überspringe"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Ports und Services hinzufügen
|
||||
progress "Konfiguriere Ports und Services..."
|
||||
|
||||
# HTTPS für API & Kiosk zulassen
|
||||
firewall-cmd --permanent --zone=myp-backend --add-port=443/tcp
|
||||
firewall-cmd --permanent --zone=myp-backend --add-port=443/tcp || error "Fehler beim Hinzufügen von Port 443"
|
||||
|
||||
# SSH für Wartung
|
||||
firewall-cmd --permanent --zone=myp-backend --add-service=ssh
|
||||
firewall-cmd --permanent --zone=myp-backend --add-service=ssh || error "Fehler beim Hinzufügen des SSH-Service"
|
||||
|
||||
# RDP für Remote-Desktop
|
||||
firewall-cmd --permanent --zone=myp-backend --add-port=3389/tcp
|
||||
firewall-cmd --permanent --zone=myp-backend --add-port=3389/tcp || error "Fehler beim Hinzufügen von Port 3389"
|
||||
|
||||
# IPv6 in firewalld deaktivieren
|
||||
progress "Deaktiviere IPv6 in firewalld..."
|
||||
firewall-cmd --permanent --set-target=DROP --zone=public --family=ipv6 2>/dev/null || true
|
||||
firewall-cmd --permanent --set-target=DROP --zone=myp-backend --family=ipv6 2>/dev/null || true
|
||||
firewall-cmd --permanent --set-target=DROP --zone=public --family=ipv6 2>/dev/null || warning "IPv6 konnte nicht in public Zone deaktiviert werden"
|
||||
firewall-cmd --permanent --set-target=DROP --zone=myp-backend --family=ipv6 2>/dev/null || warning "IPv6 konnte nicht in myp-backend Zone deaktiviert werden"
|
||||
|
||||
# Default-Zone setzen
|
||||
firewall-cmd --set-default-zone=myp-backend
|
||||
progress "Setze Default-Zone..."
|
||||
firewall-cmd --set-default-zone=myp-backend || error "Fehler beim Setzen der Default-Zone"
|
||||
|
||||
# Änderungen übernehmen
|
||||
firewall-cmd --reload
|
||||
progress "Lade Firewall-Konfiguration neu..."
|
||||
firewall-cmd --reload || error "Fehler beim Neuladen der Firewall-Konfiguration"
|
||||
|
||||
# Kurz warten und Status prüfen
|
||||
sleep 3
|
||||
|
||||
# Firewall-Status anzeigen
|
||||
progress "Firewall-Konfiguration:"
|
||||
firewall-cmd --list-all-zones | grep -A 15 "myp-backend" || true
|
||||
if firewall-cmd --list-all --zone=myp-backend 2>/dev/null; then
|
||||
log "✅ Firewall-Konfiguration erfolgreich angezeigt"
|
||||
else
|
||||
warning "⚠️ Firewall-Status konnte nicht angezeigt werden"
|
||||
fi
|
||||
|
||||
log "✅ Firewall konfiguriert:"
|
||||
log " 🔒 Zone: myp-backend"
|
||||
log " 🌐 Netzwerk: 192.168.0.0/16 (nur IPv4)"
|
||||
log " 🏠 Localhost: 127.0.0.1"
|
||||
log " 🖥️ Lokaler Host: raspberrypi"
|
||||
log " 📡 Frontend-Server: m040tbaraspi001"
|
||||
log " 🔌 Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)"
|
||||
log " 🚫 IPv6 vollständig blockiert"
|
||||
# Finale Validierung
|
||||
progress "Validiere Firewall-Konfiguration..."
|
||||
local validation_errors=0
|
||||
|
||||
# Prüfe ob Zone existiert
|
||||
if ! firewall-cmd --get-zones | grep -q "myp-backend"; then
|
||||
error "Zone myp-backend wurde nicht korrekt erstellt"
|
||||
((validation_errors++))
|
||||
fi
|
||||
|
||||
# Prüfe Default-Zone
|
||||
if [ "$(firewall-cmd --get-default-zone)" != "myp-backend" ]; then
|
||||
warning "Default-Zone ist nicht myp-backend"
|
||||
((validation_errors++))
|
||||
fi
|
||||
|
||||
# Prüfe Ports
|
||||
if ! firewall-cmd --zone=myp-backend --query-port=443/tcp 2>/dev/null; then
|
||||
warning "Port 443 nicht korrekt konfiguriert"
|
||||
((validation_errors++))
|
||||
fi
|
||||
|
||||
if ! firewall-cmd --zone=myp-backend --query-port=3389/tcp 2>/dev/null; then
|
||||
warning "Port 3389 nicht korrekt konfiguriert"
|
||||
((validation_errors++))
|
||||
fi
|
||||
|
||||
if ! firewall-cmd --zone=myp-backend --query-service=ssh 2>/dev/null; then
|
||||
warning "SSH-Service nicht korrekt konfiguriert"
|
||||
((validation_errors++))
|
||||
fi
|
||||
|
||||
if [ $validation_errors -eq 0 ]; then
|
||||
log "✅ Firewall konfiguriert und validiert:"
|
||||
log " 🔒 Zone: myp-backend (als Default gesetzt)"
|
||||
log " 🌐 Netzwerk: 192.168.0.0/16 (nur IPv4)"
|
||||
log " 🏠 Localhost: 127.0.0.1"
|
||||
log " 🖥️ Lokaler Host: raspberrypi"
|
||||
log " 📡 Frontend-Server: m040tbaraspi001"
|
||||
log " 🔌 Ports: 443/tcp (HTTPS), 22/tcp (SSH), 3389/tcp (RDP)"
|
||||
log " 🚫 IPv6 vollständig blockiert"
|
||||
else
|
||||
warning "⚠️ Firewall-Konfiguration mit $validation_errors Fehlern abgeschlossen"
|
||||
info "System funktioniert möglicherweise trotzdem - manuelle Überprüfung empfohlen"
|
||||
fi
|
||||
}
|
||||
|
||||
# =========================== REMOTE-ZUGANG TESTEN ===========================
|
||||
@ -1380,31 +1454,25 @@ test_remote_access() {
|
||||
warning "⚠️ SSH-Port 22 nicht erreichbar"
|
||||
fi
|
||||
else
|
||||
warning "⚠️ SSH-Service läuft nicht - versuche Neustart..."
|
||||
systemctl restart ssh 2>/dev/null || true
|
||||
sleep 2
|
||||
if systemctl is-active --quiet ssh; then
|
||||
success "✅ SSH-Service nach Neustart aktiv"
|
||||
else
|
||||
error "❌ SSH-Service konnte nicht gestartet werden"
|
||||
fi
|
||||
warning "⚠️ SSH-Service läuft nicht"
|
||||
fi
|
||||
|
||||
# RDP-Service testen
|
||||
progress "Teste RDP-Service..."
|
||||
# RDP-Services testen
|
||||
progress "Teste RDP-Services..."
|
||||
|
||||
local xrdp_sesman_status="❌"
|
||||
local xrdp_status="❌"
|
||||
|
||||
# Prüfe xrdp-sesman zuerst
|
||||
if systemctl is-active --quiet xrdp-sesman; then
|
||||
xrdp_sesman_status="✅"
|
||||
success "✅ xrdp-sesman läuft"
|
||||
else
|
||||
warning "⚠️ xrdp-sesman läuft nicht - versuche Neustart..."
|
||||
systemctl restart xrdp-sesman 2>/dev/null || true
|
||||
sleep 2
|
||||
warning "⚠️ xrdp-sesman läuft nicht"
|
||||
fi
|
||||
|
||||
# Prüfe xrdp
|
||||
if systemctl is-active --quiet xrdp; then
|
||||
success "✅ RDP-Service läuft"
|
||||
xrdp_status="✅"
|
||||
success "✅ xrdp läuft"
|
||||
|
||||
# RDP-Port testen
|
||||
if ss -tlnp | grep -q ":3389 "; then
|
||||
@ -1413,16 +1481,7 @@ test_remote_access() {
|
||||
warning "⚠️ RDP-Port 3389 nicht erreichbar"
|
||||
fi
|
||||
else
|
||||
warning "⚠️ RDP-Service läuft nicht - versuche Neustart..."
|
||||
systemctl restart xrdp 2>/dev/null || true
|
||||
sleep 3
|
||||
if systemctl is-active --quiet xrdp; then
|
||||
success "✅ RDP-Service nach Neustart aktiv"
|
||||
else
|
||||
warning "⚠️ RDP-Service konnte nicht gestartet werden"
|
||||
info "Prüfe Logs mit: journalctl -u xrdp -f"
|
||||
info "Prüfe sesman Logs mit: journalctl -u xrdp-sesman -f"
|
||||
fi
|
||||
warning "⚠️ xrdp läuft nicht"
|
||||
fi
|
||||
|
||||
# Firewall-Status testen
|
||||
@ -1430,10 +1489,6 @@ test_remote_access() {
|
||||
if systemctl is-active --quiet firewalld; then
|
||||
success "✅ Firewall läuft"
|
||||
|
||||
# Aktive Zone anzeigen
|
||||
local active_zone=$(firewall-cmd --get-active-zones 2>/dev/null | head -1 || echo "Keine Zone aktiv")
|
||||
info "Aktive Zone: $active_zone"
|
||||
|
||||
# Prüfe ob Ports offen sind
|
||||
if firewall-cmd --zone=myp-backend --query-port=22/tcp 2>/dev/null; then
|
||||
success "✅ SSH-Port in Firewall freigegeben"
|
||||
@ -1455,12 +1510,21 @@ test_remote_access() {
|
||||
local ip_address=$(ip route get 1.1.1.1 2>/dev/null | awk '{print $7}' | head -1 || echo "Unbekannt")
|
||||
if [ "$ip_address" != "Unbekannt" ]; then
|
||||
success "✅ Netzwerk-Interface aktiv: $ip_address"
|
||||
info "SSH-Zugang: ssh user@$ip_address"
|
||||
info "RDP-Zugang: $ip_address:3389"
|
||||
info "Zugang-URLs:"
|
||||
info " SSH: ssh user@$ip_address"
|
||||
if [ "$xrdp_status" = "✅" ]; then
|
||||
info " RDP: $ip_address:3389 (root:744563017196A oder user:raspberry)"
|
||||
fi
|
||||
else
|
||||
warning "⚠️ Keine Netzwerk-IP ermittelt"
|
||||
fi
|
||||
|
||||
# Status-Zusammenfassung
|
||||
log "📊 Service-Status:"
|
||||
log " SSH: $(systemctl is-active --quiet ssh && echo "✅ Aktiv" || echo "❌ Inaktiv")"
|
||||
log " xrdp-sesman: $xrdp_sesman_status $(systemctl is-active --quiet xrdp-sesman && echo "Aktiv" || echo "Inaktiv")"
|
||||
log " xrdp: $xrdp_status $(systemctl is-active --quiet xrdp && echo "Aktiv" || echo "Inaktiv")"
|
||||
|
||||
log "✅ Remote-Zugang-Test abgeschlossen"
|
||||
}
|
||||
|
||||
@ -1503,80 +1567,6 @@ configure_hostname() {
|
||||
fi
|
||||
}
|
||||
|
||||
# =========================== XRDP DEBUGGING ===========================
|
||||
debug_xrdp_issues() {
|
||||
log "=== XRDP DEBUGGING ==="
|
||||
|
||||
progress "Analysiere xrdp-Probleme..."
|
||||
|
||||
# Prüfe xrdp-Logs
|
||||
if [ -f /var/log/xrdp.log ]; then
|
||||
local xrdp_errors=$(tail -20 /var/log/xrdp.log | grep -i "error\|fail\|denied" | wc -l)
|
||||
if [ "$xrdp_errors" -gt 0 ]; then
|
||||
warning "⚠️ Fehler in xrdp.log gefunden:"
|
||||
tail -10 /var/log/xrdp.log | grep -i "error\|fail\|denied" || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Prüfe sesman-Logs
|
||||
if [ -f /var/log/xrdp-sesman.log ]; then
|
||||
local sesman_errors=$(tail -20 /var/log/xrdp-sesman.log | grep -i "error\|fail\|denied" | wc -l)
|
||||
if [ "$sesman_errors" -gt 0 ]; then
|
||||
warning "⚠️ Fehler in xrdp-sesman.log gefunden:"
|
||||
tail -10 /var/log/xrdp-sesman.log | grep -i "error\|fail\|denied" || true
|
||||
fi
|
||||
fi
|
||||
|
||||
# Prüfe Berechtigungen
|
||||
progress "Prüfe xrdp-Berechtigungen..."
|
||||
if [ ! -r /etc/xrdp/xrdp.ini ]; then
|
||||
warning "⚠️ xrdp.ini nicht lesbar"
|
||||
fi
|
||||
|
||||
if [ ! -r /etc/xrdp/sesman.ini ]; then
|
||||
warning "⚠️ sesman.ini nicht lesbar"
|
||||
fi
|
||||
|
||||
# Prüfe ob XFCE installiert ist
|
||||
if ! command -v startxfce4 >/dev/null 2>&1; then
|
||||
warning "⚠️ XFCE nicht gefunden - installiere..."
|
||||
apt-get install -y xfce4 xfce4-goodies dbus-x11 || true
|
||||
fi
|
||||
|
||||
# Prüfe Polkit
|
||||
if [ ! -f /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla ]; then
|
||||
warning "⚠️ Polkit-Regel fehlt - erstelle..."
|
||||
mkdir -p /etc/polkit-1/localauthority/50-local.d
|
||||
cat > /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla << 'EOF'
|
||||
[Allow Colord all Users]
|
||||
Identity=unix-user:*
|
||||
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
|
||||
ResultAny=no
|
||||
ResultInactive=no
|
||||
ResultActive=yes
|
||||
EOF
|
||||
fi
|
||||
|
||||
# Versuche Services neu zu starten
|
||||
progress "Starte xrdp-Services neu..."
|
||||
systemctl stop xrdp xrdp-sesman 2>/dev/null || true
|
||||
sleep 2
|
||||
systemctl start xrdp-sesman
|
||||
sleep 2
|
||||
systemctl start xrdp
|
||||
sleep 3
|
||||
|
||||
if systemctl is-active --quiet xrdp; then
|
||||
success "✅ xrdp nach Debugging erfolgreich gestartet"
|
||||
else
|
||||
warning "⚠️ xrdp konnte auch nach Debugging nicht gestartet werden"
|
||||
info "Manuelle Prüfung erforderlich:"
|
||||
info " journalctl -u xrdp -f"
|
||||
info " journalctl -u xrdp-sesman -f"
|
||||
info " tail -f /var/log/xrdp.log"
|
||||
fi
|
||||
}
|
||||
|
||||
# =========================== HAUPTPROGRAMM ===========================
|
||||
main() {
|
||||
# Erstelle Log-Datei
|
||||
|
Loading…
x
Reference in New Issue
Block a user