Projektarbeit-MYP/backend/install/install-kiosk.sh

216 lines
5.5 KiB
Bash

#!/bin/bash
# MYP Kiosk Installation Script
# Installiert und konfiguriert das komplette Kiosk-System
set -euo pipefail
# Farben für Output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Logging-Funktionen
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Prüfe Root-Rechte
if [[ $EUID -ne 0 ]]; then
log_error "Dieses Skript muss als root ausgeführt werden"
exit 1
fi
log_info "Starte MYP Kiosk Installation..."
# System-Update
log_info "Aktualisiere System-Pakete..."
apt update && apt upgrade -y
# Installiere benötigte Pakete
log_info "Installiere benötigte Pakete..."
apt install -y \
google-chrome-stable \
xorg \
openbox \
lightdm \
curl \
systemd \
python3.11 \
python3.11-venv \
python3-pip \
unclutter \
xdotool
# Erstelle MYP-Benutzer falls nicht vorhanden
if ! id "myp" &>/dev/null; then
log_info "Erstelle MYP-Benutzer..."
useradd -m -s /bin/bash myp
usermod -aG audio,video,input myp
else
log_info "MYP-Benutzer bereits vorhanden"
fi
# Erstelle Verzeichnisstruktur
log_info "Erstelle Verzeichnisstruktur..."
mkdir -p /opt/myp/{backend,scripts,logs}
mkdir -p /home/myp/.config/openbox
mkdir -p /home/myp/.config/google-chrome
# Kopiere Service-Dateien
log_info "Installiere Service-Dateien..."
cp myp-backend.service /etc/systemd/system/
cp myp-kiosk.service /etc/systemd/system/
# Kopiere und setze Berechtigungen für Skripte
log_info "Installiere Kiosk-Skripte..."
cp kiosk-start.sh /opt/myp/scripts/
chmod +x /opt/myp/scripts/kiosk-start.sh
# Erstelle Openbox-Konfiguration für automatischen Kiosk-Start
log_info "Konfiguriere Openbox für Kiosk-Modus..."
cat > /home/myp/.config/openbox/autostart << 'EOF'
# MYP Kiosk Autostart
# Deaktiviere Bildschirmschoner und Energieverwaltung
xset -dpms &
xset s off &
xset s noblank &
# Verstecke Mauszeiger bei Inaktivität
unclutter -idle 0.1 -root &
# Verhindere versehentliche Tastenkombinationen
xdotool key ctrl+alt+t &
# Starte Kiosk-Service
systemctl --user start myp-kiosk.service &
EOF
# Erstelle LightDM-Konfiguration für automatischen Login
log_info "Konfiguriere automatischen Login..."
cat > /etc/lightdm/lightdm.conf.d/10-myp-kiosk.conf << 'EOF'
[Seat:*]
autologin-user=myp
autologin-user-timeout=0
user-session=openbox
autologin-session=openbox
greeter-session=unity-greeter
allow-guest=false
EOF
# Erstelle Desktop-Session für MYP
log_info "Erstelle Desktop-Session..."
cat > /usr/share/xsessions/myp-kiosk.desktop << 'EOF'
[Desktop Entry]
Name=MYP Kiosk
Comment=MYP Reservation Platform Kiosk Mode
Exec=openbox-session
Type=Application
DesktopNames=MYP
EOF
# Setze Berechtigungen
log_info "Setze Berechtigungen..."
chown -R myp:myp /home/myp
chown -R myp:myp /opt/myp
chmod 755 /opt/myp/scripts/kiosk-start.sh
# Systemd-Services aktivieren
log_info "Aktiviere Systemd-Services..."
systemctl daemon-reload
systemctl enable myp-backend.service
systemctl enable myp-kiosk.service
# Erstelle Kiosk-Überwachungsskript
log_info "Erstelle Überwachungsskript..."
cat > /opt/myp/scripts/kiosk-monitor.sh << 'EOF'
#!/bin/bash
# MYP Kiosk Monitor - Überwacht und startet Kiosk-Prozesse neu
while true; do
# Prüfe ob Chrome läuft
if ! pgrep -f "google-chrome.*kiosk" > /dev/null; then
echo "$(date): Chrome Kiosk nicht gefunden, starte neu..." >> /opt/myp/logs/kiosk-monitor.log
systemctl restart myp-kiosk.service
fi
# Prüfe ob Backend läuft
if ! curl -k -s https://localhost:443 > /dev/null 2>&1; then
echo "$(date): Backend nicht erreichbar, starte neu..." >> /opt/myp/logs/kiosk-monitor.log
systemctl restart myp-backend.service
fi
sleep 30
done
EOF
chmod +x /opt/myp/scripts/kiosk-monitor.sh
# Erstelle Monitor-Service
cat > /etc/systemd/system/myp-monitor.service << 'EOF'
[Unit]
Description=MYP Kiosk Monitor
After=myp-backend.service myp-kiosk.service
[Service]
Type=simple
User=root
ExecStart=/opt/myp/scripts/kiosk-monitor.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
systemctl enable myp-monitor.service
# Deaktiviere Desktop-Umgebung und unnötige Services
log_info "Deaktiviere unnötige Services..."
systemctl disable gdm3 2>/dev/null || true
systemctl disable sddm 2>/dev/null || true
systemctl disable plymouth 2>/dev/null || true
# Erstelle Backup-Wiederherstellungsskript
log_info "Erstelle Notfall-Wiederherstellungsskript..."
cat > /opt/myp/scripts/emergency-restore.sh << 'EOF'
#!/bin/bash
# Notfall-Wiederherstellung: Deaktiviert Kiosk-Modus und aktiviert normalen Desktop
echo "Deaktiviere Kiosk-Modus..."
systemctl disable myp-kiosk.service
systemctl disable myp-backend.service
systemctl disable myp-monitor.service
echo "Aktiviere normalen Desktop..."
systemctl enable gdm3 || systemctl enable sddm || systemctl enable lightdm
echo "Entferne automatischen Login..."
rm -f /etc/lightdm/lightdm.conf.d/10-myp-kiosk.conf
echo "Kiosk-Modus deaktiviert. System neu starten für normalen Desktop."
EOF
chmod +x /opt/myp/scripts/emergency-restore.sh
log_success "MYP Kiosk Installation abgeschlossen!"
log_info "Nächste Schritte:"
log_info "1. Backend-Code nach /opt/myp/backend kopieren"
log_info "2. Python Virtual Environment einrichten"
log_info "3. SSL-Zertifikate konfigurieren"
log_info "4. System neu starten: sudo reboot"
log_warning "Notfall-Wiederherstellung: /opt/myp/scripts/emergency-restore.sh"