🎉 Updated file structure for deprecated modules, moved 'app_backup.py' to 'deprecated/app_backup.py'. Also updated 'install_raspberry_pi.sh'. 📚

This commit is contained in:
Till Tomczak 2025-05-31 16:44:32 +02:00
parent c7297bfbc8
commit 62f227dc78
3 changed files with 137 additions and 234 deletions

View File

@ -1991,6 +1991,15 @@ greeter-show-manual-login=false
autologin-in-background=false autologin-in-background=false
# Session-Setup # Session-Setup
session-setup-script=/usr/share/lightdm/setup-kiosk-session.sh session-setup-script=/usr/share/lightdm/setup-kiosk-session.sh
[SeatDefaults]
# Zusätzliche Sicherheitseinstellungen
autologin-user=$KIOSK_USER
autologin-user-timeout=0
autologin-session=openbox
greeter-hide-users=true
greeter-show-manual-login=false
allow-user-switching=false
EOF EOF
progress "Erstelle Session-Setup-Skript..." progress "Erstelle Session-Setup-Skript..."
@ -2029,6 +2038,35 @@ ExecStart=-/sbin/agetty --autologin $KIOSK_USER --noclear %I \$TERM
Type=simple Type=simple
EOF EOF
# Aktiviere getty@tty1 Service für automatischen Login
systemctl enable getty@tty1.service
progress "Konfiguriere systemd für automatischen grafischen Start..."
# Setze graphical.target als Standard
systemctl set-default graphical.target
# Erstelle systemd-Override für LightDM
mkdir -p "/etc/systemd/system/lightdm.service.d"
cat > "/etc/systemd/system/lightdm.service.d/autologin-override.conf" << EOF
[Unit]
After=multi-user.target network.target myp-druckerverwaltung.service
Wants=myp-druckerverwaltung.service
[Service]
# Automatischer Restart bei Fehlern
Restart=always
RestartSec=3
# Umgebungsvariablen für Kiosk
Environment=DISPLAY=:0
Environment=KIOSK_MODE=1
# Verzögerung für Backend-Start
ExecStartPre=/bin/bash -c 'for i in {1..30}; do if curl -s http://localhost:5000 >/dev/null 2>&1; then break; fi; sleep 2; done'
EOF
# Aktiviere LightDM Service
systemctl enable lightdm.service
progress "Erstelle Desktop-Session für Openbox..." progress "Erstelle Desktop-Session für Openbox..."
# Desktop-Session-Datei für Openbox # Desktop-Session-Datei für Openbox
@ -2083,13 +2121,48 @@ unclutter -idle 0.5 -root &
exec openbox-session exec openbox-session
EOF EOF
# Log-Dateiberechtigungen sind bereits korrekt gesetzt (root:root) chmod +x "$KIOSK_HOME/.xsessionrc"
info "Log-Dateiberechtigungen erfolgreich konfiguriert" chmod +x "$KIOSK_HOME/.xinitrc"
# Konfiguriere PAM für automatischen Login
progress "Konfiguriere PAM für automatischen Login..."
# PAM-Konfiguration für LightDM autologin
cat > "/etc/pam.d/lightdm-autologin" << EOF
# PAM configuration for LightDM autologin
auth required pam_env.so
auth required pam_permit.so
@include common-account
session required pam_limits.so
@include common-session
@include common-password
EOF
# Zusätzliche Autostart-Mechanismen für maximale Zuverlässigkeit
progress "Konfiguriere mehrfache Autostart-Absicherung..."
# 1. BASHRC AUTOSTART
cat >> "$KIOSK_HOME/.bashrc" << 'EOF'
# ===== KIOSK AUTOSTART (BASHRC) =====
if [ -z "$SSH_CLIENT" ] && [ -z "$SSH_TTY" ] && [ -z "$KIOSK_STARTED" ]; then
export KIOSK_STARTED=1
# Prüfe ob wir auf tty1 sind und X noch nicht läuft
if [ "$(tty)" = "/dev/tty1" ] && [ -z "$DISPLAY" ]; then
echo "Starte X-Session automatisch..."
exec startx
fi
# Falls X läuft aber Kiosk-App nicht, starte sie
if [ -n "$DISPLAY" ] && ! pgrep -f "chromium.*kiosk" > /dev/null; then
echo "Starte Kiosk-Anwendung..."
exec $HOME/start-kiosk.sh
fi
fi fi
EOF EOF
# 3. PROFILE AUTOSTART # 2. PROFILE AUTOSTART
progress "Konfiguriere .profile autostart..."
cat >> "$KIOSK_HOME/.profile" << 'EOF' cat >> "$KIOSK_HOME/.profile" << 'EOF'
# ===== KIOSK AUTOSTART (PROFILE) ===== # ===== KIOSK AUTOSTART (PROFILE) =====
@ -2104,7 +2177,7 @@ if [ -z "$SSH_CLIENT" ] && [ -z "$SSH_TTY" ] && [ -z "$KIOSK_STARTED" ]; then
fi fi
EOF EOF
# 4. DESKTOP AUTOSTART # 3. DESKTOP AUTOSTART
progress "Konfiguriere XDG autostart..." progress "Konfiguriere XDG autostart..."
sudo -u "$KIOSK_USER" mkdir -p "$KIOSK_HOME/.config/autostart" sudo -u "$KIOSK_USER" mkdir -p "$KIOSK_HOME/.config/autostart"
@ -2122,29 +2195,39 @@ EOF
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.config/autostart/kiosk-app.desktop" chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.config/autostart/kiosk-app.desktop"
# 5. CRON AUTOSTART (ÜBERWACHUNG) # 4. CRON AUTOSTART (ÜBERWACHUNG)
progress "Konfiguriere Cron-Überwachung..." progress "Konfiguriere Cron-Überwachung..."
cat > "/etc/cron.d/kiosk-watchdog" << EOF cat > "/etc/cron.d/kiosk-watchdog" << EOF
# Kiosk-Überwachung: Startet Kiosk neu falls nicht läuft # Kiosk-Überwachung: Startet Kiosk neu falls nicht läuft
*/2 * * * * $KIOSK_USER /bin/bash -c 'if ! pgrep -f "chromium.*kiosk" > /dev/null; then echo "\$(date): Kiosk-Watchdog startet Anwendung neu" >> /var/log/kiosk-watchdog.log; DISPLAY=:0 $HOME/start-kiosk.sh & fi' */2 * * * * $KIOSK_USER /bin/bash -c 'if ! pgrep -f "chromium.*kiosk" > /dev/null; then echo "\$(date): Kiosk-Watchdog startet Anwendung neu" >> /var/log/kiosk-watchdog.log; DISPLAY=:0 $HOME/start-kiosk.sh & fi'
EOF EOF
# 6. RC.LOCAL FALLBACK # 5. RC.LOCAL FALLBACK
progress "Konfiguriere rc.local Fallback..." progress "Konfiguriere rc.local Fallback..."
cat > "/etc/rc.local" << EOF cat > "/etc/rc.local" << EOF
#!/bin/bash #!/bin/bash
# rc.local - Kiosk-Fallback # rc.local - Kiosk-Fallback
# Warte auf System-Initialisierung # Warte auf System-Initialisierung
sleep 10 sleep 15
# Starte Kiosk-Services falls nicht läuft
if ! systemctl is-active --quiet lightdm; then
systemctl start lightdm
fi
# Starte Backend-Service falls nicht läuft
if ! systemctl is-active --quiet myp-druckerverwaltung; then if ! systemctl is-active --quiet myp-druckerverwaltung; then
systemctl start myp-druckerverwaltung systemctl start myp-druckerverwaltung
sleep 5
fi
# Starte LightDM falls nicht läuft
if ! systemctl is-active --quiet lightdm; then
systemctl start lightdm
sleep 3
fi
# Prüfe ob Kiosk-Benutzer angemeldet ist, falls nicht, starte LightDM neu
sleep 10
if ! pgrep -u $KIOSK_USER > /dev/null; then
echo "\$(date): Kiosk-Benutzer nicht angemeldet - starte LightDM neu" >> /var/log/kiosk-fallback.log
systemctl restart lightdm
fi fi
# Logge Start # Logge Start
@ -2155,17 +2238,18 @@ EOF
chmod +x "/etc/rc.local" chmod +x "/etc/rc.local"
# 7. SYSTEMD SERVICE ÜBERWACHUNG # 6. SYSTEMD SERVICE ÜBERWACHUNG
progress "Konfiguriere Service-Überwachung..." progress "Konfiguriere Service-Überwachung..."
cat > "/etc/systemd/system/kiosk-watchdog.service" << EOF cat > "/etc/systemd/system/kiosk-watchdog.service" << EOF
[Unit] [Unit]
Description=Kiosk Watchdog Service Description=Kiosk Watchdog Service
After=multi-user.target After=multi-user.target lightdm.service
Wants=lightdm.service
[Service] [Service]
Type=simple Type=simple
User=root User=root
ExecStart=/bin/bash -c 'while true; do if ! systemctl is-active --quiet myp-kiosk; then systemctl start myp-kiosk; fi; sleep 30; done' ExecStart=/bin/bash -c 'while true; do if ! systemctl is-active --quiet lightdm; then echo "\$(date): LightDM nicht aktiv - starte neu" >> /var/log/kiosk-watchdog.log; systemctl start lightdm; fi; if ! pgrep -u $KIOSK_USER > /dev/null; then echo "\$(date): Kiosk-Benutzer nicht angemeldet - starte LightDM neu" >> /var/log/kiosk-watchdog.log; systemctl restart lightdm; fi; sleep 30; done'
Restart=always Restart=always
RestartSec=10 RestartSec=10
@ -2175,228 +2259,47 @@ EOF
systemctl enable kiosk-watchdog.service systemctl enable kiosk-watchdog.service
# 7. BOOT-PARAMETER OPTIMIERUNG
progress "Optimiere Boot-Parameter für automatischen Start..."
# Raspberry Pi spezifische Boot-Konfiguration
if [ -f "/boot/config.txt" ]; then
# GPU Memory für bessere Grafik-Performance
if ! grep -q "gpu_mem=" /boot/config.txt; then
echo "gpu_mem=128" >> /boot/config.txt
fi
# Disable Boot-Splash für schnelleren Start
if ! grep -q "disable_splash=" /boot/config.txt; then
echo "disable_splash=1" >> /boot/config.txt
fi
# Boot-Delay reduzieren
if ! grep -q "boot_delay=" /boot/config.txt; then
echo "boot_delay=0" >> /boot/config.txt
fi
fi
# Kernel-Parameter für schnelleren Boot
if [ -f "/boot/cmdline.txt" ]; then
# Entferne Boot-Splash und füge quiet hinzu
sed -i 's/splash//g' /boot/cmdline.txt
if ! grep -q "quiet" /boot/cmdline.txt; then
sed -i 's/$/ quiet/' /boot/cmdline.txt
fi
if ! grep -q "loglevel=3" /boot/cmdline.txt; then
sed -i 's/$/ loglevel=3/' /boot/cmdline.txt
fi
fi
# Berechtigungen finalisieren # Berechtigungen finalisieren
chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.config" chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.config"
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.bashrc" chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.bashrc"
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.profile" chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.profile"
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.xsessionrc"
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.xinitrc"
log "✅ Mehrfache Autostart-Absicherung implementiert" log "✅ Mehrfache Autostart-Absicherung mit Boot-Optimierung implementiert"
}
# ========================== AUTOSTART KONFIGURATION ==========================
configure_autostart() {
log "=== PHASE 7: AUTOSTART-KONFIGURATION ==="
# Systemd Service für Anwendung
progress "Erstelle Systemd-Service für Anwendung..."
cat > "/etc/systemd/system/myp-druckerverwaltung.service" << EOF
[Unit]
Description=MYP Druckerverwaltung Flask Application
After=network.target
[Service]
Type=simple
User=$APP_USER
Group=$APP_USER
WorkingDirectory=$APP_DIR
Environment=PATH=/usr/local/bin:/usr/bin:/bin
Environment=PYTHONPATH=$APP_DIR
ExecStart=/usr/bin/python3 $APP_DIR/app.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
# Systemd Service für LightDM Management (ersetzt den alten X-Server Service)
progress "Erstelle Systemd-Service für Display Manager..."
cat > "/etc/systemd/system/myp-display.service" << EOF
[Unit]
Description=MYP Display Manager Service
After=myp-druckerverwaltung.service network.target
Requires=myp-druckerverwaltung.service
Wants=myp-druckerverwaltung.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/bash -c 'while ! curl -s http://localhost:5000 > /dev/null; do sleep 2; done'
ExecStart=/bin/systemctl start lightdm
ExecStop=/bin/systemctl stop lightdm
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=graphical.target
EOF
# Systemd Service für Kiosk-Überwachung
progress "Erstelle erweiterten Kiosk-Überwachungs-Service..."
cat > "/etc/systemd/system/myp-kiosk-monitor.service" << EOF
[Unit]
Description=MYP Kiosk Monitor und Recovery Service
After=graphical.target lightdm.service
Requires=myp-druckerverwaltung.service
[Service]
Type=simple
User=root
ExecStart=/bin/bash -c '
while true; do
# Prüfe ob Anwendung läuft
if ! curl -s http://localhost:5000 > /dev/null; then
echo "\$(date): Anwendung nicht erreichbar - starte neu" >> /var/log/kiosk-monitor.log
systemctl restart myp-druckerverwaltung
sleep 10
fi
# Prüfe ob LightDM läuft
if ! systemctl is-active --quiet lightdm; then
echo "\$(date): LightDM nicht aktiv - starte neu" >> /var/log/kiosk-monitor.log
systemctl start lightdm
sleep 5
fi
# Prüfe ob Kiosk-Benutzer angemeldet ist
if ! pgrep -u $KIOSK_USER > /dev/null; then
echo "\$(date): Kiosk-Benutzer nicht angemeldet - starte LightDM neu" >> /var/log/kiosk-monitor.log
systemctl restart lightdm
sleep 10
fi
# Prüfe ob Chromium im Kiosk-Modus läuft
if ! pgrep -u $KIOSK_USER -f "chromium.*kiosk" > /dev/null; then
echo "\$(date): Chromium-Kiosk nicht gefunden - starte Kiosk-Session neu" >> /var/log/kiosk-monitor.log
# Versuche Kiosk-Neustart als Kiosk-Benutzer
sudo -u $KIOSK_USER DISPLAY=:0 /home/$KIOSK_USER/start-kiosk.sh &
fi
sleep 30
done
'
Restart=always
RestartSec=10
[Install]
WantedBy=graphical.target
EOF
# Nginx-Proxy-Konfiguration
progress "Konfiguriere Nginx..."
cat > "/etc/nginx/sites-available/myp-kiosk" << EOF
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
# Security Headers
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self';" always;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
# WebSocket-Support
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
# Timeout-Konfiguration
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Statische Dateien
location /static/ {
alias $APP_DIR/static/;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
EOF
# Nginx-Site aktivieren
rm -f /etc/nginx/sites-enabled/default
ln -sf /etc/nginx/sites-available/myp-kiosk /etc/nginx/sites-enabled/
# Erstelle systemd-logind Konfiguration für besseres Session-Management
progress "Konfiguriere systemd-logind für Kiosk..."
cat > "/etc/systemd/logind.conf.d/kiosk.conf" << EOF
[Login]
# Verhindere dass System bei Inaktivität heruntergefahren wird
IdleAction=ignore
IdleActionSec=infinity
# Verhindere Suspend/Hibernate
HandlePowerKey=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore
# Session-Einstellungen für Kiosk
KillUserProcesses=no
UserStopDelaySec=10
# Automatic VT allocation
ReserveVT=1
EOF
# Erstelle PAM-Konfiguration für Auto-Login
progress "Konfiguriere PAM für Auto-Login..."
cat > "/etc/pam.d/lightdm-autologin" << EOF
# PAM configuration for LightDM autologin
auth required pam_env.so
auth required pam_permit.so
@include common-account
session required pam_limits.so
@include common-session
@include common-password
EOF
# Services aktivieren
progress "Aktiviere Services..."
systemctl daemon-reload
systemctl enable myp-druckerverwaltung
systemctl enable nginx
systemctl enable myp-display
systemctl enable myp-kiosk-monitor
# SSH standardmäßig deaktivieren für Sicherheit
systemctl disable ssh || true
# Sicherstellen dass graphical.target Standard ist
systemctl set-default graphical.target
# Erstelle systemd override für bessere Kiosk-Integration
progress "Erstelle systemd-Overrides..."
mkdir -p "/etc/systemd/system/lightdm.service.d"
cat > "/etc/systemd/system/lightdm.service.d/kiosk-override.conf" << EOF
[Unit]
After=myp-druckerverwaltung.service
[Service]
# Automatischer Restart bei Fehlern
Restart=always
RestartSec=5
# Umgebungsvariablen für Kiosk
Environment=DISPLAY=:0
Environment=KIOSK_MODE=1
EOF
log "✅ Autostart konfiguriert mit LightDM-Integration"
} }
# ========================== SICHERHEIT ========================== # ========================== SICHERHEIT ==========================