#!/bin/sh # appimage-strip-wayland.sh -- entfernt die mitgebrachten libwayland-*.so aus # dem fertigen Linux-AppImage, packt es neu und signiert es fuer den Updater neu. # # Befund 06.10.2026 (EndeavourOS/Arch, weisses Fenster): linuxdeploy packt die # libwayland-Bibliotheken des Bau-Systems (Debian) ein. Auf Systemen mit # neuerem Mesa bricht WebKitGTK damit beim Start ab ("Could not create default # EGL display: EGL_BAD_PARAMETER. Aborting...") -- das Fenster bleibt weiss. # Nachgestellt in einem archlinux-Container unter Xvfb; ohne die vier # libwayland-Dateien startet die App dort sauber. Die Bibliotheken gehoeren zum # Grundsystem jeder Linux-Arbeitsumgebung (GTK haengt ohnehin davon ab), das # Weglassen nimmt also nichts weg, was auf einem Zielsystem fehlen koennte. # # Tauri reicht linuxdeploy keine Ausschlussliste durch (linuxdeploy kennt # --exclude-library, aber keine Umgebungsvariable dafuer), deshalb # Nachbearbeitung: entpacken, loeschen, mit dem appimagetool aus Tauris # eigenem linuxdeploy-plugin-appimage neu packen, `tauri signer sign` schreibt # die .sig neu (die alte passt nach dem Neupacken nicht mehr). # # Aufruf aus dem Repo-Wurzelverzeichnis, nach `tauri build --bundles appimage`. # Ohne TAURI_SIGNING_PRIVATE_KEY (lokaler Bau) wird nur neu gepackt, die # veraltete .sig geloescht. set -eu APPIMAGE_DIR="apps/desktop/src-tauri/target/release/bundle/appimage" TOOL_IMAGE="${TAURI_TOOLS_DIR:-${XDG_CACHE_HOME:-$HOME/.cache}/tauri}/linuxdeploy-plugin-appimage.AppImage" APPIMAGE="$(find "$APPIMAGE_DIR" -maxdepth 1 -name '*.AppImage' | head -n 1)" if [ -z "$APPIMAGE" ]; then echo "Kein AppImage in $APPIMAGE_DIR gefunden." >&2 exit 1 fi if [ ! -f "$TOOL_IMAGE" ]; then echo "appimagetool-Quelle $TOOL_IMAGE fehlt (wird von tauri build angelegt)." >&2 exit 1 fi WORK="$(mktemp -d)" trap 'rm -rf "$WORK"' EXIT APPIMAGE_ABS="$(cd "$(dirname "$APPIMAGE")" && pwd)/$(basename "$APPIMAGE")" (cd "$WORK" && "$APPIMAGE_ABS" --appimage-extract >/dev/null && mv squashfs-root app) (cd "$WORK" && "$TOOL_IMAGE" --appimage-extract >/dev/null && mv squashfs-root tool) REMOVED="$(find "$WORK/app" -name 'libwayland-*.so*' -print)" if [ -z "$REMOVED" ]; then echo "Keine libwayland-Bibliotheken im AppImage -- nichts zu tun." exit 0 fi echo "Entferne aus dem AppImage:" echo "$REMOVED" | sed "s#$WORK/app/# #" echo "$REMOVED" | xargs rm -f # Dieselbe Startdatei (runtime) wie im Original wiederverwenden: kein # Nachladen aus dem Internet, keine andere runtime-Fassung als von Tauri. OFFSET="$("$APPIMAGE_ABS" --appimage-offset)" head -c "$OFFSET" "$APPIMAGE_ABS" > "$WORK/runtime" ARCH=x86_64 "$WORK/tool/usr/bin/appimagetool" --no-appstream --runtime-file "$WORK/runtime" \ "$WORK/app" "$WORK/neu.AppImage" >/dev/null 2>&1 chmod +x "$WORK/neu.AppImage" mv "$WORK/neu.AppImage" "$APPIMAGE_ABS" rm -f "$APPIMAGE_ABS.sig" if [ -n "${TAURI_SIGNING_PRIVATE_KEY:-}" ]; then pnpm --filter @tessera/desktop exec tauri signer sign "$APPIMAGE_ABS" >/dev/null test -s "$APPIMAGE_ABS.sig" echo "AppImage neu gepackt und signiert: $(basename "$APPIMAGE_ABS")" else echo "AppImage neu gepackt (ohne Schluessel, keine Signatur): $(basename "$APPIMAGE_ABS")" fi