# 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) 