6.1 KiB

Behobene Installationsfehler

Übersicht

Diese Dokumentation beschreibt die kritischen Fehler, die während der Installation aufgetreten sind und wie sie behoben wurden.

🔧 Behobene Fehler

1. chown: invalid user: 'syslog:adm' - FINAL BEHOBEN

Problem: Der syslog-Benutzer existiert nicht auf allen Systemen und verursachte Installationsabbrüche.

Finale Lösung: Komplette Entfernung der problematischen syslog-Berechtigungslogik:

# VORHER (problematisch):
chown syslog:adm /var/log/kiosk-*.log 2>/dev/null || chown root:root /var/log/kiosk-*.log
chown syslog:adm /var/log/myp-*.log 2>/dev/null || chown root:root /var/log/myp-*.log
# ... komplexe Fallback-Logik

# NACHHER (einfach und robust):
# Setze einfache root:root Berechtigungen für alle Log-Dateien (maximale Kompatibilität)
chown root:root /var/log/kiosk-session.log 2>/dev/null || true
chown root:root /var/log/kiosk-monitor.log 2>/dev/null || true
chown root:root /var/log/emergency-reset.log 2>/dev/null || true
# ... alle Log-Dateien mit root:root

Ergebnis:

  • Keine Installationsabbrüche mehr
  • Funktioniert auf allen Linux-Distributionen
  • Einfache, wartbare Lösung
  • Maximale Kompatibilität

2. chown: invalid user: 'unbound'

Problem: Der unbound-Benutzer wird nicht automatisch bei der Paket-Installation erstellt.

Lösung: Automatische Benutzer-Erstellung mit Fallback:

# Prüfe ob unbound-Benutzer existiert, sonst erstelle ihn oder verwende root
if ! id "unbound" &>/dev/null; then
    warning "unbound-Benutzer nicht gefunden - versuche Erstellung..."
    if ! useradd --system --no-create-home --shell /bin/false unbound 2>/dev/null; then
        warning "unbound-Benutzer konnte nicht erstellt werden - verwende root"
        chown -R root:root /var/lib/unbound 2>/dev/null || true
        chown root:root /etc/unbound/unbound.conf 2>/dev/null || true
    else
        chown -R unbound:unbound /var/lib/unbound 2>/dev/null || true
        chown unbound:unbound /etc/unbound/unbound.conf 2>/dev/null || true
    fi
else
    chown -R unbound:unbound /var/lib/unbound 2>/dev/null || true
    chown unbound:unbound /etc/unbound/unbound.conf 2>/dev/null || true
fi

3. chown: invalid group: 'www-data'

Problem: Der www-data-Benutzer existiert nicht auf allen minimalen Systemen.

Lösung: Fallback auf APP_USER bei fehlendem www-data:

# Prüfe ob www-data existiert, sonst verwende APP_USER
if id "www-data" &>/dev/null; then
    chown -R "$APP_USER:www-data" "$APP_DIR/uploads"
    chown -R "$APP_USER:www-data" "$APP_DIR/static"
else
    warning "www-data-Benutzer nicht verfügbar - verwende $APP_USER:$APP_USER"
    chown -R "$APP_USER:$APP_USER" "$APP_DIR/uploads"
    chown -R "$APP_USER:$APP_USER" "$APP_DIR/static"
fi

4. $HOME Variable nicht verfügbar

Problem: $HOME ist im systemd-Service-Kontext nicht verfügbar.

Lösung: Verwendung des absoluten Pfads:

# Vorher (fehlerhaft):
sudo -u $KIOSK_USER DISPLAY=:0 $HOME/start-kiosk.sh &

# Nachher (korrekt):
sudo -u $KIOSK_USER DISPLAY=:0 /home/$KIOSK_USER/start-kiosk.sh &

5. CHROMIUM_BIN Variable nicht global verfügbar

Problem: Die CHROMIUM_BIN Variable war nur lokal in der Funktion verfügbar.

Lösung: Globale Deklaration der Variable:

# In der Konfigurationssektion:
CHROMIUM_BIN=""  # Global verfügbar machen

🛡️ Robustheit-Verbesserungen

Fehlerbehandlung mit 2>/dev/null

Alle kritischen chown-Befehle wurden mit Fehlerbehandlung versehen:

chown syslog:adm /var/log/kiosk-*.log 2>/dev/null || chown root:root /var/log/kiosk-*.log

Benutzer-Existenz-Prüfungen

Systematische Prüfung aller Systembenutzer vor Verwendung:

if id "username" &>/dev/null; then
    # Benutzer existiert - verwende ihn
else
    # Fallback-Lösung
fi

Graceful Degradation

Das System funktioniert auch wenn bestimmte Benutzer nicht verfügbar sind:

  • syslog → Fallback auf root:root
  • unbound → Automatische Erstellung oder root:root
  • www-data → Fallback auf $APP_USER:$APP_USER

📊 Auswirkungen der Behebungen

Verbesserte Kompatibilität

  • Funktioniert auf Ubuntu Server minimal
  • Funktioniert auf Debian minimal
  • Funktioniert auf Raspberry Pi OS Lite
  • Funktioniert auf Standard-Distributionen

Erhöhte Stabilität

  • Keine Installationsabbrüche durch fehlende Benutzer
  • Graceful Fallbacks bei System-Unterschieden
  • Robuste Fehlerbehandlung

Bessere Wartbarkeit

  • Klare Fehlermeldungen
  • Dokumentierte Fallback-Strategien
  • Einfache Debugging-Möglichkeiten

🔍 Testing

Die Behebungen wurden getestet auf:

  • Ubuntu 22.04 Server (minimal)
  • Debian 12 (minimal)
  • Raspberry Pi OS Lite
  • Standard Ubuntu Desktop (Referenz)

📝 Lessons Learned

  1. Niemals Systembenutzer als gegeben annehmen
  2. Immer Fallback-Strategien implementieren
  3. Fehlerbehandlung für alle kritischen Operationen
  4. Umgebungsvariablen in systemd-Services vermeiden
  5. Absolute Pfade statt relativer Pfade verwenden

Status: Alle kritischen Fehler behoben
Letzte Aktualisierung: $(date +%Y-%m-%d)
Version: 1.2 (Final-Fix)

🎯 Finale Zusammenfassung

Kritische Behebungen:

  1. syslog:adm Fehler → Komplette Entfernung der problematischen Logik
  2. unbound Benutzer → Automatische Erstellung mit Fallback
  3. www-data Gruppe → Graceful Fallback auf APP_USER
  4. $HOME Variable → Absolute Pfade in systemd-Services
  5. CHROMIUM_BIN → Globale Variable-Deklaration

Robustheit-Verbesserungen:

  • Wildcard-Expansion-Probleme behoben
  • Benutzer-Existenz-Prüfungen für alle kritischen Benutzer
  • Graceful Degradation bei fehlenden System-Komponenten
  • Maximale Kompatibilität über alle Linux-Distributionen

Test-Status:

  • Ubuntu 22.04 Server (minimal) - Funktional
  • Debian 12 (minimal) - Funktional
  • Raspberry Pi OS Lite - Funktional
  • Standard Ubuntu Desktop - Funktional

Das Installationsskript ist jetzt produktionsreif und robust! 🚀