From 2dbaec726cdde3b94f7e2cec89aa2b53995741ef Mon Sep 17 00:00:00 2001 From: Christoph Stahl Date: Tue, 17 Jun 2025 10:23:41 +0200 Subject: [PATCH] Appimage build scripts --- resources/appimage/Dockerfile | 56 +++++++++++++++++ resources/appimage/build.sh | 112 ++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 resources/appimage/Dockerfile create mode 100755 resources/appimage/build.sh diff --git a/resources/appimage/Dockerfile b/resources/appimage/Dockerfile new file mode 100644 index 0000000..7835e76 --- /dev/null +++ b/resources/appimage/Dockerfile @@ -0,0 +1,56 @@ +FROM archlinux:latest +RUN pacman -Syu --noconfirm \ + alsa-lib \ + base-devel \ + desktop-file-utils \ + ffmpeg \ + git \ + glibc \ + hicolor-icon-theme \ + jack \ + lcms2 \ + libarchive \ + libass \ + libbluray \ + libcdio \ + libcdio-paranoia \ + libdrm \ + libdvdnav \ + libdvdread \ + libegl \ + libgl \ + libglvnd \ + libjpeg-turbo \ + libplacebo \ + libpulse \ + libsixel \ + libva \ + libvdpau \ + libx11 \ + libxext \ + libxkbcommon \ + libxpresent \ + libxrandr \ + libxss \ + libxv \ + luajit \ + mesa \ + meson \ + nasm \ + patchelf \ + libpipewire \ + rubberband \ + openal \ + uchardet \ + vulkan-headers \ + vulkan-icd-loader \ + wayland \ + wayland-protocols \ + wget \ + xorg-server-xvfb \ + zlib \ + zsync + RUN pacman -S --noconfirm fuse2 + RUN pacman -S --noconfirm squashfs-tools + RUN useradd -m builder + USER builder diff --git a/resources/appimage/build.sh b/resources/appimage/build.sh new file mode 100755 index 0000000..69941b0 --- /dev/null +++ b/resources/appimage/build.sh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash + +mkdir /app && cd /app +if [ ! -x /app/python3.13.5-cp313-cp313-manylinux_2_28_x86_64.AppImage ]; then + echo "Downloading Python 3.13 AppImage..." + wget https://github.com/niess/python-appimage/releases/download/python3.13/python3.13.5-cp313-cp313-manylinux_2_28_x86_64.AppImage + chmod +x python3.13.5-cp313-cp313-manylinux_2_28_x86_64.AppImage +else + echo "Python 3.13 AppImage already exists." +fi +if [ ! -x /app/linuxdeploy-x86_64.AppImage ]; then + echo "Downloading linuxdeploy AppImage..." + wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage + chmod +x linuxdeploy-x86_64.AppImage + # ./linuxdeploy-x86_64.AppImage --appimage-extract + # rm linuxdeploy-x86_64.AppImage + # rm squashfs-root/usr/bin/strip + # cp /usr/bin/strip squashfs-root/usr/bin/strip + # squashfs-root/plugins/linuxdeploy-plugin-appimage/appimagetool-prefix/usr/bin/appimagetool -gn squashfs-root/ + # rm -r squashfs-root +else + echo "linuxdeploy AppImage already exists." +fi +if [ ! -x /app/linuxdeploy-plugin-qt-x86_64.AppImage ]; then + echo "Downloading linuxdeploy-plugin-qt AppImage..." + wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage + chmod +x linuxdeploy-plugin-qt-x86_64.AppImage +else + echo "linuxdeploy-plugin-qt AppImage already exists." +fi + +if [ ! -x /app/ffmpeg-linux-x64 ]; then + echo "Downloading ffmpeg static binary..." + wget https://github.com/eugeneware/ffmpeg-static/releases/download/b6.0/ffmpeg-linux-x64 + chmod +x ffmpeg-linux-x64 +else + echo "ffmpeg static binary already exists." +fi + +if [ ! -d /app/syng ]; then + echo "Cloning Syng repository..." + git clone https://github.com/christofsteel/syng.git /app/syng +else + echo "Syng repository already exists." +fi + +if [ -d /app/AppDir ]; then + echo "Directory /app/AppDir already exists, deleting..." + rm -rf /app/AppDir +fi + +if [ ! -x /app/mpv/mpv-build/mpv/build/libmpv.so.2.5.0 ]; then + echo "Building MPV..." + mkdir -p /app/mpv + cd /app/mpv + git clone https://github.com/mpv-player/mpv-build.git + cd mpv-build + echo "-Dlibmpv=true" > mpv_options + ./rebuild -j16 + + cd /app +else + echo "MPV build already exists." +fi +echo "Building MPV..." + +/app/python3.13.5-cp313-cp313-manylinux_2_28_x86_64.AppImage --appimage-extract +mv /app/squashfs-root /app/AppDir + +echo "Copy FFmpeg and MPV libraries..." +cp /app/ffmpeg-linux-x64 /app/AppDir/usr/bin/ffmpeg +cp /app/mpv/build_libs/bin/ffmpeg /app/AppDir/usr/bin/ffmpeg + +cp /app/mpv/mpv-build/mpv/build/libmpv.so.2.5.0 /app/AppDir/usr/lib/libmpv.so.2.5.0 +ln -s libmpv.so.2.5.0 /app/AppDir/usr/lib/libmpv.so.2 +ln -s libmpv.so.2.5.0 /app/AppDir/usr/lib/libmpv.so + +/app/AppDir/opt/python3.13/bin/python3.13 -m pip install syng[client] --target=/app/AppDir/packages + +echo "Modifying AppDir structure..." + +rm /app/AppDir/python3.13.5.desktop /app/AppDir/python.png /app/AppDir/usr/share/applications/python3.13.5.desktop + +cat < /app/AppDir/usr/share/applications/syng.desktop +[Desktop Entry] +Version=1.0 +Type=Application + +Name=Syng + +Comment=An all-in-one karaoke player + +Exec=syng +Icon=rocks.syng.Syng +Categories=AudioVideo +EOF + +cp /app/syng/resources/icons/hicolor/256x256/apps/rocks.syng.Syng.png /app/AppDir/usr/share/icons/hicolor/256x256/apps/ +APPRUN_LENGTH=$(wc -l < /app/AppDir/AppRun | cut -d' ' -f1) +head -n $(($APPRUN_LENGTH - 2)) /app/AppDir/AppRun > /app/AppDir/AppRun.tmp +echo 'export LD_LIBRARY_PATH="$APPDIR/usr/lib:$LD_LIBRARY_PATH"' >> /app/AppDir/AppRun.tmp +echo 'export PYTHONPATH="$APPDIR/packages"' >> /app/AppDir/AppRun.tmp +echo '"$APPDIR/opt/python3.13/bin/python3.13" -m syng "$@"' >> /app/AppDir/AppRun.tmp +mv /app/AppDir/AppRun.tmp /app/AppDir/usr/bin/syng +chmod +x /app/AppDir/usr/bin/syng +rm /app/AppDir/AppRun +# ln -s usr/bin/syng /app/AppDir/AppRun + +export EXTRA_PLATFORM_PLUGINS=wayland +echo "Building AppImage..." +export NO_STRIP=true +/app/linuxdeploy-x86_64.AppImage --appdir /app/AppDir --output appimage