From d7db153c246e28bae58c45c05975df146e6ff336 Mon Sep 17 00:00:00 2001 From: SRHTNIN Date: Tue, 13 Oct 2026 09:13:49 +0200 Subject: [PATCH] Build AppImages for older glibc Co-Authored-By: Claude Opus 5.5 --- Packaging/BuildAppImage.sh | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/Packaging/BuildAppImage.sh b/Packaging/BuildAppImage.sh index 139a840..48c68ea 100755 --- a/Packaging/BuildAppImage.sh +++ b/Packaging/BuildAppImage.sh @@ -1,18 +1,28 @@ #!/bin/bash # Builds dist/SaraSuite-x86_64.AppImage: a PyInstaller one-file build (with # the program manifests, fonts and icon bundled) wrapped by appimagetool, -# the same way SaraFem's AppImage is made. Needs appimagetool on PATH. +# the same way SaraFem's AppImage is made. Needs podman and appimagetool +# on PATH. set -euo pipefail cd "$(dirname "$(readlink -f "$0")")/.." -.venv/bin/pip install --quiet --disable-pip-version-check pyinstaller find Programs -name __pycache__ -type d -prune -exec rm -rf {} + -.venv/bin/pyinstaller --noconfirm --clean --log-level WARN \ - --onefile --windowed --name SaraSuite --collect-data flet \ - --add-data "$PWD/assets:assets" --add-data "$PWD/Programs:Programs" \ - --distpath build/PyInstaller/dist --workpath build/PyInstaller/work --specpath build/PyInstaller \ - "$PWD/Main.py" +# PyInstaller runs in a manylinux_2_28 container (glibc 2.28) with uv's +# portable Python, not with Fedora's: PyInstaller bundles libpython, and +# Fedora's needs a newer glibc than many distros have ("GLIBC_ABI_GNU2_TLS +# not found"). The Python, venv and downloads are cached in build/Container. +mkdir -p build/Container +podman run --rm --security-opt label=disable -v "$PWD:/src" -w /src \ + -e UV_CACHE_DIR=/src/build/Container/cache -e UV_PYTHON_INSTALL_DIR=/src/build/Container/python \ + quay.io/pypa/manylinux_2_28_x86_64 bash -euo pipefail -c ' + uv venv --quiet --allow-existing --managed-python --python 3.14 build/Container/venv + uv pip install --quiet --python build/Container/venv -r requirements.txt flet-desktop pyinstaller + build/Container/venv/bin/pyinstaller --noconfirm --clean --log-level WARN \ + --onefile --windowed --name SaraSuite --collect-data flet \ + --add-data "$PWD/assets:assets" --add-data "$PWD/Programs:Programs" \ + --distpath build/PyInstaller/dist --workpath build/PyInstaller/work --specpath build/PyInstaller \ + "$PWD/Main.py"' AppDir=build/AppDir rm -rf "$AppDir"