@@ -257,6 +257,99 @@ jobs:
257257 NO_STRIP : true
258258 run : dx bundle --locked --desktop --release --package-types appimage
259259
260+ - name : Repack AppImage using system libs (Linux)
261+ if : runner.os == 'Linux'
262+ run : |
263+ APPIMAGE=$(find ui/dist -name "*.AppImage" | head -1)
264+ cd "$(dirname "$APPIMAGE")"
265+ APPIMAGE_NAME=$(basename "$APPIMAGE")
266+
267+ # Extract the built AppImage
268+ APPIMAGE_EXTRACT_AND_RUN=1 "./$APPIMAGE_NAME" --appimage-extract
269+
270+ # Remove all standard system libs bundled by linuxdeploy from Ubuntu.
271+ # Bundling these causes symbol version conflicts on other distros (Fedora,
272+ # Arch, etc.) because the Ubuntu-built WebKit/GTK/GStreamer/GLib are
273+ # incompatible with the host's EGL and graphics stack.
274+ # The AppImage relies on the system-provided versions instead.
275+ #
276+ # System deps required at runtime:
277+ # Fedora: sudo dnf install webkit2gtk4.1
278+ # Debian/Ubuntu: sudo apt install libwebkit2gtk-4.1-0
279+ # Arch: sudo pacman -S webkit2gtk-4.1
280+ rm -f squashfs-root/usr/lib/libwebkit2gtk-4.1.so*
281+ rm -f squashfs-root/usr/lib/libjavascriptcoregtk-4.1.so*
282+ rm -f squashfs-root/usr/lib/libgtk-3.so* squashfs-root/usr/lib/libgdk-3.so*
283+ rm -f squashfs-root/usr/lib/libglib-2.0.so* squashfs-root/usr/lib/libgmodule-2.0.so*
284+ rm -f squashfs-root/usr/lib/libgio-2.0.so* squashfs-root/usr/lib/libgobject-2.0.so*
285+ rm -f squashfs-root/usr/lib/libgstreamer-1.0.so* squashfs-root/usr/lib/libgst*.so*
286+ rm -f squashfs-root/usr/lib/libgdk_pixbuf-2.0.so*
287+ rm -f squashfs-root/usr/lib/libcairo.so* squashfs-root/usr/lib/libcairo-gobject.so*
288+ rm -f squashfs-root/usr/lib/libpango-1.0.so* squashfs-root/usr/lib/libpangocairo-1.0.so*
289+ rm -f squashfs-root/usr/lib/libpangoft2-1.0.so* squashfs-root/usr/lib/libpixman-1.so*
290+ rm -f squashfs-root/usr/lib/libatk-1.0.so* squashfs-root/usr/lib/libatk-bridge-2.0.so*
291+ rm -f squashfs-root/usr/lib/libatspi.so* squashfs-root/usr/lib/libepoxy.so*
292+ rm -f squashfs-root/usr/lib/libdbus-1.so* squashfs-root/usr/lib/libsoup-3.0.so*
293+ rm -f squashfs-root/usr/lib/libsecret-1.so* squashfs-root/usr/lib/libssl.so*
294+ rm -f squashfs-root/usr/lib/libcrypto.so* squashfs-root/usr/lib/libxml2.so*
295+ rm -f squashfs-root/usr/lib/libxslt.so* squashfs-root/usr/lib/libsqlite3.so*
296+ rm -f squashfs-root/usr/lib/libffi.so* squashfs-root/usr/lib/libpcre2-8.so*
297+ rm -f squashfs-root/usr/lib/libsystemd.so* squashfs-root/usr/lib/libudev.so*
298+ rm -f squashfs-root/usr/lib/libselinux.so* squashfs-root/usr/lib/libmount.so*
299+ rm -f squashfs-root/usr/lib/libblkid.so* squashfs-root/usr/lib/libzstd.so*
300+ rm -f squashfs-root/usr/lib/liblz4.so* squashfs-root/usr/lib/liblzma.so*
301+ rm -f squashfs-root/usr/lib/libpng16.so* squashfs-root/usr/lib/libjpeg.so*
302+ rm -f squashfs-root/usr/lib/libtiff.so* squashfs-root/usr/lib/libwebp*.so*
303+ rm -f squashfs-root/usr/lib/libharfbuzz*.so* squashfs-root/usr/lib/libgraphite2.so*
304+ rm -f squashfs-root/usr/lib/libfreetype*.so* squashfs-root/usr/lib/libfontconfig*.so*
305+ rm -f squashfs-root/usr/lib/libicu*.so* squashfs-root/usr/lib/libseccomp.so*
306+ rm -f squashfs-root/usr/lib/libwayland-*.so* squashfs-root/usr/lib/libxkbcommon.so*
307+ rm -f squashfs-root/usr/lib/libX*.so* squashfs-root/usr/lib/libxcb*.so*
308+ rm -f squashfs-root/usr/lib/libavahi-*.so* squashfs-root/usr/lib/libcups.so*
309+ rm -f squashfs-root/usr/lib/libkrb5*.so* squashfs-root/usr/lib/libk5crypto.so*
310+ rm -f squashfs-root/usr/lib/libgssapi_krb5.so* squashfs-root/usr/lib/libkeyutils.so*
311+ rm -f squashfs-root/usr/lib/libgnutls.so* squashfs-root/usr/lib/libnettle.so*
312+ rm -f squashfs-root/usr/lib/libhogweed.so* squashfs-root/usr/lib/libp11-kit.so*
313+ rm -f squashfs-root/usr/lib/libtasn1.so* squashfs-root/usr/lib/libidn2.so*
314+ rm -f squashfs-root/usr/lib/libunistring.so* squashfs-root/usr/lib/libpsl.so*
315+ rm -f squashfs-root/usr/lib/libnghttp2.so* squashfs-root/usr/lib/libbrotli*.so*
316+ rm -f squashfs-root/usr/lib/liborc-0.4.so* squashfs-root/usr/lib/libmanette-0.2.so*
317+ rm -f squashfs-root/usr/lib/libenchant-2.so* squashfs-root/usr/lib/libhyphen.so*
318+ rm -f squashfs-root/usr/lib/libcolord.so* squashfs-root/usr/lib/libgudev-1.0.so*
319+ rm -f squashfs-root/usr/lib/librsvg-2.so* squashfs-root/usr/lib/libwoff2*.so*
320+ rm -f squashfs-root/usr/lib/liblcms2.so* squashfs-root/usr/lib/libLerc.so*
321+ rm -f squashfs-root/usr/lib/libdeflate.so* squashfs-root/usr/lib/libjbig.so*
322+ rm -f squashfs-root/usr/lib/libsharpyuv.so* squashfs-root/usr/lib/libevdev.so*
323+ rm -f squashfs-root/usr/lib/libdw.so* squashfs-root/usr/lib/libelf.so*
324+ rm -f squashfs-root/usr/lib/libunwind.so* squashfs-root/usr/lib/libgcrypt.so*
325+ rm -f squashfs-root/usr/lib/libcap.so* squashfs-root/usr/lib/libmd.so*
326+ rm -f squashfs-root/usr/lib/libbsd.so* squashfs-root/usr/lib/libbz2.so*
327+ rm -f squashfs-root/usr/lib/libdatrie.so* squashfs-root/usr/lib/libthai.so*
328+ rm -f squashfs-root/usr/lib/im-*.so squashfs-root/usr/lib/libprintbackend-*.so
329+ rm -f squashfs-root/usr/lib/libpixbufloader-*.so
330+ rm -rf squashfs-root/usr/lib/x86_64-linux-gnu
331+
332+ # Replace the GTK apprun hook with a distro-agnostic version.
333+ # The original uses Ubuntu-specific paths (x86_64-linux-gnu) that
334+ # don't exist on Fedora/Arch. Keep GDK_BACKEND=x11 — WebKitGTK
335+ # crashes with the Wayland backend (tauri-apps/tauri#8541).
336+ cat > squashfs-root/apprun-hooks/linuxdeploy-plugin-gtk.sh << 'HOOK'
337+ # !/usr/bin/env bash
338+ gsettings get org.gnome.desktop.interface gtk-theme 2>/dev/null | grep -qi "dark" && GTK_THEME_VARIANT="dark" || GTK_THEME_VARIANT="light"
339+ APPIMAGE_GTK_THEME="${APPIMAGE_GTK_THEME:-"Adwaita:$GTK_THEME_VARIANT"}"
340+ export APPDIR="${APPDIR:-"$(dirname "$(realpath "$0")")"}"
341+ export GTK_THEME="$APPIMAGE_GTK_THEME"
342+ export GDK_BACKEND=x11
343+ export XDG_DATA_DIRS="$APPDIR/usr/share:/usr/share:${XDG_DATA_DIRS:-}"
344+ HOOK
345+
346+ # Download appimagetool and repack
347+ wget -q "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -O /tmp/appimagetool
348+ chmod +x /tmp/appimagetool
349+ rm "$APPIMAGE_NAME"
350+ ARCH=x86_64 APPIMAGE_EXTRACT_AND_RUN=1 /tmp/appimagetool squashfs-root "$APPIMAGE_NAME"
351+ rm -rf squashfs-root
352+
260353 - name : Upload Debug Symbols to Sentry (Linux)
261354 if : runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/v')
262355 env :
0 commit comments