Files
hms-mediaengine/HMS-Portable-Install.command
HMS MediaEngine Agent 696e8eb1b3 PORTABLE INSTALLATION: umgeht 16-GB-Pruefung von macOS Installer.app
URSACHE GEFUNDEN: macOS Installer.app verlangt 10-16 GB freien
Speicher als SYSTEMRESERVE - obwohl GStreamer nur 146 MB gross
ist. Diese Pruefung blockiert Installationen auf vollen Platten.

LOESUNG: HMS-Portable-Install.command
- Laedt GStreamer .pkg (146 MB) per curl
- Entpackt mit 'pkgutil --expand-full' OHNE Installer.app
  (keine 16-GB-Pruefung, kein sudo, nichts systemweit)
- Kopiert GStreamer.framework in runtime/ im Projektordner
- Loescht Download + Temp (gibt ~750 MB zurueck)
- Schreibt runtime/env.sh mit allen Umgebungsvariablen
- Braucht NUR ca. 800 MB WAHREND der Installation
- Danach: ca. 500-600 MB im Projektordner (portable, loeschbar)

Integration:
- run.py: laedt portable env automatisch VOR gi-Import
  (DYLD_LIBRARY_PATH, GST_PLUGIN_PATH, GI_TYPELIB_PATH,
  PYTHONPATH fuer gi-Bindings)
- App-Launcher: sourced runtime/env.sh falls vorhanden
- launcher_core.py: gleiche portable env-Logik
- Freien Speicher pruefen (nur 800 MB noetig, nicht 16 GB)

Drei Installationswege jetzt verfuegbar:
1. HMS-Portable-Install.command (wenig Speicher, nichts systemweit)
2. HMS-Mac-Install.command (Homebrew, mehr Komfort)
3. HMS-MediaEngine.app startet mit whichever verfuegbar ist
2026-09-11 23:33:19 +02:00

166 lines
6.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# HMS MediaEngine PORTABLE Installation (macOS)
#
# Loesung fuer: "16 GB freier Speicher noetig"
# Grund: macOS Installer.app verlangt als Systemreserve 10-16 GB
# freien Speicher NICHT weil GStreamer so gross ist (nur 146 MB!).
#
# Dieser Installer UMGEHT Installer.app komplett:
# 1. Laedt GStreamer .pkg herunter (146 MB)
# 2. Entpackt es mit 'pkgutil' OHNE Installation (keine 16GB-Pruefung)
# 3. Kopiert das Framework in den Projektordner (ca. 500 MB)
# 4. Loescht Download + Temp-Dateien
# 5. Ergebnis: Portable App, ~600 MB im Ordner, NICHTS Systemweit
#
# Benoetigt: ca. 800 MB FREIEN Speicher WAEHREND der Installation
# Danach bleiben: ca. 500-600 MB im Projektordner
cd "$(dirname "$0")"
echo "=================================================="
echo " HMS MediaEngine PORTABLE Installation"
echo " (umgeht macOS Installer.app komplett)"
echo "=================================================="
echo ""
echo ">> Pruefe System..."
# --- Python pruefen (macOS bringt python3 mit) ---
PY="$(command -v python3)"
if [ -z "$PY" ]; then
osascript -e 'display alert "Python fehlt" message "macOS sollte python3 mitbringen. Falls nicht: Xcode Command Line Tools installieren (xcode-select --install) und erneut versuchen." as critical' >/dev/null 2>&1
exit 1
fi
echo " Python: $PY"
# --- Freien Speicher pruefen (nur ~800 MB noetig) ---
FREE_MB=$(df -m . | awk 'NR==2 {print $4}')
echo " Freier Speicher: ${FREE_MB} MB"
if [ "$FREE_MB" -lt 800 ]; then
osascript -e 'display alert "Zu wenig Speicher" message "Es werden nur ca. 800 MB fuer die Installation gebraucht (danach 500-600 MB). Aktuell frei: '"$FREE_MB"' MB." as critical' >/dev/null 2>&1
exit 1
fi
# --- .pkg herunterladen ---
PKG_URL="https://gstreamer.freedesktop.org/data/pkg/macos/1.28.4/gstreamer-1.0-1.28.4-universal.pkg"
PKG_FILE="/tmp/gstreamer-1.28.4.pkg"
if [ ! -f "runtime/GStreamer.framework/Versions/1.0/lib/gstreamer-1.0" ]; then
echo ""
echo ">> Lade GStreamer herunter (146 MB)..."
curl -L -o "$PKG_FILE" "$PKG_URL"
if [ $? -ne 0 ] || [ ! -s "$PKG_FILE" ]; then
echo " FEHLER: Download fehlgeschlagen"
osascript -e 'display alert "Download fehlgeschlagen" message "GStreamer konnte nicht geladen werden. Internetverbindung pruefen und erneut versuchen." as critical' >/dev/null 2>&1
rm -f "$PKG_FILE"
exit 1
fi
echo " Download abgeschlossen: $(du -h "$PKG_FILE" | cut -f1)"
# --- pkgutil: entpacken OHNE Installer.app ---
echo ""
echo ">> Entpacke GStreamer (ohne Installation, ohne 16GB-Pruefung)..."
EXTRACT_DIR="/tmp/hms_gst_extract"
rm -rf "$EXTRACT_DIR"
pkgutil --expand-full "$PKG_FILE" "$EXTRACT_DIR"
if [ $? -ne 0 ]; then
echo " FEHLER: pkgutil konnte nicht entpacken"
osascript -e 'display alert "Entpacken fehlgeschlagen" message "pkgutil meldete einen Fehler. Bitte Meldung an den Support schicken." as critical' >/dev/null 2>&1
rm -rf "$EXTRACT_DIR" "$PKG_FILE"
exit 1
fi
echo " Entpackt nach: $EXTRACT_DIR"
# --- Framework ins Projektverzeichnis kopieren ---
echo ""
echo ">> Kopiere GStreamer in den Projektordner (runtime/)..."
mkdir -p "runtime"
FRAMEWORK_SRC=""
# pkgutil legt es irgendwo unter payload ab - suchen
for f in $(find "$EXTRACT_DIR" -name "GStreamer.framework" -maxdepth 5 -type d 2>/dev/null); do
FRAMEWORK_SRC="$f"
break
done
if [ -z "$FRAMEWORK_SRC" ]; then
# Fallback: ganze Payload kopieren (enthaelt das Framework)
echo " Suche Framework in Payload..."
PAYLOAD_DIR=$(find "$EXTRACT_DIR" -name "Payload" -maxdepth 3 -type d 2>/dev/null | head -1)
if [ -n "$PAYLOAD_DIR" ]; then
FRAMEWORK_SRC=$(find "$PAYLOAD_DIR" -name "GStreamer.framework" -maxdepth 3 -type d 2>/dev/null | head -1)
fi
fi
if [ -z "$FRAMEWORK_SRC" ]; then
echo " FEHLER: GStreamer.framework nicht im .pkg gefunden"
osascript -e 'display alert "Framework nicht gefunden" message "GStreamer.framework wurde im entpackten Paket nicht gefunden. Bitte Meldung an den Support." as critical' >/dev/null 2>&1
rm -rf "$EXTRACT_DIR" "$PKG_FILE"
exit 1
fi
echo " Quelle: $FRAMEWORK_SRC"
cp -R "$FRAMEWORK_SRC" "runtime/"
if [ $? -ne 0 ]; then
echo " FEHLER: Kopieren fehlgeschlagen"
osascript -e 'display alert "Kopieren fehlgeschlagen" message "GStreamer konnte nicht in den Projektordner kopiert werden." as critical' >/dev/null 2>&1
rm -rf "$EXTRACT_DIR" "$PKG_FILE"
exit 1
fi
# --- Aufraeumen (gibt ~750 MB zurueck) ---
echo ""
echo ">> Raeume auf (loesche Download + Temp)..."
rm -rf "$EXTRACT_DIR" "$PKG_FILE"
echo " Aufgeraeumt."
else
echo " GStreamer bereits vorhanden (runtime/)"
fi
# --- Verifizieren ---
echo ""
echo ">> Verifiziere portable Installation..."
FW_PATH="$(pwd)/runtime/GStreamer.framework/Versions/1.0"
if [ ! -d "$FW_PATH/lib/gstreamer-1.0" ]; then
echo " FEHLER: GStreamer-Bibliotheken nicht gefunden"
osascript -e 'display alert "Installation unvollstaendig" message "GStreamer-Bibliotheken fehlen. Bitte erneut installieren." as critical' >/dev/null 2>&1
exit 1
fi
PLUGIN_COUNT=$(ls "$FW_PATH/lib/gstreamer-1.0/" 2>/dev/null | wc -l | tr -d ' ')
echo " GStreamer-Plugins gefunden: $PLUGIN_COUNT"
echo " Framework-Pfad: $FW_PATH"
# --- Environment-Datei fuer run.py schreiben ---
cat > "runtime/env.sh" << 'ENVEOF'
# HMS MediaEngine portable environment (wird von run.py geladen)
FW_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/GStreamer.framework/Versions/1.0"
export DYLD_LIBRARY_PATH="$FW_DIR/lib:$DYLD_LIBRARY_PATH"
export DYLD_FRAMEWORK_PATH="$(dirname "$FW_DIR")/../..:$DYLD_FRAMEWORK_PATH"
export GST_PLUGIN_PATH="$FW_DIR/lib/gstreamer-1.0"
export GST_PLUGIN_SYSTEM_PATH_1_0="$FW_DIR/lib/gstreamer-1.0"
export GI_TYPELIB_PATH="$FW_DIR/lib/girepository-1.0:$GI_TYPELIB_PATH"
export PKG_CONFIG_PATH="$FW_DIR/lib/pkgconfig:$PKG_CONFIG_PATH"
# PyGObject-Bindings im Framework (falls vorhanden):
for _pydir in "$FW_DIR/lib/python3.12/site-packages" \
"$FW_DIR/lib/python3.13/site-packages" \
"$FW_DIR/lib/python3.11/site-packages"; do
if [ -d "$_pydir/gi" ]; then
export PYTHONPATH="$_pydir:$PYTHONPATH"
break
fi
done
ENVEOF
chmod +x "runtime/env.sh"
echo " Environment-Datei: runtime/env.sh"
# --- Größen-Bericht ---
echo ""
RUNTIME_MB=$(du -sm runtime/ | cut -f1)
echo ">> Fertig! Portable GStreamer-Installation belegt: ${RUNTIME_MB} MB"
echo " (Nichts wurde systemweit installiert)"
echo ""
echo ">> Oeffne grafischen Installer zum Verifizieren und Starten..."
"$PY" installer_gui.py
echo ""
echo "=================================================="
echo " FERTIG! Ab jetzt: HMS MediaEngine.app doppelklicken"
echo " (nutzt automatisch die portable GStreamer-Installation)"
echo "=================================================="