feat: linux appimage build with docker, egl fallback, and webkitgtk fixes
This commit is contained in:
81
Dockerfile.appimage
Normal file
81
Dockerfile.appimage
Normal file
@@ -0,0 +1,81 @@
|
||||
FROM ubuntu:24.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Tauri v2 build dependencies for Ubuntu 24.04 (glibc 2.39, WebKitGTK 2.44+)
|
||||
# Targets any distro from mid-2024 onwards while supporting modern Wayland compositors
|
||||
RUN apt-get update && apt-get install -y \
|
||||
build-essential \
|
||||
curl \
|
||||
wget \
|
||||
file \
|
||||
libgtk-3-dev \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
librsvg2-dev \
|
||||
patchelf \
|
||||
libssl-dev \
|
||||
libayatana-appindicator3-dev \
|
||||
libglib2.0-dev \
|
||||
libgdk-pixbuf2.0-dev \
|
||||
libsoup-3.0-dev \
|
||||
libjavascriptcoregtk-4.1-dev \
|
||||
xdg-utils \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install Node.js 22 LTS
|
||||
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
|
||||
&& apt-get install -y nodejs \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install Rust stable
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
|
||||
ENV PATH="/root/.cargo/bin:${PATH}"
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Cache Rust dependencies first
|
||||
COPY src-tauri/Cargo.toml src-tauri/Cargo.lock src-tauri/
|
||||
COPY src-tauri/build.rs src-tauri/
|
||||
# Create stub lib/main so cargo can resolve the crate
|
||||
RUN mkdir -p src-tauri/src && \
|
||||
echo 'fn main() {}' > src-tauri/src/main.rs && \
|
||||
echo '' > src-tauri/src/lib.rs && \
|
||||
cd src-tauri && cargo fetch && \
|
||||
rm -rf src
|
||||
|
||||
# Cache npm dependencies
|
||||
COPY package.json package-lock.json ./
|
||||
RUN npm ci
|
||||
|
||||
# Copy the full source
|
||||
COPY . .
|
||||
|
||||
# Build the AppImage
|
||||
RUN npx tauri build --bundles appimage
|
||||
|
||||
# Strip GPU/GL libraries that linuxdeploy bundles from the build system.
|
||||
# These MUST come from the host's GPU driver at runtime - bundling them causes
|
||||
# black windows, EGL failures, and driver mismatches on any system with a
|
||||
# different Mesa version or proprietary NVIDIA drivers.
|
||||
# See: https://github.com/AppImage/pkg2appimage/blob/master/excludelist
|
||||
RUN cd src-tauri/target/release/bundle/appimage && \
|
||||
chmod +x *.AppImage && \
|
||||
./*.AppImage --appimage-extract && \
|
||||
find squashfs-root \( \
|
||||
-name "libEGL.so*" -o \
|
||||
-name "libGL.so*" -o \
|
||||
-name "libGLX.so*" -o \
|
||||
-name "libGLdispatch.so*" -o \
|
||||
-name "libOpenGL.so*" -o \
|
||||
-name "libgbm.so*" -o \
|
||||
-name "libdrm.so*" -o \
|
||||
-name "libglapi.so*" -o \
|
||||
-name "libGLESv2.so*" \
|
||||
\) -delete && \
|
||||
rm -f *.AppImage && \
|
||||
wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O /tmp/appimagetool && \
|
||||
chmod +x /tmp/appimagetool && \
|
||||
ARCH=x86_64 /tmp/appimagetool --appimage-extract-and-run --no-appstream squashfs-root/ && \
|
||||
rm -rf squashfs-root /tmp/appimagetool
|
||||
|
||||
# The AppImage will be in src-tauri/target/release/bundle/appimage/
|
||||
Reference in New Issue
Block a user