216 lines
5.5 KiB
Bash
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" |