DOPPELKlick-WELT: Grafischer Installer + App-Bundles (kein Terminal mehr noetig)

Der Nutzer will KEINE Konsole - jetzt ist alles Doppelklick:

1) GRAFISCHER INSTALLER (installer_gui.py, 336 Zeilen):
- Fenster mit Status-Checks (Python/GStreamer/Homebrew: fehlt/vorhanden),
  Fortschrittsbalken beim Download, Log-Bereich, grosse Buttons
- macOS: Homebrew + GStreamer + PyGObject + tkinter via brew;
  Passwort-Dialog kommt NATIV von macOS (osascript administrator
  privileges) - kein sudo-Tippen
- Windows: laedt und startet die OFFIZIELLEN Installer-GUIs
  (GStreamer-MSI + Python-Setup) - Nutzer klickt nur Weiter/Fertig
- Nach Installation: Button 'MediaEngine starten' spawnt die Engine
  UNSICHTBAR im Hintergrund und oeffnet den Browser
- Smoke-Test im Container bestanden (xvfb): Fenster baut sich auf,
  Statuschecks laufen, sauber beendet

2) macOS: 'HMS MediaEngine.app' (echtes App-Bundle im Repo):
- CFBundleExecutable HMS-Launcher (Bash): sucht brew-python3,
  prueft GStreamer unsichtbar -> Engine nohup im Hintergrund +
  Browser oeffnet sich; fehlt etwas -> grafischer Installer
- make_mac_app.py: App neu erzeugen falls noetig
- HMS-Mac-Install.command: Doppelklick-Installation mit nativen
  osascript-Dialogen (Abbrechen/Weiter) + GUI-Installer am Ende

3) Windows: HMS-Start.vbs (unsichtbar) + HMS-Install.vbs (sichtbar):
- HMS-Start.vbs: findet pythonw (4 Pfade + versteckte PATH-Suche
  ohne Konsolenblitz), startet launcher.pyw KOMPLETT unsichtbar
  (CREATE_NO_WINDOW) -> nur Browser erscheint
- HMS-Install.vbs: oeffnet grafischen Installer; fehlt Python,
  oeffnet offizielle Downloadseite mit Hinweis auf PATH-Haeckchen
- launcher_core.py: gemeinsame Logik (gst_ok -> Engine-Spawn ->
  Health-Poll -> webbrowser.open; sonst Installer-Fenster)

4) BEWEISE (im Container ausgefuehrt):
- Launcher-E2E: launch() -> Engine unsichtbar gestartet, Health
  gruen, Browser-URL korrekt (http://localhost:8080), RC=0
- GUI-Smoke-Test: Fenster + 'Alles bereit' + sauber beendet
- VBS: sh.Run-Zeilen geprueft (Chr(34)-Konstruktion, versteckte
  cmd-Suche)
- Alle 5 Regressionssuiten unveraendert gruen:
  Projekte 25/25 + Cue 35/35 + Verteilung 33/33 + App 14/14 +
  FX 16/16 = 123 Checks

Download: TAR.GZ (macOS, erhaelt Exec-Bits!) oder ZIP (Windows)
This commit is contained in:
HMS MediaEngine Agent
2026-09-11 19:41:26 +02:00
parent 02765e6b34
commit 1e921a9085
9 changed files with 680 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
#!/bin/bash
# HMS MediaEngine macOS-Installation per Doppelklick (Finder)
# Ablauf: brew pruefen/installieren -> python3+tk pruefen ->
# GUI-Installer starten (Passwort-Dialog kommt von macOS selbst).
# Falls python3/tkinter fehlt: Fallback-Dialoge nativ per osascript.
cd "$(dirname "$0")"
echo "HMS MediaEngine Installation"
eingabe() {
osascript -e 'display alert "'$1'" message "'$2'" buttons {"Abbrechen","Weiter"} default button "Weiter" as informational' >/dev/null 2>&1
[ $? -eq 0 ]
}
# --- Homebrew ---
BREW=""
for p in /opt/homebrew/bin/brew /usr/local/bin/brew; do
if [ -x "$p" ]; then BREW="$p"; break; fi
done
if [ -z "$BREW" ]; then
if eingabe "Homebrew installieren?" "HMS MediaEngine benötigt Homebrew (der Paketmanager für macOS). Es wird jetzt installiert danach geht es automatisch weiter."; then
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
BREW=/opt/homebrew/bin/brew
else
exit 1
fi
fi
# --- Python 3.12 + tkinter ---
"$BREW" list python-tk >/dev/null 2>&1 || {
if eingabe "Python-Komponenten installieren?" "Es wird python@3.12 mit tkinter installiert (für die grafische Oberfläche)."; then
"$BREW" install python@3.12 python-tk
fi
}
# --- GStreamer ---
"$BREW" list gstreamer >/dev/null 2>&1 || {
if eingabe "GStreamer installieren?" "Es werden GStreamer und alle Video-/Audio-Plugins installiert (ca. 510 Minuten)."; then
"$BREW" install gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav pygobject
fi
}
# --- GUI-Installer starten ---
PY=/opt/homebrew/bin/python3
if [ ! -x "$PY" ]; then PY=/usr/local/bin/python3; fi
echo ""
echo "Starte grafischen Installer (Fenster öffnet sich)..."
"$PY" installer_gui.py