da9a65c7d0
linuxdeploy packt libwayland-* des Debian-Baus ein; auf Arch/EndeavourOS bricht WebKitGTK damit mit EGL_BAD_PARAMETER ab. Neuer CI-Schritt entfernt sie, packt mit der Original-runtime neu und signiert neu. In archlinux- und debian:trixie-Containern unter Xvfb nachgewiesen. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
71 lines
3.1 KiB
Bash
Executable File
71 lines
3.1 KiB
Bash
Executable File
#!/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
|