📚 Improved backend structure & logs organization 🎉

This commit is contained in:
2025-06-10 10:03:25 +02:00
parent ccd11f0f41
commit af7838e77b
25 changed files with 675 additions and 9 deletions

View File

@@ -5285,10 +5285,14 @@ show_main_menu() {
echo -e "${GREEN}[4]${NC} ${YELLOW}Credentials anpassen${NC}"
echo -e " → Passwörter und Zugangsdaten ändern"
echo ""
echo -e "${GREEN}[5]${NC} ${PURPLE}Desktop-Verknüpfung erstellen${NC}"
echo -e " → Mercedes-Icon auf Desktop für Kiosk-Start"
echo -e " → Manuelle Kiosk-Aktivierung per Klick"
echo ""
echo -e "${GREEN}[0]${NC} ${RED}Beenden${NC}"
echo ""
echo -e "${CYAN}=================================================================${NC}"
echo -n "Ihre Auswahl [0-4]: "
echo -n "Ihre Auswahl [0-5]: "
}
handle_menu_selection() {
@@ -5312,6 +5316,10 @@ handle_menu_selection() {
interactive_credentials_setup
save_credentials_override
;;
5)
log "🖥️ Benutzer wählte: Desktop-Verknüpfung erstellen"
create_desktop_shortcut_interactive
;;
0)
log "👋 Benutzer beendet das Setup"
echo -e "\n${GREEN}Auf Wiedersehen! 👋${NC}"
@@ -5319,7 +5327,7 @@ handle_menu_selection() {
;;
*)
warning "❌ Ungültige Auswahl: $choice"
echo -e "\n${RED}Bitte wählen Sie eine Zahl zwischen 0 und 4.${NC}"
echo -e "\n${RED}Bitte wählen Sie eine Zahl zwischen 0 und 5.${NC}"
sleep 2
;;
esac
@@ -5457,6 +5465,383 @@ show_system_status() {
read
}
create_desktop_shortcut_interactive() {
clear
echo -e "${CYAN}=================================================================${NC}"
echo -e "${CYAN} DESKTOP-VERKNÜPFUNG ERSTELLEN${NC}"
echo -e "${CYAN}=================================================================${NC}"
echo ""
echo -e "${YELLOW}🖥️ Was wird erstellt:${NC}"
echo -e " • Desktop-Icon mit Mercedes-Logo"
echo -e " • Kiosk-Start per Doppelklick"
echo -e " • Automatische Browser-Erkennung"
echo -e " • Intelligente URL-Ermittlung"
echo ""
echo -e "${PURPLE}📍 Verfügbare Desktop-Umgebungen:${NC}"
# Erkenne verfügbare Desktop-Umgebungen
local desktops_found=()
if [ -d "/home/$USER/Desktop" ]; then
desktops_found+=("Aktueller Benutzer: /home/$USER/Desktop")
fi
if [ -d "/home/kiosk/Desktop" ]; then
desktops_found+=("Kiosk-Benutzer: /home/kiosk/Desktop")
fi
if [ -d "/etc/skel/Desktop" ]; then
desktops_found+=("System-Standard: /etc/skel/Desktop")
fi
if [ ${#desktops_found[@]} -eq 0 ]; then
echo -e " ${RED}❌ Keine Desktop-Verzeichnisse gefunden${NC}"
echo -e " ${YELLOW}💡 Desktop-Environment möglicherweise nicht installiert${NC}"
echo ""
echo -n "Trotzdem fortfahren und Desktop-Verzeichnisse erstellen? (j/N): "
read -r create_desktop
if [[ ! "$create_desktop" =~ ^[jJyY]$ ]]; then
echo -e "${YELLOW}Abgebrochen.${NC}"
sleep 1
return
fi
else
for desktop in "${desktops_found[@]}"; do
echo -e "$desktop"
done
fi
echo ""
echo -n "Desktop-Verknüpfung erstellen? (j/N): "
read -r confirm
if [[ "$confirm" =~ ^[jJyY]$ ]]; then
log "✅ Benutzer bestätigte Desktop-Verknüpfung-Erstellung"
create_desktop_shortcut
echo ""
echo -e "${GREEN}✅ Desktop-Verknüpfung erfolgreich erstellt!${NC}"
echo -e "${BLUE}🖱️ Doppelklick auf das Mercedes-Icon zum Starten${NC}"
echo ""
echo -n "Drücken Sie Enter um zum Hauptmenü zurückzukehren..."
read
else
log "❌ Benutzer brach Desktop-Verknüpfung-Erstellung ab"
echo -e "${YELLOW}Erstellung abgebrochen.${NC}"
sleep 1
fi
}
create_desktop_shortcut() {
log "=== ERSTELLE DESKTOP-VERKNÜPFUNG ==="
# Erstelle Kiosk-Start-Skript
create_kiosk_launcher_script
# Erstelle Desktop-Einträge für alle verfügbaren Benutzer
create_desktop_entries
# Setze korrekte Berechtigungen
fix_desktop_permissions
log "✅ Desktop-Verknüpfung erfolgreich erstellt"
}
create_kiosk_launcher_script() {
log "=== ERSTELLE KIOSK-LAUNCHER-SKRIPT ==="
mkdir -p "$APP_DIR/scripts"
cat > "$APP_DIR/scripts/launch_kiosk.sh" << 'EOF'
#!/bin/bash
# MYP Kiosk-Modus Launcher
# Startet die MYP-Anwendung im Kiosk-Modus
# Logging-Setup
LOG_FILE="/var/log/myp-desktop-launcher.log"
exec 1> >(tee -a "$LOG_FILE")
exec 2>&1
echo "=== MYP Kiosk Desktop-Start $(date) ==="
# Prüfe ob bereits ein Kiosk-Prozess läuft
if pgrep -f "chromium.*kiosk.*localhost:5000" >/dev/null 2>&1; then
echo "⚠️ Kiosk-Modus bereits aktiv - bringe Fenster in den Vordergrund"
# Versuche existierendes Fenster zu aktivieren
if command -v wmctrl >/dev/null 2>&1; then
wmctrl -a "MYP Druckerverwaltung" 2>/dev/null || true
fi
exit 0
fi
# Ermittle optimale URL
if [ -x /opt/myp/scripts/get_kiosk_url.sh ]; then
TARGET_URL=$(/opt/myp/scripts/get_kiosk_url.sh)
else
TARGET_URL="http://localhost:5000"
fi
echo "🔗 Verwende URL: $TARGET_URL"
# Prüfe Backend-Verfügbarkeit
echo "🔍 Prüfe Backend-Verfügbarkeit..."
for i in {1..30}; do
if curl -s --connect-timeout 3 --max-time 5 "$TARGET_URL" >/dev/null 2>&1; then
echo "✅ Backend erreichbar"
break
fi
echo "⏳ Warte auf Backend... ($i/30)"
sleep 2
done
# Browser-Auswahl
BROWSER=""
if command -v chromium >/dev/null 2>&1; then
BROWSER="chromium"
elif command -v chromium-browser >/dev/null 2>&1; then
BROWSER="chromium-browser"
elif command -v google-chrome >/dev/null 2>&1; then
BROWSER="google-chrome"
elif command -v firefox-esr >/dev/null 2>&1; then
BROWSER="firefox-esr"
elif command -v firefox >/dev/null 2>&1; then
BROWSER="firefox"
else
echo "❌ Kein unterstützter Browser gefunden!"
zenity --error --text="Kein unterstützter Browser gefunden!\n\nBitte installieren Sie Chromium oder Firefox." --title="MYP Kiosk-Fehler" 2>/dev/null || \
notify-send "MYP Kiosk-Fehler" "Kein unterstützter Browser gefunden!" 2>/dev/null || \
echo "FEHLER: Kein Browser verfügbar"
exit 1
fi
echo "🌐 Verwende Browser: $BROWSER"
# Bildschirmauflösung ermitteln
if [ -n "$DISPLAY" ]; then
RESOLUTION=$(xrandr 2>/dev/null | grep -E '\*|\+' | head -1 | awk '{print $1}' || echo "1920x1080")
WIDTH=$(echo $RESOLUTION | cut -d'x' -f1)
HEIGHT=$(echo $RESOLUTION | cut -d'x' -f2)
echo "📺 Bildschirmauflösung: ${WIDTH}x${HEIGHT}"
else
WIDTH=1920
HEIGHT=1080
echo "📺 Verwende Standard-Auflösung: ${WIDTH}x${HEIGHT}"
fi
# Browser-spezifische Argumente
if [[ "$BROWSER" == "chromium"* ]] || [[ "$BROWSER" == "google-chrome"* ]]; then
BROWSER_ARGS=(
--kiosk
--no-sandbox
--disable-dev-shm-usage
--disable-gpu-sandbox
--disable-software-rasterizer
--disable-background-timer-throttling
--disable-backgrounding-occluded-windows
--disable-renderer-backgrounding
--disable-features=TranslateUI
--force-device-scale-factor=1.0
--window-size=$WIDTH,$HEIGHT
--window-position=0,0
--user-data-dir=/tmp/myp-kiosk-desktop
--disable-infobars
--disable-session-crashed-bubble
--disable-restore-session-state
--disable-extensions
--disable-plugins
--disable-popup-blocking
--disable-sync
--disable-translate
--noerrdialogs
--no-first-run
--no-default-browser-check
--autoplay-policy=no-user-gesture-required
--disable-background-mode
--disable-pinch
--hide-scrollbars
--ignore-certificate-errors
--ignore-ssl-errors
--disable-web-security
--allow-running-insecure-content
--app="$TARGET_URL"
)
else
# Firefox-Argumente
BROWSER_ARGS=(
--kiosk
--width=$WIDTH
--height=$HEIGHT
--no-remote
--new-instance
"$TARGET_URL"
)
fi
echo "🚀 Starte $BROWSER im Kiosk-Modus..."
# Browser starten
"$BROWSER" "${BROWSER_ARGS[@]}" &
BROWSER_PID=$!
echo "✅ Browser gestartet (PID: $BROWSER_PID)"
echo "🎯 Kiosk-Modus aktiv für URL: $TARGET_URL"
# Optional: Warte auf Browser-Beendigung
wait $BROWSER_PID
echo "🔚 Kiosk-Modus beendet"
EOF
chmod +x "$APP_DIR/scripts/launch_kiosk.sh"
log "✅ Kiosk-Launcher-Skript erstellt: $APP_DIR/scripts/launch_kiosk.sh"
}
create_desktop_entries() {
log "=== ERSTELLE DESKTOP-EINTRÄGE ==="
# Mercedes-Icon kopieren an zentrale Stelle
local icon_dir="/usr/share/pixmaps"
local icon_source="$CURRENT_DIR/static/mercedes.svg"
# Fallback-Pfade für das Mercedes-Icon
if [ ! -f "$icon_source" ]; then
icon_source="$APP_DIR/static/mercedes.svg"
fi
if [ ! -f "$icon_source" ]; then
icon_source="$(find "$CURRENT_DIR" -name "mercedes.svg" 2>/dev/null | head -1)"
fi
local icon_target="$icon_dir/myp-mercedes.svg"
if [ -f "$icon_source" ]; then
cp "$icon_source" "$icon_target" 2>/dev/null || {
# Fallback: Icon in App-Verzeichnis
mkdir -p "$APP_DIR/static"
cp "$icon_source" "$APP_DIR/static/mercedes.svg"
icon_target="$APP_DIR/static/mercedes.svg"
}
log "✅ Mercedes-Icon kopiert: $icon_target"
else
warning "⚠️ Mercedes-Icon nicht gefunden: $icon_source"
icon_target="applications-graphics" # Fallback-Icon
fi
# Desktop-Entry-Inhalt
local desktop_content="[Desktop Entry]
Version=1.0
Type=Application
Name=MYP Druckerverwaltung (Kiosk)
Comment=Starte MYP Druckerverwaltung im Kiosk-Modus
Exec=$APP_DIR/scripts/launch_kiosk.sh
Icon=$icon_target
Terminal=false
Categories=Office;Graphics;3DGraphics;Engineering;
StartupNotify=true
StartupWMClass=chromium-browser
Keywords=3D;Printing;Drucker;Kiosk;MYP;Mercedes;
MimeType=model/stl;model/obj;text/x.gcode;
Actions=OpenBrowser;OpenSettings;
[Desktop Action OpenBrowser]
Name=Im Browser öffnen
Exec=xdg-open http://localhost:5000
[Desktop Action OpenSettings]
Name=Einstellungen
Exec=$APP_DIR/scripts/launch_kiosk.sh --settings"
# Desktop-Einträge für verschiedene Benutzer erstellen
local desktop_dirs=(
"/home/$USER/Desktop"
"/home/kiosk/Desktop"
"/etc/skel/Desktop"
"/usr/share/applications" # System-weit verfügbar
)
for desktop_dir in "${desktop_dirs[@]}"; do
if [ "$desktop_dir" = "/usr/share/applications" ] || [ -d "$(dirname "$desktop_dir")" ]; then
mkdir -p "$desktop_dir" 2>/dev/null || continue
local desktop_file="$desktop_dir/myp-kiosk.desktop"
echo "$desktop_content" > "$desktop_file" 2>/dev/null && {
chmod +x "$desktop_file" 2>/dev/null || true
log "✅ Desktop-Eintrag erstellt: $desktop_file"
}
fi
done
# Spezielle Behandlung für aktuellen Benutzer-Desktop
if [ -n "$SUDO_USER" ] && [ "$SUDO_USER" != "root" ]; then
local user_desktop="/home/$SUDO_USER/Desktop"
mkdir -p "$user_desktop" 2>/dev/null || true
if [ -d "$user_desktop" ]; then
local user_desktop_file="$user_desktop/myp-kiosk.desktop"
echo "$desktop_content" > "$user_desktop_file" 2>/dev/null && {
chmod +x "$user_desktop_file" 2>/dev/null || true
chown "$SUDO_USER:$SUDO_USER" "$user_desktop_file" 2>/dev/null || true
log "✅ Benutzer-Desktop-Eintrag erstellt: $user_desktop_file"
}
fi
fi
}
fix_desktop_permissions() {
log "=== KORRIGIERE DESKTOP-BERECHTIGUNGEN ==="
# Desktop-Dateien für verschiedene Benutzer korrigieren
local users=("$USER" "kiosk")
if [ -n "$SUDO_USER" ] && [ "$SUDO_USER" != "root" ]; then
users+=("$SUDO_USER")
fi
for user in "${users[@]}"; do
if id "$user" >/dev/null 2>&1; then
local user_desktop="/home/$user/Desktop"
if [ -d "$user_desktop" ]; then
chown -R "$user:$user" "$user_desktop" 2>/dev/null || true
find "$user_desktop" -name "*.desktop" -exec chmod +x {} \; 2>/dev/null || true
log "✅ Berechtigungen korrigiert für: $user"
fi
fi
done
# System-weite Desktop-Datei
if [ -f "/usr/share/applications/myp-kiosk.desktop" ]; then
chmod 644 "/usr/share/applications/myp-kiosk.desktop" 2>/dev/null || true
log "✅ System-weite Desktop-Datei konfiguriert"
fi
# Update Desktop-Datenbank
if command -v update-desktop-database >/dev/null 2>&1; then
update-desktop-database /usr/share/applications 2>/dev/null || true
log "✅ Desktop-Datenbank aktualisiert"
fi
}
install_desktop_tools() {
log "=== INSTALLIERE DESKTOP-TOOLS ==="
# Tools für bessere Desktop-Integration installieren
local desktop_packages=(
"wmctrl" # Fenster-Management
"xdotool" # X11-Automatisierung
"zenity" # GUI-Dialoge
"notify-osd" # Desktop-Benachrichtigungen
"libnotify-bin" # notify-send Kommando
"unclutter" # Mauszeiger verstecken
)
progress "Installiere Desktop-Integration-Tools..."
for package in "${desktop_packages[@]}"; do
if ! dpkg -l | grep -q "^ii.*$package" 2>/dev/null; then
if apt-get install -y "$package" 2>/dev/null; then
log "$package installiert"
else
warning "⚠️ $package konnte nicht installiert werden"
fi
else
log "$package bereits installiert"
fi
done
log "✅ Desktop-Tools-Installation abgeschlossen"
}
# =========================== HAUPTPROGRAMM (INTERAKTIV) ===========================
main() {
# Stelle sicher, dass wir im richtigen Verzeichnis sind
@@ -5566,6 +5951,9 @@ install_dependencies_only_auto() {
deploy_application
install_npm_dependencies
# Desktop-Tools für bessere Benutzererfahrung installieren
install_desktop_tools
# Credentials deployen
deploy_credentials
@@ -5577,6 +5965,20 @@ install_dependencies_only_auto() {
install_systemd_services
enable_and_start_services
# Intelligente Kiosk-URL-Ermittlung erstellen
create_smart_kiosk_url_script
# Desktop-Verknüpfung für einfachen Zugang erstellen
if [ -n "$DISPLAY" ] || [ -d "/home/*/Desktop" ] 2>/dev/null; then
if create_desktop_shortcut 2>/dev/null; then
info "✅ Desktop-Verknüpfung mit Mercedes-Icon erstellt"
else
warning "⚠️ Desktop-Verknüpfung konnte nicht erstellt werden"
fi
else
info " Keine Desktop-Umgebung erkannt - Desktop-Verknüpfung übersprungen"
fi
# Performance-Optimierungen auch für manuelles Testen
optimize_webapp_performance
optimize_static_assets
@@ -5642,6 +6044,9 @@ install_full_production_system_auto() {
deploy_application
install_npm_dependencies
# Desktop-Tools für bessere Benutzererfahrung installieren
install_desktop_tools
# Credentials deployen
deploy_credentials
@@ -5673,6 +6078,16 @@ install_full_production_system_auto() {
install_systemd_services
enable_and_start_services
# Intelligente Kiosk-URL-Ermittlung erstellen
create_smart_kiosk_url_script
# Desktop-Verknüpfung für einfachen Zugang erstellen
if create_desktop_shortcut 2>/dev/null; then
info "✅ Desktop-Verknüpfung mit Mercedes-Icon erstellt"
else
warning "⚠️ Desktop-Verknüpfung konnte nicht erstellt werden"
fi
# Performance-Optimierungen für Raspberry Pi Webapp
optimize_webapp_performance
@@ -5758,6 +6173,7 @@ show_final_summary() {
echo -e " ✅ Automatischer Kiosk-Start beim Boot"
echo -e " ✅ Firewall und Sicherheitskonfiguration"
echo -e " ✅ Performance-Optimierungen"
echo -e " ✅ Desktop-Verknüpfung mit Mercedes-Icon"
echo ""
echo -e "${YELLOW}🚀 System-Status:${NC}"
echo -e " 🌐 Webapp: $HTTP_URL"
@@ -5779,6 +6195,7 @@ show_final_summary() {
echo -e " ✅ Anwendung deployed nach: $APP_DIR"
echo -e " ✅ Systemd-Services installiert"
echo -e " ✅ Performance-Optimierungen"
echo -e " ✅ Desktop-Verknüpfung mit Mercedes-Icon"
echo ""
echo -e "${YELLOW}🚀 System-Status:${NC}"
echo -e " 🌐 Webapp: $HTTP_URL"
@@ -5786,9 +6203,10 @@ show_final_summary() {
echo ""
echo -e "${PURPLE}💡 Nächste Schritte:${NC}"
echo -e " 1. Webapp testen: $HTTP_URL"
echo -e " 2. Manuelle Tests durchführen"
echo -e " 3. Entwicklung starten: cd $APP_DIR"
echo -e " 4. Für Kiosk-Modus: sudo $0 --production"
echo -e " 2. Kiosk-Modus testen: Doppelklick auf Mercedes-Icon"
echo -e " 3. Manuelle Tests durchführen"
echo -e " 4. Entwicklung starten: cd $APP_DIR"
echo -e " 5. Für Produktions-Kiosk: sudo $0 --production"
;;
esac
@@ -5808,5 +6226,110 @@ show_final_summary() {
echo -e "${CYAN}=================================================================${NC}"
}
# =========================== INTELLIGENTE KIOSK-URL KONFIGURATION ===========================
get_kiosk_url() {
log "=== ERMITTLE OPTIMALE KIOSK-URL ==="
local kiosk_url="http://localhost:5000"
local intranet_url="https://m040tbaraspi001.de040.corpintra.net"
# Prüfe ob localhost erreichbar ist
if curl -s --connect-timeout 3 --max-time 5 "http://localhost:5000" >/dev/null 2>&1; then
log "✅ Localhost erreichbar - verwende lokale URL"
echo "$kiosk_url"
return
fi
# Prüfe ob Intranet erreichbar ist
if curl -s --connect-timeout 5 --max-time 10 "$intranet_url" >/dev/null 2>&1; then
log "✅ Intranet erreichbar - verwende Intranet-URL"
echo "$intranet_url"
return
fi
# Fallback: Versuche lokale IP-Adresse
local local_ip=$(ip route get 1 2>/dev/null | awk '{print $7}' | head -1)
if [ -n "$local_ip" ] && [ "$local_ip" != "127.0.0.1" ]; then
local ip_url="http://$local_ip:5000"
if curl -s --connect-timeout 3 --max-time 5 "$ip_url" >/dev/null 2>&1; then
log "✅ Lokale IP erreichbar - verwende IP-URL: $ip_url"
echo "$ip_url"
return
fi
fi
# Finaler Fallback: localhost
log "⚠️ Fallback auf localhost - Backend möglicherweise noch nicht gestartet"
echo "$kiosk_url"
}
create_smart_kiosk_url_script() {
log "=== ERSTELLE INTELLIGENTE KIOSK-URL ERMITTLUNG ==="
cat > "$APP_DIR/scripts/get_kiosk_url.sh" << 'EOF'
#!/bin/bash
# Intelligente Kiosk-URL-Ermittlung für MYP
# Priorisiert lokale Verbindung, fällt auf Intranet zurück
LOCALHOST_URL="http://localhost:5000"
INTRANET_URL="https://m040tbaraspi001.de040.corpintra.net"
# Funktion: URL testen
test_url() {
local url="$1"
local timeout="${2:-5}"
curl -s --connect-timeout "$timeout" --max-time "$timeout" "$url" >/dev/null 2>&1
return $?
}
# Priorisierte URL-Tests
echo "[$(date)] Ermittle optimale Kiosk-URL..." >> /var/log/kiosk-url.log
# 1. Priorität: Localhost (schnellste Option für Kiosk)
if test_url "$LOCALHOST_URL" 3; then
echo "[$(date)] Localhost verfügbar: $LOCALHOST_URL" >> /var/log/kiosk-url.log
echo "$LOCALHOST_URL"
exit 0
fi
# 2. Priorität: Intranet-URL (für Remote-Zugang)
if test_url "$INTRANET_URL" 8; then
echo "[$(date)] Intranet verfügbar: $INTRANET_URL" >> /var/log/kiosk-url.log
echo "$INTRANET_URL"
exit 0
fi
# 3. Priorität: Lokale IP-Adresse
LOCAL_IP=$(ip route get 1 2>/dev/null | awk '{print $7}' | head -1)
if [ -n "$LOCAL_IP" ] && [ "$LOCAL_IP" != "127.0.0.1" ]; then
IP_URL="http://$LOCAL_IP:5000"
if test_url "$IP_URL" 5; then
echo "[$(date)] Lokale IP verfügbar: $IP_URL" >> /var/log/kiosk-url.log
echo "$IP_URL"
exit 0
fi
fi
# 4. Fallback: Hostname-URL
HOSTNAME_URL="http://$(hostname):5000"
if test_url "$HOSTNAME_URL" 5; then
echo "[$(date)] Hostname verfügbar: $HOSTNAME_URL" >> /var/log/kiosk-url.log
echo "$HOSTNAME_URL"
exit 0
fi
# Finaler Fallback: Localhost (auch wenn nicht erreichbar)
echo "[$(date)] Fallback auf Localhost: $LOCALHOST_URL" >> /var/log/kiosk-url.log
echo "$LOCALHOST_URL"
EOF
chmod +x "$APP_DIR/scripts/get_kiosk_url.sh"
log "✅ Intelligente Kiosk-URL-Ermittlung erstellt: $APP_DIR/scripts/get_kiosk_url.sh"
}
# =========================== KIOSK-KONFIGURATION MIT INTELLIGENTER URL ===========================
# Skript starten mit automatischer Modus-Erkennung
main "$@"
main "$@"