📚 Refactored backend setup script for improved readability and maintainability
This commit is contained in:
257
backend/setup.sh
257
backend/setup.sh
@ -4966,7 +4966,7 @@ test_remote_access() {
|
||||
configure_hostname() {
|
||||
log "=== KONFIGURIERE HOSTNAME ==="
|
||||
|
||||
local target_hostname="raspberrypi"
|
||||
local target_hostname="m040tbaraspi001"
|
||||
local current_hostname=$(hostname)
|
||||
|
||||
if [ "$current_hostname" != "$target_hostname" ]; then
|
||||
@ -4987,7 +4987,13 @@ configure_hostname() {
|
||||
echo "127.0.1.1 $target_hostname" >> /etc/hosts
|
||||
fi
|
||||
|
||||
# Intranet-Eintrag hinzufügen für Corporate Network Access
|
||||
if ! grep -q "m040tbaraspi001.de040.corpintra.net" /etc/hosts; then
|
||||
echo "127.0.1.1 $target_hostname.de040.corpintra.net" >> /etc/hosts
|
||||
fi
|
||||
|
||||
log "✅ Hostname erfolgreich auf '$target_hostname' gesetzt"
|
||||
log "✅ Intranet-Zugang konfiguriert: https://m040tbaraspi001.de040.corpintra.net"
|
||||
else
|
||||
log "✅ Hostname bereits korrekt: '$target_hostname'"
|
||||
fi
|
||||
@ -5250,7 +5256,208 @@ EOF
|
||||
log " 🔄 Service Worker für Caching installiert"
|
||||
}
|
||||
|
||||
# =========================== HAUPTPROGRAMM (AUTOMATISCH) ===========================
|
||||
# =========================== INTERAKTIVES AUSWAHLMENÜ ===========================
|
||||
show_main_menu() {
|
||||
clear
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -e "${CYAN} $APP_NAME - Setup-Skript v$APP_VERSION${NC}"
|
||||
echo -e "${CYAN} Hostname: m040tbaraspi001${NC}"
|
||||
echo -e "${CYAN} Intranet: https://m040tbaraspi001.de040.corpintra.net${NC}"
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}🚀 INSTALLATIONS-OPTIONEN:${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}[1]${NC} ${BLUE}Abhängigkeiten installieren${NC}"
|
||||
echo -e " → Python 3.11, Node.js, SSL-Zertifikate"
|
||||
echo -e " → Flask-Anwendung deployen und konfigurieren"
|
||||
echo -e " → System für manuelle Tests vorbereiten"
|
||||
echo ""
|
||||
echo -e "${GREEN}[2]${NC} ${BLUE}Produktionsbetrieb einrichten${NC}"
|
||||
echo -e " → Vollständige Kiosk-Installation mit Autostart"
|
||||
echo -e " → Remote-Zugang (RDP/SSH) konfigurieren"
|
||||
echo -e " → Automatischer Browser-Start beim Boot"
|
||||
echo -e " → Performance-Optimierungen für Raspberry Pi"
|
||||
echo ""
|
||||
echo -e "${GREEN}[3]${NC} ${YELLOW}System-Status anzeigen${NC}"
|
||||
echo -e " → Aktuelle Konfiguration prüfen"
|
||||
echo -e " → Services und Logs anzeigen"
|
||||
echo ""
|
||||
echo -e "${GREEN}[4]${NC} ${YELLOW}Credentials anpassen${NC}"
|
||||
echo -e " → Passwörter und Zugangsdaten ändern"
|
||||
echo ""
|
||||
echo -e "${GREEN}[0]${NC} ${RED}Beenden${NC}"
|
||||
echo ""
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -n "Ihre Auswahl [0-4]: "
|
||||
}
|
||||
|
||||
handle_menu_selection() {
|
||||
local choice=$1
|
||||
|
||||
case $choice in
|
||||
1)
|
||||
log "🔧 Benutzer wählte: Abhängigkeiten installieren"
|
||||
install_dependencies_interactive
|
||||
;;
|
||||
2)
|
||||
log "🚀 Benutzer wählte: Produktionsbetrieb einrichten"
|
||||
install_production_interactive
|
||||
;;
|
||||
3)
|
||||
log "📊 Benutzer wählte: System-Status anzeigen"
|
||||
show_system_status
|
||||
;;
|
||||
4)
|
||||
log "🔑 Benutzer wählte: Credentials anpassen"
|
||||
interactive_credentials_setup
|
||||
save_credentials_override
|
||||
;;
|
||||
0)
|
||||
log "👋 Benutzer beendet das Setup"
|
||||
echo -e "\n${GREEN}Auf Wiedersehen! 👋${NC}"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
warning "❌ Ungültige Auswahl: $choice"
|
||||
echo -e "\n${RED}Bitte wählen Sie eine Zahl zwischen 0 und 4.${NC}"
|
||||
sleep 2
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
install_dependencies_interactive() {
|
||||
clear
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -e "${CYAN} ABHÄNGIGKEITEN INSTALLIEREN${NC}"
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}📦 Was wird installiert:${NC}"
|
||||
echo -e " • Python 3.11 und Flask-Abhängigkeiten"
|
||||
echo -e " • Node.js und npm"
|
||||
echo -e " • SSL-Zertifikate für HTTPS"
|
||||
echo -e " • MYP-Anwendung nach /opt/myp"
|
||||
echo -e " • Systemd-Services für automatischen Start"
|
||||
echo ""
|
||||
echo -n "Möchten Sie fortfahren? (j/N): "
|
||||
read -r confirm
|
||||
|
||||
if [[ "$confirm" =~ ^[jJyY]$ ]]; then
|
||||
log "✅ Benutzer bestätigte Abhängigkeiten-Installation"
|
||||
install_dependencies_only_auto
|
||||
echo ""
|
||||
echo -e "${GREEN}✅ Abhängigkeiten erfolgreich installiert!${NC}"
|
||||
echo -e "${BLUE}🌐 Anwendung verfügbar unter: $HTTP_URL${NC}"
|
||||
echo ""
|
||||
echo -n "Drücken Sie Enter um zum Hauptmenü zurückzukehren..."
|
||||
read
|
||||
else
|
||||
log "❌ Benutzer brach Abhängigkeiten-Installation ab"
|
||||
echo -e "${YELLOW}Installation abgebrochen.${NC}"
|
||||
sleep 1
|
||||
fi
|
||||
}
|
||||
|
||||
install_production_interactive() {
|
||||
clear
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -e "${CYAN} PRODUKTIONSBETRIEB EINRICHTEN${NC}"
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}🚀 Was wird konfiguriert:${NC}"
|
||||
echo -e " • Vollständige Kiosk-Installation"
|
||||
echo -e " • Automatischer Browser-Start beim Boot"
|
||||
echo -e " • Remote-Zugang (RDP/SSH)"
|
||||
echo -e " • Firewall und Sicherheitskonfiguration"
|
||||
echo -e " • Performance-Optimierungen"
|
||||
echo -e " • Hostname: m040tbaraspi001"
|
||||
echo -e " • Intranet-Zugang: https://m040tbaraspi001.de040.corpintra.net"
|
||||
echo ""
|
||||
echo -e "${RED}⚠️ WARNUNG: System wird nach Installation automatisch neu gestartet!${NC}"
|
||||
echo ""
|
||||
echo -n "Möchten Sie den Produktionsbetrieb einrichten? (j/N): "
|
||||
read -r confirm
|
||||
|
||||
if [[ "$confirm" =~ ^[jJyY]$ ]]; then
|
||||
log "✅ Benutzer bestätigte Produktions-Installation"
|
||||
install_full_production_system_auto
|
||||
else
|
||||
log "❌ Benutzer brach Produktions-Installation ab"
|
||||
echo -e "${YELLOW}Installation abgebrochen.${NC}"
|
||||
sleep 1
|
||||
fi
|
||||
}
|
||||
|
||||
show_system_status() {
|
||||
clear
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo -e "${CYAN} SYSTEM-STATUS${NC}"
|
||||
echo -e "${CYAN}=================================================================${NC}"
|
||||
echo ""
|
||||
|
||||
# Grundlegende System-Informationen
|
||||
echo -e "${YELLOW}🖥️ System-Informationen:${NC}"
|
||||
echo -e " Hostname: $(hostname)"
|
||||
echo -e " Betriebssystem: $(lsb_release -d 2>/dev/null | cut -f2 || echo 'Unbekannt')"
|
||||
echo -e " Kernel: $(uname -r)"
|
||||
echo -e " Architektur: $(uname -m)"
|
||||
echo -e " RAM: $(free -h | awk '/^Mem:/ {print $2}')"
|
||||
echo ""
|
||||
|
||||
# Anwendungs-Status
|
||||
echo -e "${YELLOW}📦 Anwendungs-Status:${NC}"
|
||||
if [ -d "$APP_DIR" ]; then
|
||||
echo -e " ✅ Anwendung installiert: $APP_DIR"
|
||||
if [ -f "$APP_DIR/app.py" ]; then
|
||||
echo -e " ✅ Flask-App gefunden"
|
||||
else
|
||||
echo -e " ❌ Flask-App nicht gefunden"
|
||||
fi
|
||||
else
|
||||
echo -e " ❌ Anwendung nicht installiert"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Service-Status
|
||||
echo -e "${YELLOW}⚙️ Service-Status:${NC}"
|
||||
local services=("$HTTP_SERVICE_NAME" "$KIOSK_SERVICE_NAME" "ssh" "xrdp")
|
||||
for service in "${services[@]}"; do
|
||||
if systemctl is-active --quiet "$service" 2>/dev/null; then
|
||||
echo -e " ✅ $service: Aktiv"
|
||||
elif systemctl list-unit-files | grep -q "$service" 2>/dev/null; then
|
||||
echo -e " ❌ $service: Inaktiv"
|
||||
else
|
||||
echo -e " ⚪ $service: Nicht installiert"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
|
||||
# Netzwerk-Status
|
||||
echo -e "${YELLOW}🌐 Netzwerk-Status:${NC}"
|
||||
local ip=$(ip route get 1 2>/dev/null | awk '{print $7}' | head -1)
|
||||
if [ -n "$ip" ]; then
|
||||
echo -e " IP-Adresse: $ip"
|
||||
echo -e " Webapp-URL: http://$ip:5000"
|
||||
echo -e " Intranet-URL: https://m040tbaraspi001.de040.corpintra.net"
|
||||
else
|
||||
echo -e " ❌ Keine Netzwerkverbindung"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Log-Dateien
|
||||
echo -e "${YELLOW}📄 Log-Dateien:${NC}"
|
||||
if [ -f "$INSTALL_LOG" ]; then
|
||||
echo -e " 📄 Installation: $INSTALL_LOG"
|
||||
fi
|
||||
if [ -f "$ERROR_LOG" ] && [ -s "$ERROR_LOG" ]; then
|
||||
echo -e " 🚨 Fehler: $ERROR_LOG"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo -n "Drücken Sie Enter um zum Hauptmenü zurückzukehren..."
|
||||
read
|
||||
}
|
||||
|
||||
# =========================== HAUPTPROGRAMM (INTERAKTIV) ===========================
|
||||
main() {
|
||||
# Stelle sicher, dass wir im richtigen Verzeichnis sind
|
||||
cd "$CURRENT_DIR" 2>/dev/null || true
|
||||
@ -5258,41 +5465,43 @@ main() {
|
||||
# Logging initialisieren
|
||||
init_logging
|
||||
|
||||
log "=== MYP VOLLAUTOMATISCHES SETUP GESTARTET ==="
|
||||
log "=== MYP INTERAKTIVES SETUP GESTARTET ==="
|
||||
log "Version: $APP_VERSION"
|
||||
log "Arbeitsverzeichnis: $CURRENT_DIR"
|
||||
|
||||
# Grundlegende Validierung
|
||||
check_root
|
||||
|
||||
# Credentials validieren
|
||||
# Credentials laden
|
||||
load_dynamic_credentials
|
||||
validate_credentials_comprehensive
|
||||
|
||||
# Automatische Modus-Erkennung
|
||||
# Automatische Modus-Erkennung nur für Parameter
|
||||
detect_installation_mode "$@"
|
||||
|
||||
# Banner anzeigen
|
||||
show_installation_banner
|
||||
|
||||
# Installation basierend auf erkanntem Modus
|
||||
case "$AUTO_INSTALL_MODE" in
|
||||
"production")
|
||||
log "🚀 Starte PRODUKTIONS-INSTALLATION..."
|
||||
# Falls Kommandozeilen-Parameter gesetzt sind, direkt ausführen
|
||||
if [ "$FORCE_PRODUCTION" = true ]; then
|
||||
log "🚀 Starte PRODUKTIONS-INSTALLATION (Parameter)..."
|
||||
install_full_production_system_auto
|
||||
;;
|
||||
"development")
|
||||
log "🔧 Starte ENTWICKLUNGS-INSTALLATION..."
|
||||
install_dependencies_only_auto
|
||||
;;
|
||||
*)
|
||||
error "Unbekannter Installationsmodus: $AUTO_INSTALL_MODE"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Finale Zusammenfassung
|
||||
show_final_summary
|
||||
log "✅ MYP SETUP ABGESCHLOSSEN"
|
||||
return
|
||||
elif [ "$FORCE_DEVELOPMENT" = true ]; then
|
||||
log "🔧 Starte ENTWICKLUNGS-INSTALLATION (Parameter)..."
|
||||
install_dependencies_only_auto
|
||||
show_final_summary
|
||||
log "✅ MYP SETUP ABGESCHLOSSEN"
|
||||
return
|
||||
fi
|
||||
|
||||
log "✅ MYP VOLLAUTOMATISCHES SETUP ABGESCHLOSSEN"
|
||||
# Interaktives Menü
|
||||
while true; do
|
||||
show_main_menu
|
||||
read -r choice
|
||||
echo ""
|
||||
handle_menu_selection "$choice"
|
||||
echo ""
|
||||
done
|
||||
}
|
||||
|
||||
show_installation_banner() {
|
||||
|
Reference in New Issue
Block a user