fix(261006-dcs): Linux-AppImage ohne mitgebrachte libwayland (weisses Fenster auf Arch)
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>
This commit is contained in:
Executable
+70
@@ -0,0 +1,70 @@
|
||||
#!/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
|
||||
@@ -53,7 +53,7 @@
|
||||
# Dieses Skript kennt kein Secret.
|
||||
set -eu
|
||||
|
||||
DESKTOP_PATHS="apps/desktop .gitea/scripts/desktop-version.sh .gitea/scripts/desktop-collect.sh .gitea/scripts/desktop-stamp.sh .gitea/workflows/ci.yml"
|
||||
DESKTOP_PATHS="apps/desktop .gitea/scripts/desktop-version.sh .gitea/scripts/desktop-collect.sh .gitea/scripts/desktop-stamp.sh .gitea/scripts/appimage-strip-wayland.sh .gitea/workflows/ci.yml"
|
||||
|
||||
out() {
|
||||
printf '%s=%s\n' "$1" "$2"
|
||||
|
||||
@@ -186,6 +186,16 @@ jobs:
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
run: pnpm --filter @tessera/desktop exec tauri build --bundles appimage
|
||||
|
||||
# 06.10.2026: mitgebrachte libwayland-Bibliotheken liessen WebKitGTK auf
|
||||
# Arch/EndeavourOS mit "EGL_BAD_PARAMETER" abbrechen (weisses Fenster).
|
||||
# Skript entfernt sie, packt neu und signiert neu (Begruendung im Skript).
|
||||
- name: Linux-AppImage nachbearbeiten (libwayland entfernen)
|
||||
if: steps.reuse.outputs.reuse != 'true'
|
||||
env:
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
run: sh .gitea/scripts/appimage-strip-wayland.sh
|
||||
|
||||
- name: Windows-Installer bauen (Cross-Bau)
|
||||
if: steps.reuse.outputs.reuse != 'true'
|
||||
env:
|
||||
|
||||
Reference in New Issue
Block a user