[appimage] AppImage auf jeder Linux-Distro lauffaehig (inkl. NixOS)
Some checks failed
Build AppImage / build (push) Failing after 5m28s

Zwei kombinierte Patches:

1. main.rs: WEBKIT_DISABLE_DMABUF_RENDERER + WEBKIT_DISABLE_COMPOSITING_MODE
   als defensive Defaults wenn nicht vom User gesetzt. Behebt typische
   WebKit2GTK-Renderer-Crashes auf modernen Wayland-Setups.

2. Workflow: nach 'tauri build' wird der AppRun gepatched.
   - Detect NixOS via /run/opengl-driver/lib -> Host-Mesa via LD_LIBRARY_PATH
   - WebKit-Workarounds als ENV-Defaults (override moeglich)
   - Standard linuxdeploy-Pfade (PATH, XDG_DATA_DIRS etc.)
   - Re-bundle mit appimagetool

Resultat: AppImage laeuft out-of-the-box auf Debian/Ubuntu/Fedora/NixOS,
ohne dass der User ENV-Vars setzen muss.
This commit is contained in:
Eddy 2026-04-19 23:27:40 +02:00
parent c9f352ecbf
commit e69ffe7f2b
2 changed files with 69 additions and 0 deletions

View file

@ -36,6 +36,59 @@ jobs:
npm run tauri build -- --bundles appimage npm run tauri build -- --bundles appimage
ls -la src-tauri/target/release/bundle/appimage/ ls -la src-tauri/target/release/bundle/appimage/
- name: Patch AppRun fuer NixOS-Support + Re-Bundle
run: |
set -e
BUNDLE_DIR=src-tauri/target/release/bundle/appimage
APPDIR=$(ls -d "$BUNDLE_DIR"/*.AppDir | head -1)
OLD_APPIMAGE=$(ls "$BUNDLE_DIR"/*.AppImage | head -1)
OLD_NAME=$(basename "$OLD_APPIMAGE")
echo "AppDir: $APPDIR"
echo "Original AppImage: $OLD_NAME"
# Original AppRun sichern (falls Tauri spaeter mehr reinpackt)
cp "$APPDIR/AppRun" "$APPDIR/AppRun.original"
# Custom AppRun: NixOS-Detection + WebKit-Workarounds
cat > "$APPDIR/AppRun" << 'APPRUN_EOF'
#!/bin/bash
HERE="$(dirname "$(readlink -f "${0}")")"
# NixOS: Host-Mesa unter /run/opengl-driver bevorzugen,
# weil bundled Mesa gegen NixOS-Treiber kollidiert
if [ -d /run/opengl-driver/lib ]; then
export LD_LIBRARY_PATH="/run/opengl-driver/lib:${LD_LIBRARY_PATH}"
fi
# WebKit-Workarounds fuer problematische GPU/Compositor-Stacks.
# Nur setzen wenn User nichts vorgegeben hat (override moeglich).
: "${WEBKIT_DISABLE_DMABUF_RENDERER:=1}"
: "${WEBKIT_DISABLE_COMPOSITING_MODE:=1}"
export WEBKIT_DISABLE_DMABUF_RENDERER WEBKIT_DISABLE_COMPOSITING_MODE
# Standard-AppImage-Runtime (analog zu linuxdeploy-Default)
export PATH="${HERE}/usr/bin:${PATH}"
export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}"
export XDG_DATA_DIRS="${HERE}/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
export GSETTINGS_SCHEMA_DIR="${HERE}/usr/share/glib-2.0/schemas:${GSETTINGS_SCHEMA_DIR}"
export GDK_PIXBUF_MODULE_FILE="${HERE}/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache"
# Tauri-Binary aufrufen
BIN=$(find "${HERE}/usr/bin" -maxdepth 1 -type f -executable | head -1)
exec "$BIN" "$@"
APPRUN_EOF
chmod +x "$APPDIR/AppRun"
echo "--- neuer AppRun ---"
cat "$APPDIR/AppRun"
# Altes AppImage weg, neu packen mit appimagetool
rm "$OLD_APPIMAGE"
appimagetool --no-appstream "$APPDIR" "$BUNDLE_DIR/$OLD_NAME"
ls -la "$BUNDLE_DIR/"
- name: Get Version - name: Get Version
id: version id: version
run: | run: |

View file

@ -2,5 +2,21 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() { fn main() {
// WebKit-Workarounds fuer Linux-GPU-Stacks die mit dem
// bundled WebKit2GTK Probleme machen (NixOS, aeltere Mesa,
// Wayland-Bugs). Nur setzen wenn der User nicht selbst
// schon was vorgegeben hat.
#[cfg(target_os = "linux")]
{
for (key, val) in [
("WEBKIT_DISABLE_DMABUF_RENDERER", "1"),
("WEBKIT_DISABLE_COMPOSITING_MODE", "1"),
] {
if std::env::var_os(key).is_none() {
std::env::set_var(key, val);
}
}
}
claude_desktop_lib::run() claude_desktop_lib::run()
} }