From 9b1692367579209aec8bdf4abf5cdacb374e4f95 Mon Sep 17 00:00:00 2001 From: Shriram Vasudevan <72285290+Shriram-Vasudevan@users.noreply.github.com> Date: Mon, 11 May 2026 11:14:33 -0400 Subject: [PATCH 1/2] Build Linux AppImage on Ubuntu 22.04 --- .../workflows/build-gui-release-binaries.yml | 54 ++++++++++++++++++- .../getting_started/install_instructions.mdx | 3 +- 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-gui-release-binaries.yml b/.github/workflows/build-gui-release-binaries.yml index d034e57f8a..04eda62421 100644 --- a/.github/workflows/build-gui-release-binaries.yml +++ b/.github/workflows/build-gui-release-binaries.yml @@ -38,7 +38,8 @@ jobs: target: "aarch64-apple-darwin" - host: "macos-15-intel" # for Intel based macs. target: "x86_64-apple-darwin" - - host: "ubuntu-24.04" + # Build Linux bundles on Jammy to keep GLIBC requirements compatible with stable distros. + - host: "ubuntu-22.04" target: "x86_64-unknown-linux-gnu" - host: "ubuntu-24.04" # cross build windows from ubuntu target: "x86_64-pc-windows-gnu" @@ -74,6 +75,57 @@ jobs: tauriScript: yarn tauri args: --target ${{ matrix.target }} + - name: Check Linux AppImage compatibility + if: matrix.target == 'x86_64-unknown-linux-gnu' + shell: bash + run: | + set -euo pipefail + + appimage_dir="target/${{ matrix.target }}/release/bundle/appimage" + if [[ ! -d "$appimage_dir" ]]; then + echo "No AppImage artifact directory found at $appimage_dir." >&2 + exit 1 + fi + + appimage="$(find "$appimage_dir" -maxdepth 1 -type f -name "*.AppImage" -print -quit)" + if [[ -z "$appimage" ]]; then + echo "No AppImage artifact found." >&2 + exit 1 + fi + + workdir="$(mktemp -d)" + trap 'rm -rf "$workdir"' EXIT + + cp "$appimage" "$workdir/eigenwallet.AppImage" + chmod +x "$workdir/eigenwallet.AppImage" + ( + cd "$workdir" + ./eigenwallet.AppImage --appimage-extract >/dev/null + ) + + find "$workdir/squashfs-root" -type f -print0 \ + | xargs -0 grep -aohE 'GLIBC_[0-9]+\.[0-9]+|GLIBCXX_3\.4\.[0-9]+' \ + > "$workdir/symbol-versions.txt" || true + + glibc_violations="$( + sed -n 's/^GLIBC_//p' "$workdir/symbol-versions.txt" \ + | sort -Vu \ + | awk -F. '($1 > 2 || ($1 == 2 && $2 > 36)) { print "GLIBC_" $0 }' + )" + glibcxx_violations="$( + sed -n 's/^GLIBCXX_3\.4\.//p' "$workdir/symbol-versions.txt" \ + | sort -n -u \ + | awk '($1 > 30) { print "GLIBCXX_3.4." $1 }' + )" + + if [[ -n "$glibc_violations$glibcxx_violations" ]]; then + echo "The AppImage still requires symbols newer than Debian 12 provides:" >&2 + printf '%s\n%s\n' "$glibc_violations" "$glibcxx_violations" | sed '/^$/d' >&2 + exit 1 + fi + + echo "AppImage GLIBC/GLIBCXX requirements are compatible with Debian 12." + # TODO: Remove this duplication of the steps in build-release-binaries.yml - name: Install GnuPG (macOS) if: github.event_name == 'release' && runner.os == 'macOS' diff --git a/docs/content/getting_started/install_instructions.mdx b/docs/content/getting_started/install_instructions.mdx index 2d630a09db..b7702dc08f 100644 --- a/docs/content/getting_started/install_instructions.mdx +++ b/docs/content/getting_started/install_instructions.mdx @@ -47,7 +47,7 @@ Choose your platform and follow the instructions. - The AppImage might not work on older distributions (older than Ubuntu 24) due to an upstream bug. Try the Flatpak instead. + The AppImage targets Ubuntu 22.04, Debian 12, and newer distributions. Try the Flatpak instead on older systems. For newer Linux distributions, you can download the AppImage and run it directly. It includes all dependencies. @@ -178,4 +178,3 @@ Each release includes `.asc` signature files alongside the binaries. - From 74d60faa0849ee45ba4dc7e02c9568749bbfb61a Mon Sep 17 00:00:00 2001 From: Shriram Vasudevan <72285290+Shriram-Vasudevan@users.noreply.github.com> Date: Mon, 11 May 2026 21:38:26 -0400 Subject: [PATCH 2/2] Exclude bundled Wayland libs from AppImage --- .../workflows/build-gui-release-binaries.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/build-gui-release-binaries.yml b/.github/workflows/build-gui-release-binaries.yml index 04eda62421..011e7325e4 100644 --- a/.github/workflows/build-gui-release-binaries.yml +++ b/.github/workflows/build-gui-release-binaries.yml @@ -66,6 +66,9 @@ jobs: APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} + # Bundled Wayland libraries can conflict with the host graphics stack on Fedora. + LINUXDEPLOY_EXCLUDED_LIBRARIES: >- + libwayland-client.so.0*;libwayland-cursor.so.0*;libwayland-egl.so.1*;libwayland-server.so.0* with: # Empty releaseId for PRs prevents uploading to GitHub releases # Empty strings are treated as an omitted argument: https://github.com/actions/runner/issues/924 @@ -103,6 +106,21 @@ jobs: ./eigenwallet.AppImage --appimage-extract >/dev/null ) + wayland_violations="$( + find "$workdir/squashfs-root/usr/lib" \ + \( -type f -o -type l \) \ + \( -name 'libwayland-client.so.0*' \ + -o -name 'libwayland-cursor.so.0*' \ + -o -name 'libwayland-egl.so.1*' \ + -o -name 'libwayland-server.so.0*' \) \ + -print 2>/dev/null || true + )" + if [[ -n "$wayland_violations" ]]; then + echo "The AppImage still bundles host graphics-stack Wayland libraries:" >&2 + printf '%s\n' "$wayland_violations" >&2 + exit 1 + fi + find "$workdir/squashfs-root" -type f -print0 \ | xargs -0 grep -aohE 'GLIBC_[0-9]+\.[0-9]+|GLIBCXX_3\.4\.[0-9]+' \ > "$workdir/symbol-versions.txt" || true @@ -125,6 +143,7 @@ jobs: fi echo "AppImage GLIBC/GLIBCXX requirements are compatible with Debian 12." + echo "AppImage does not bundle the Wayland libraries known to break Fedora." # TODO: Remove this duplication of the steps in build-release-binaries.yml - name: Install GnuPG (macOS)