Skip to content

Commit f9dffa3

Browse files
authored
Merge pull request #137 from datum-cloud/fix/appimage-system-libs
fix: repack AppImage using system WebKit/GTK instead of bundled Ubuntu libs
2 parents 5f3d60b + 925caf7 commit f9dffa3

File tree

2 files changed

+186
-0
lines changed

2 files changed

+186
-0
lines changed

.github/workflows/bundle.yml

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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:

.github/workflows/manual-release.yml

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,99 @@ jobs:
217217
NO_STRIP: true
218218
run: dx bundle --locked --desktop --release --package-types appimage
219219

220+
- name: Repack AppImage using system libs (Linux)
221+
if: runner.os == 'Linux'
222+
run: |
223+
APPIMAGE=$(find ui/dist -name "*.AppImage" | head -1)
224+
cd "$(dirname "$APPIMAGE")"
225+
APPIMAGE_NAME=$(basename "$APPIMAGE")
226+
227+
# Extract the built AppImage
228+
APPIMAGE_EXTRACT_AND_RUN=1 "./$APPIMAGE_NAME" --appimage-extract
229+
230+
# Remove all standard system libs bundled by linuxdeploy from Ubuntu.
231+
# Bundling these causes symbol version conflicts on other distros (Fedora,
232+
# Arch, etc.) because the Ubuntu-built WebKit/GTK/GStreamer/GLib are
233+
# incompatible with the host's EGL and graphics stack.
234+
# The AppImage relies on the system-provided versions instead.
235+
#
236+
# System deps required at runtime:
237+
# Fedora: sudo dnf install webkit2gtk4.1
238+
# Debian/Ubuntu: sudo apt install libwebkit2gtk-4.1-0
239+
# Arch: sudo pacman -S webkit2gtk-4.1
240+
rm -f squashfs-root/usr/lib/libwebkit2gtk-4.1.so*
241+
rm -f squashfs-root/usr/lib/libjavascriptcoregtk-4.1.so*
242+
rm -f squashfs-root/usr/lib/libgtk-3.so* squashfs-root/usr/lib/libgdk-3.so*
243+
rm -f squashfs-root/usr/lib/libglib-2.0.so* squashfs-root/usr/lib/libgmodule-2.0.so*
244+
rm -f squashfs-root/usr/lib/libgio-2.0.so* squashfs-root/usr/lib/libgobject-2.0.so*
245+
rm -f squashfs-root/usr/lib/libgstreamer-1.0.so* squashfs-root/usr/lib/libgst*.so*
246+
rm -f squashfs-root/usr/lib/libgdk_pixbuf-2.0.so*
247+
rm -f squashfs-root/usr/lib/libcairo.so* squashfs-root/usr/lib/libcairo-gobject.so*
248+
rm -f squashfs-root/usr/lib/libpango-1.0.so* squashfs-root/usr/lib/libpangocairo-1.0.so*
249+
rm -f squashfs-root/usr/lib/libpangoft2-1.0.so* squashfs-root/usr/lib/libpixman-1.so*
250+
rm -f squashfs-root/usr/lib/libatk-1.0.so* squashfs-root/usr/lib/libatk-bridge-2.0.so*
251+
rm -f squashfs-root/usr/lib/libatspi.so* squashfs-root/usr/lib/libepoxy.so*
252+
rm -f squashfs-root/usr/lib/libdbus-1.so* squashfs-root/usr/lib/libsoup-3.0.so*
253+
rm -f squashfs-root/usr/lib/libsecret-1.so* squashfs-root/usr/lib/libssl.so*
254+
rm -f squashfs-root/usr/lib/libcrypto.so* squashfs-root/usr/lib/libxml2.so*
255+
rm -f squashfs-root/usr/lib/libxslt.so* squashfs-root/usr/lib/libsqlite3.so*
256+
rm -f squashfs-root/usr/lib/libffi.so* squashfs-root/usr/lib/libpcre2-8.so*
257+
rm -f squashfs-root/usr/lib/libsystemd.so* squashfs-root/usr/lib/libudev.so*
258+
rm -f squashfs-root/usr/lib/libselinux.so* squashfs-root/usr/lib/libmount.so*
259+
rm -f squashfs-root/usr/lib/libblkid.so* squashfs-root/usr/lib/libzstd.so*
260+
rm -f squashfs-root/usr/lib/liblz4.so* squashfs-root/usr/lib/liblzma.so*
261+
rm -f squashfs-root/usr/lib/libpng16.so* squashfs-root/usr/lib/libjpeg.so*
262+
rm -f squashfs-root/usr/lib/libtiff.so* squashfs-root/usr/lib/libwebp*.so*
263+
rm -f squashfs-root/usr/lib/libharfbuzz*.so* squashfs-root/usr/lib/libgraphite2.so*
264+
rm -f squashfs-root/usr/lib/libfreetype*.so* squashfs-root/usr/lib/libfontconfig*.so*
265+
rm -f squashfs-root/usr/lib/libicu*.so* squashfs-root/usr/lib/libseccomp.so*
266+
rm -f squashfs-root/usr/lib/libwayland-*.so* squashfs-root/usr/lib/libxkbcommon.so*
267+
rm -f squashfs-root/usr/lib/libX*.so* squashfs-root/usr/lib/libxcb*.so*
268+
rm -f squashfs-root/usr/lib/libavahi-*.so* squashfs-root/usr/lib/libcups.so*
269+
rm -f squashfs-root/usr/lib/libkrb5*.so* squashfs-root/usr/lib/libk5crypto.so*
270+
rm -f squashfs-root/usr/lib/libgssapi_krb5.so* squashfs-root/usr/lib/libkeyutils.so*
271+
rm -f squashfs-root/usr/lib/libgnutls.so* squashfs-root/usr/lib/libnettle.so*
272+
rm -f squashfs-root/usr/lib/libhogweed.so* squashfs-root/usr/lib/libp11-kit.so*
273+
rm -f squashfs-root/usr/lib/libtasn1.so* squashfs-root/usr/lib/libidn2.so*
274+
rm -f squashfs-root/usr/lib/libunistring.so* squashfs-root/usr/lib/libpsl.so*
275+
rm -f squashfs-root/usr/lib/libnghttp2.so* squashfs-root/usr/lib/libbrotli*.so*
276+
rm -f squashfs-root/usr/lib/liborc-0.4.so* squashfs-root/usr/lib/libmanette-0.2.so*
277+
rm -f squashfs-root/usr/lib/libenchant-2.so* squashfs-root/usr/lib/libhyphen.so*
278+
rm -f squashfs-root/usr/lib/libcolord.so* squashfs-root/usr/lib/libgudev-1.0.so*
279+
rm -f squashfs-root/usr/lib/librsvg-2.so* squashfs-root/usr/lib/libwoff2*.so*
280+
rm -f squashfs-root/usr/lib/liblcms2.so* squashfs-root/usr/lib/libLerc.so*
281+
rm -f squashfs-root/usr/lib/libdeflate.so* squashfs-root/usr/lib/libjbig.so*
282+
rm -f squashfs-root/usr/lib/libsharpyuv.so* squashfs-root/usr/lib/libevdev.so*
283+
rm -f squashfs-root/usr/lib/libdw.so* squashfs-root/usr/lib/libelf.so*
284+
rm -f squashfs-root/usr/lib/libunwind.so* squashfs-root/usr/lib/libgcrypt.so*
285+
rm -f squashfs-root/usr/lib/libcap.so* squashfs-root/usr/lib/libmd.so*
286+
rm -f squashfs-root/usr/lib/libbsd.so* squashfs-root/usr/lib/libbz2.so*
287+
rm -f squashfs-root/usr/lib/libdatrie.so* squashfs-root/usr/lib/libthai.so*
288+
rm -f squashfs-root/usr/lib/im-*.so squashfs-root/usr/lib/libprintbackend-*.so
289+
rm -f squashfs-root/usr/lib/libpixbufloader-*.so
290+
rm -rf squashfs-root/usr/lib/x86_64-linux-gnu
291+
292+
# Replace the GTK apprun hook with a distro-agnostic version.
293+
# The original uses Ubuntu-specific paths (x86_64-linux-gnu) that
294+
# don't exist on Fedora/Arch. Keep GDK_BACKEND=x11 — WebKitGTK
295+
# crashes with the Wayland backend (tauri-apps/tauri#8541).
296+
cat > squashfs-root/apprun-hooks/linuxdeploy-plugin-gtk.sh << 'HOOK'
297+
#!/usr/bin/env bash
298+
gsettings get org.gnome.desktop.interface gtk-theme 2>/dev/null | grep -qi "dark" && GTK_THEME_VARIANT="dark" || GTK_THEME_VARIANT="light"
299+
APPIMAGE_GTK_THEME="${APPIMAGE_GTK_THEME:-"Adwaita:$GTK_THEME_VARIANT"}"
300+
export APPDIR="${APPDIR:-"$(dirname "$(realpath "$0")")"}"
301+
export GTK_THEME="$APPIMAGE_GTK_THEME"
302+
export GDK_BACKEND=x11
303+
export XDG_DATA_DIRS="$APPDIR/usr/share:/usr/share:${XDG_DATA_DIRS:-}"
304+
HOOK
305+
306+
# Download appimagetool and repack
307+
wget -q "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -O /tmp/appimagetool
308+
chmod +x /tmp/appimagetool
309+
rm "$APPIMAGE_NAME"
310+
ARCH=x86_64 APPIMAGE_EXTRACT_AND_RUN=1 /tmp/appimagetool squashfs-root "$APPIMAGE_NAME"
311+
rm -rf squashfs-root
312+
220313
- name: Bundle (Windows)
221314
working-directory: ./ui
222315
if: runner.os == 'Windows'

0 commit comments

Comments
 (0)