From d4d4b362d271e4b50aa49b36e388e7049a0e35fb Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 23 Sep 2026 06:19:22 +0000 Subject: [PATCH] Use uruntime for the AppImage so it runs without libfuse2 AppImageKit's runtime dlopens libfuse.so.2, which Ubuntu 22.04+ and Fedora no longer install by default, so the nightly AppImage failed to start there. uruntime uses FUSE when available and otherwise falls back to mount namespaces or extract-and-run. Pinned to v0.7.1. Refs #136 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WrqyVv7K7HAEYqiG5pyauK --- scripts/build-appimage.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/scripts/build-appimage.ts b/scripts/build-appimage.ts index 105ed42..bfd8c42 100755 --- a/scripts/build-appimage.ts +++ b/scripts/build-appimage.ts @@ -145,6 +145,15 @@ await $`chmod +x ${appDir}/AppRun`; // runtime regardless of $ARCH, which would silently produce a broken, // non-executable AppImage when cross-packaging for aarch64 - so the matching // runtime stub is always fetched explicitly and passed via --runtime-file. +// +// The runtime is uruntime rather than AppImageKit's: AppImageKit's runtime +// needs libfuse2, which most current distros (Ubuntu 22.04+, Fedora, ...) +// don't install by default, so the AppImage would fail to start there. +// uruntime is a static musl binary that uses FUSE when it can, and otherwise +// falls back to mount namespaces or extracting to a temp dir - so the +// AppImage also starts on hosts without FUSE. Pinned to a tag so builds are +// reproducible. +const URUNTIME_VERSION = "v0.7.1"; const appimagetool = `${workDir.path}/appimagetool`; await $.request( @@ -157,7 +166,7 @@ const appimagetoolArch = arch === "aarch64" ? "arm_aarch64" : arch; const runtimeFile = `${workDir.path}/runtime-${arch}`; await $.request( - `https://github.com/AppImage/AppImageKit/releases/download/continuous/runtime-${arch}`, + `https://github.com/VHSgunzo/uruntime/releases/download/${URUNTIME_VERSION}/uruntime-appimage-squashfs-${arch}`, ).pipeToPath(runtimeFile); await $`mkdir -p ${outputPath.replace(/[^/]+$/, "") || "."}`;