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
This commit is contained in:
HMS MediaEngine Agent
2026-09-11 23:33:19 +02:00
parent 34b1cb8cec
commit 696e8eb1b3
5 changed files with 210 additions and 0 deletions
+17
View File
@@ -19,6 +19,23 @@ from pathlib import Path
ROOT = Path(__file__).resolve().parent
IS_WIN = sys.platform == "win32"
# Portable GStreamer laden (macOS: HMS-Portable-Install.command)
_fw = ROOT / "runtime" / "GStreamer.framework" / "Versions" / "1.0"
if _fw.is_dir():
import os as _os
_lib = str(_fw / "lib")
_os.environ["DYLD_LIBRARY_PATH"] = _lib + ":" + _os.environ.get("DYLD_LIBRARY_PATH", "")
_gst = str(_fw / "lib" / "gstreamer-1.0")
_os.environ["GST_PLUGIN_PATH"] = _gst
_os.environ["GST_PLUGIN_SYSTEM_PATH_1_0"] = _gst
_os.environ["GI_TYPELIB_PATH"] = (str(_fw / "lib" / "girepository-1.0")
+ ":" + _os.environ.get("GI_TYPELIB_PATH", ""))
for _v in ("python3.12", "python3.13", "python3.11"):
_sp = _fw / "lib" / _v / "site-packages"
if (_sp / "gi").is_dir():
sys.path.insert(0, str(_sp))
break
def web_port() -> int:
try: