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.
|
# Dieses Skript kennt kein Secret.
|
||||||
set -eu
|
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() {
|
out() {
|
||||||
printf '%s=%s\n' "$1" "$2"
|
printf '%s=%s\n' "$1" "$2"
|
||||||
|
|||||||
@@ -186,6 +186,16 @@ jobs:
|
|||||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||||
run: pnpm --filter @tessera/desktop exec tauri build --bundles appimage
|
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)
|
- name: Windows-Installer bauen (Cross-Bau)
|
||||||
if: steps.reuse.outputs.reuse != 'true'
|
if: steps.reuse.outputs.reuse != 'true'
|
||||||
env:
|
env:
|
||||||
|
|||||||
+2
-1
@@ -31,7 +31,7 @@ See: .planning/PROJECT.md (updated 2026-07-17)
|
|||||||
Phase: 18 (desktop-client-fertigstellen) — COMPLETE (2026-09-17, Verifikation passed, Windows-Bedienprobe bestanden)
|
Phase: 18 (desktop-client-fertigstellen) — COMPLETE (2026-09-17, Verifikation passed, Windows-Bedienprobe bestanden)
|
||||||
Plan: 6 of 6
|
Plan: 6 of 6
|
||||||
Status: Alle 18 Phasen abgeschlossen; Version 1.2.0 freigegeben. Kein laufender Meilenstein. Nach 1.2.0 auf main (Beta): Bildmarke in Akzentfarbe, CI-Desktop-Skip, Favoriten-Symbol/-Sortierung, Desktop-Server-Adresse, Update in der App (signiert), Versionszeile auf der Setup-Seite — alles verifiziert und auf VM/CI nachgewiesen
|
Status: Alle 18 Phasen abgeschlossen; Version 1.2.0 freigegeben. Kein laufender Meilenstein. Nach 1.2.0 auf main (Beta): Bildmarke in Akzentfarbe, CI-Desktop-Skip, Favoriten-Symbol/-Sortierung, Desktop-Server-Adresse, Update in der App (signiert), Versionszeile auf der Setup-Seite — alles verifiziert und auf VM/CI nachgewiesen
|
||||||
Last activity: 2026-10-05 - Quick 261005-jqd Einstellungen und Verwaltung aufgeraeumt
|
Last activity: 2026-10-06 - Quick 261006-dcs Linux-App weißes Fenster Arch
|
||||||
|
|
||||||
Progress: [██████████] 99%
|
Progress: [██████████] 99%
|
||||||
|
|
||||||
@@ -496,6 +496,7 @@ Gerettet aus `.continue-here.md`. Relevant fuer die noch offenen Live-Tests.
|
|||||||
| 261005-bt1 | Proxmox: Warnung je gestopptem Gast mit aktivem Autostart (Karte, Kachel) | 2026-10-05 | 873d15d | [261005-bt1-proxmox-autostart-warnung](.planning/quick/261005-bt1-proxmox-autostart-warnung/) |
|
| 261005-bt1 | Proxmox: Warnung je gestopptem Gast mit aktivem Autostart (Karte, Kachel) | 2026-10-05 | 873d15d | [261005-bt1-proxmox-autostart-warnung](.planning/quick/261005-bt1-proxmox-autostart-warnung/) |
|
||||||
| 261005-d5d | Kalender-Test: 15-s-Zeitgrenze fuer Exchange (EWS), Meldung „nicht erreichbar“ | 2026-10-05 | e49d4c7..831c7b8 | [261005-d5d-kalender-test-zeitgrenze](.planning/quick/261005-d5d-kalender-test-zeitgrenze/) |
|
| 261005-d5d | Kalender-Test: 15-s-Zeitgrenze fuer Exchange (EWS), Meldung „nicht erreichbar“ | 2026-10-05 | e49d4c7..831c7b8 | [261005-d5d-kalender-test-zeitgrenze](.planning/quick/261005-d5d-kalender-test-zeitgrenze/) |
|
||||||
| 261005-jqd | Einstellungen und Verwaltung aufgeraeumt (gemeinsame Navigation, Seitenkopf, Karten; „Verwaltung“) | 2026-10-05 | 0a35a32 + (dieser Commit) | [261005-jqd-verwaltung-aufgeraeumt](.planning/quick/261005-jqd-verwaltung-aufgeraeumt/) |
|
| 261005-jqd | Einstellungen und Verwaltung aufgeraeumt (gemeinsame Navigation, Seitenkopf, Karten; „Verwaltung“) | 2026-10-05 | 0a35a32 + (dieser Commit) | [261005-jqd-verwaltung-aufgeraeumt](.planning/quick/261005-jqd-verwaltung-aufgeraeumt/) |
|
||||||
|
| 261006-dcs | Linux-App: weißes Fenster auf Arch/EndeavourOS (libwayland aus AppImage entfernt) | 2026-10-06 | (dieser Commit) | [261006-dcs-linux-app-weisses-fenster-arch](.planning/quick/261006-dcs-linux-app-weisses-fenster-arch/) |
|
||||||
|
|
||||||
## Deferred Items
|
## Deferred Items
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
quick_id: 261006-dcs
|
||||||
|
date: 2026-10-06
|
||||||
|
---
|
||||||
|
|
||||||
|
# Linux-App: weißes Fenster auf EndeavourOS/Arch
|
||||||
|
|
||||||
|
User 06.10.: neuester Linux-Client startet auf EndeavourOS, zeigt nur weißes Fenster. WEBKIT_DISABLE_DMABUF_RENDERER / COMPOSITING / GDK_BACKEND=x11 helfen nicht; keine NVIDIA.
|
||||||
|
|
||||||
|
- Nachstellen im archlinux-Container (Xvfb), Ursache finden, im CI-Bau beheben.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
quick_id: 261006-dcs
|
||||||
|
status: complete
|
||||||
|
date: 2026-10-06
|
||||||
|
---
|
||||||
|
|
||||||
|
# 261006-dcs: Linux-App weißes Fenster (Arch) — SUMMARY
|
||||||
|
|
||||||
|
- Nachgestellt: AppImage 1.9.2-beta.fffb7ff in archlinux:latest unter Xvfb -> "Could not create default EGL display: EGL_BAD_PARAMETER. Aborting...". Ursache: von linuxdeploy mitgebrachte libwayland-{client,cursor,egl,server} (Debian-Bau) passen nicht zu neuerem Mesa.
|
||||||
|
- Probe: dieselbe AppImage ohne die vier Dateien startet auf Arch UND Debian trixie (beide Bildschirmfotos zeigen die Einrichtungsseite).
|
||||||
|
- Lösung: .gitea/scripts/appimage-strip-wayland.sh nach "tauri build --bundles appimage": entpacken, libwayland-* löschen, mit appimagetool aus Tauris linuxdeploy-plugin-appimage und der runtime des Originals neu packen, `tauri signer sign` schreibt .sig neu (mit Wegwerfschlüssel geprüft). CI-Schritt + DESKTOP_PATHS (Stempel) ergänzt.
|
||||||
|
- linuxdeploy kennt --exclude-library, Tauri reicht aber keine Option durch -> Nachbearbeitung statt Bau-Option.
|
||||||
@@ -19,6 +19,7 @@ Diese Liste beschreibt in einfachen Worten, was sich von Version zu Version an T
|
|||||||
|
|
||||||
### Behoben
|
### Behoben
|
||||||
|
|
||||||
|
- Linux-App: Auf Arch-basierten Systemen wie EndeavourOS zeigte die App nach dem Start nur ein weißes Fenster. Die App bringt die Grafik-Bibliotheken, die dort nicht zum System passten, nicht mehr selbst mit, sondern nutzt die des Systems.
|
||||||
- Kalender (Exchange): Ist der Exchange-Server nicht erreichbar, bricht „Verbindung testen“ jetzt nach 15 Sekunden ab, statt rund zwei Minuten auf „Verbindung wird geprüft …“ zu stehen, und meldet „Der Kalender-Server ist nicht erreichbar“ statt des Hinweises auf Adresse und Zugangsdaten. Auch der regelmäßige Abruf im Hintergrund wartet nicht mehr länger als 15 Sekunden.
|
- Kalender (Exchange): Ist der Exchange-Server nicht erreichbar, bricht „Verbindung testen“ jetzt nach 15 Sekunden ab, statt rund zwei Minuten auf „Verbindung wird geprüft …“ zu stehen, und meldet „Der Kalender-Server ist nicht erreichbar“ statt des Hinweises auf Adresse und Zugangsdaten. Auch der regelmäßige Abruf im Hintergrund wartet nicht mehr länger als 15 Sekunden.
|
||||||
- Postfach-Abruf über Exchange (E-Mail-Alarme, PDF-Anhänge): Ein nicht erreichbarer Exchange-Server blockiert den Abruf und den Verbindungstest nicht mehr minutenlang, sondern höchstens 60 Sekunden.
|
- Postfach-Abruf über Exchange (E-Mail-Alarme, PDF-Anhänge): Ein nicht erreichbarer Exchange-Server blockiert den Abruf und den Verbindungstest nicht mehr minutenlang, sondern höchstens 60 Sekunden.
|
||||||
- Links in Notiz-Kacheln öffnen jetzt immer in einem neuen Tab, statt das Dashboard im selben Fenster zu verlassen. In der Desktop-App öffnen sie wie gewohnt im Browser.
|
- Links in Notiz-Kacheln öffnen jetzt immer in einem neuen Tab, statt das Dashboard im selben Fenster zu verlassen. In der Desktop-App öffnen sie wie gewohnt im Browser.
|
||||||
|
|||||||
Reference in New Issue
Block a user