Projektarbeit-MYP/backend/app/schnellstart_raspberry_pi.sh

266 lines
7.9 KiB
Bash

#!/bin/bash
# ===================================================================
# MYP Druckerverwaltung - Raspberry Pi Schnellstart
# Vereinfachte Installation für sofortige Nutzung
# ===================================================================
set -e
# Farben für Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# Pfad-Variablen
KIOSK_HOME="/home/kiosk"
PI_HOME="/home/pi"
LOCAL_BIN="/usr/local/bin"
APP_DIR="/opt/myp-druckerverwaltung"
BACKUP_DIR="/opt/myp-backups"
BACKUP_ORIGINAL="/opt/myp-backup-original"
LIGHTDM_CONF="/etc/lightdm/lightdm.conf"
# Logging-Funktionen
log() { echo -e "${GREEN}[SCHNELLSTART] $1${NC}"; }
error() { echo -e "${RED}[FEHLER] $1${NC}"; exit 1; }
warning() { echo -e "${YELLOW}[WARNUNG] $1${NC}"; }
info() { echo -e "${BLUE}[INFO] $1${NC}"; }
# ASCII Art Banner
cat << 'EOF'
╔═══════════════════════════════════════════════════════════╗
║ MYP DRUCKERVERWALTUNG ║
║ Raspberry Pi Kiosk Schnellstart ║
║ ║
║ 🖨️ Vollautomatische Installation in 3 Schritten ║
╚═══════════════════════════════════════════════════════════╝
EOF
echo
log "Willkommen zum MYP Druckerverwaltung Schnellstart!"
echo
# Prüfungen vor Installation
log "Führe Vorprüfungen durch..."
# Root-Berechtigung prüfen
if [ "$EUID" -ne 0 ]; then
error "Dieses Skript muss als Root ausgeführt werden: sudo $0"
fi
# Stelle sicher, dass wichtige Tools verfügbar sind
export PATH="/usr/sbin:/sbin:/usr/bin:/bin:$PATH"
# Erkenne verfügbares Chromium-Binary
CHROMIUM_BIN=""
for chromium_path in "/usr/bin/chromium" "/usr/bin/chromium-browser" "/snap/bin/chromium"; do
if [ -x "$chromium_path" ]; then
CHROMIUM_BIN="$chromium_path"
break
fi
done
if [ -z "$CHROMIUM_BIN" ]; then
CHROMIUM_BIN="chromium" # Fallback auf PATH
fi
# Raspberry Pi erkennen
if ! grep -q "Raspberry Pi" /proc/device-tree/model 2>/dev/null; then
warning "Nicht auf Raspberry Pi - Installation trotzdem fortsetzen? (j/N)"
read -r response
if [[ ! "$response" =~ ^[jJ]$ ]]; then
error "Installation abgebrochen"
fi
fi
# Internetverbindung prüfen
if ! ping -c 1 google.com &> /dev/null; then
error "Keine Internetverbindung! Bitte Netzwerk konfigurieren."
fi
# Speicherplatz prüfen
available_space=$(df / | awk 'NR==2 {print $4}')
if [ "$available_space" -lt 2000000 ]; then
error "Nicht genügend Speicherplatz! Mindestens 2GB frei erforderlich."
fi
log "✅ Alle Vorprüfungen bestanden!"
echo
# Benutzerinteraktion
info "📋 Konfiguration:"
echo
# Kiosk-URL abfragen
read -p "🌐 Kiosk-URL (Standard: http://localhost): " kiosk_url
kiosk_url=${kiosk_url:-"http://localhost"}
# Auto-Neustart abfragen
read -p "🔄 Nach Installation automatisch neustarten? (J/n): " auto_reboot
auto_reboot=${auto_reboot:-"j"}
# Bestätigung
echo
warning "⚠️ ACHTUNG: Diese Installation wird das System für Kiosk-Modus konfigurieren!"
warning " - Automatischer Login wird aktiviert"
warning " - Desktop-Umgebung wird auf Kiosk umgestellt"
warning " - Systemd-Services werden erstellt"
echo
read -p "🚀 Installation starten? (j/N): " confirm
if [[ ! "$confirm" =~ ^[jJ]$ ]]; then
error "Installation abgebrochen"
fi
echo
log "=== SCHRITT 1/3: SYSTEM VORBEREITEN ==="
# Prüfe ob install_raspberry_pi.sh existiert
if [ ! -f "./install_raspberry_pi.sh" ]; then
error "install_raspberry_pi.sh nicht gefunden! Führe dieses Skript im Projektverzeichnis aus."
fi
# Mache Installationsskript ausführbar
chmod +x "./install_raspberry_pi.sh"
log "=== SCHRITT 2/3: HAUPTINSTALLATION ==="
echo
# Führe Hauptinstallation aus
info "Starte vollständige Installation..."
info "Dies kann 10-20 Minuten dauern..."
echo
if ./install_raspberry_pi.sh; then
log "✅ Hauptinstallation erfolgreich abgeschlossen!"
else
error "❌ Fehler bei der Hauptinstallation!"
fi
log "=== SCHRITT 3/3: FINALISIERUNG ==="
# Kiosk-URL anpassen falls gewünscht
if [ "$kiosk_url" != "http://localhost" ]; then
log "Konfiguriere Kiosk-URL: $kiosk_url"
sed -i "s|http://localhost|$kiosk_url|g" $KIOSK_HOME/kiosk.sh
fi
# Erstelle Schnellzugriff-Desktop-Icons
log "Erstelle Desktop-Verknüpfungen..."
# Für den normalen Benutzer (falls vorhanden)
if [ -d "$PI_HOME" ]; then
mkdir -p $PI_HOME/Desktop
# Wartungs-Icon
cat > "$PI_HOME/Desktop/MYP-Wartung.desktop" << EOF
[Desktop Entry]
Version=1.0
Type=Application
Name=MYP Wartung
Comment=Druckerverwaltung warten
Exec=x-terminal-emulator -e 'sudo myp-maintenance status; read -p "Taste drücken..."'
Icon=applications-system
Terminal=false
Categories=System;
EOF
# Browser-Icon für normale Ansicht
cat > "$PI_HOME/Desktop/MYP-Browser.desktop" << EOF
[Desktop Entry]
Version=1.0
Type=Application
Name=MYP Browser-Ansicht
Comment=Druckerverwaltung im Browser öffnen
Exec=$CHROMIUM_BIN $kiosk_url
Icon=web-browser
Terminal=false
Categories=Network;
EOF
chown pi:pi $PI_HOME/Desktop/*.desktop
chmod +x $PI_HOME/Desktop/*.desktop
fi
# Erstelle Backup der ursprünglichen Konfiguration
log "Erstelle Konfigurations-Backup..."
mkdir -p $BACKUP_ORIGINAL
cp $LIGHTDM_CONF $BACKUP_ORIGINAL/ 2>/dev/null || true
cp $KIOSK_HOME/.config/openbox/autostart $BACKUP_ORIGINAL/ 2>/dev/null || true
# Erstelle Notfall-Wiederherstellungsskript
cat > "$LOCAL_BIN/myp-notfall-reset" << EOF
#!/bin/bash
echo "🚨 MYP Notfall-Reset"
echo "Stoppt alle MYP-Services und stellt Original-Konfiguration wieder her"
echo
read -p "Wirklich fortfahren? (j/N): " confirm
if [[ "\$confirm" =~ ^[jJ]$ ]]; then
systemctl stop myp-kiosk myp-druckerverwaltung nginx
systemctl disable myp-kiosk
# Original LightDM wiederherstellen (falls vorhanden)
if [ -f "$BACKUP_ORIGINAL/lightdm.conf" ]; then
cp $BACKUP_ORIGINAL/lightdm.conf $LIGHTDM_CONF
fi
echo "✅ Reset abgeschlossen. System neustarten für normale Desktop-Nutzung:"
echo "sudo reboot"
fi
EOF
chmod +x $LOCAL_BIN/myp-notfall-reset
# Zusammenfassung der Installation
echo
log "🎉 === INSTALLATION ERFOLGREICH ABGESCHLOSSEN! ==="
echo
info "📋 ZUSAMMENFASSUNG:"
info " • Kiosk-URL: $kiosk_url"
info " • Automatischer Login: Aktiviert (Benutzer: kiosk)"
info " • Anwendung: http://$(hostname -I | awk '{print $1}')"
info " • SSH-Zugang: Weiterhin verfügbar"
echo
info "🔧 WICHTIGE BEFEHLE:"
info " • Status prüfen: myp-maintenance status"
info " • Services neustarten: myp-maintenance restart"
info " • Nur Kiosk neustarten: myp-maintenance kiosk-restart"
info " • Logs anzeigen: myp-maintenance logs"
info " • Backup erstellen: myp-backup"
info " • Notfall-Reset: myp-notfall-reset"
echo
info "📁 WICHTIGE PFADE:"
info " • Anwendung: $APP_DIR/"
info " • Kiosk-Skript: $KIOSK_HOME/kiosk.sh"
info " • Logs: journalctl -u myp-kiosk -f"
info " • Backups: $BACKUP_DIR/"
echo
info "🔒 SICHERHEIT:"
info " • Firewall aktiv (Ports 80, 22)"
info " • Automatische Backups (täglich 2:00 Uhr)"
info " • Service-Überwachung aktiviert"
echo
if [[ "$auto_reboot" =~ ^[jJ]$ ]]; then
warning "⚠️ System wird in 10 Sekunden automatisch neu gestartet..."
warning " Drücke CTRL+C zum Abbrechen"
echo
for i in {10..1}; do
echo -ne "\r🔄 Neustart in $i Sekunden..."
sleep 1
done
echo
log "🚀 Starte System neu..."
reboot
else
echo
warning "⚠️ WICHTIG: Starte das System manuell neu, um den Kiosk-Modus zu aktivieren:"
warning " sudo reboot"
echo
info "📞 Bei Problemen: Prüfe die Logs mit journalctl -u myp-kiosk -f"
fi
echo
log "Installation abgeschlossen! 🎯"