midi-harbor/packaging/sysroot
James Coleman d11a525008 feat(release): publish an AppImage for each Linux architecture
- Releases now include Midi-Harbor-<version>-<x86_64|aarch64>.AppImage, built from the same binary as the packages and listed in checksums.txt, for distributions without a .deb or .rpm. Opened with no arguments it shows the window, and the daemon it registers runs under the systemd user unit like a package install.
- service install run from an AppImage registers the .AppImage file instead of the executable inside the runtime's temporary mount, which is gone once the process exits. The file is used only when the running executable is inside APPDIR, so a program started from another AppImage, whose APPIMAGE it inherits, still registers itself.
- The AppImage carries only the Avahi client libraries from the Debian 12 sysroot, with their LGPL-2.1 license, found through the binary's RUNPATH rather than LD_LIBRARY_PATH; glibc 2.35 or newer, ALSA, D-Bus and libxkbcommon come from the host, as for the packages.
- Its AppRun starts the binary as midi-harbor, so on X11 the window's class matches the desktop entry instead of the AppImage's file name.
- Building it needs the cross image's new patchelf, file, appimagetool 1.9.1 and type2 runtime 20251108, pinned by checksum, and a sysroot rebuilt to carry Avahi's license; the script stops and names make build-sysroot when that license is missing.
2026-09-29 14:35:51 -05:00
..
build.sh First commit 2026-09-28 13:59:10 -05:00
Dockerfile feat(release): publish an AppImage for each Linux architecture 2026-09-29 14:35:51 -05:00
README.md First commit 2026-09-28 13:59:10 -05:00

Building the sysroots

The release build cross-compiles for Linux against Debian 12's libraries, so a Linux package runs on Debian 12, Ubuntu 22.04 and anything newer. build.sh builds a Debian image for each architecture and keeps only its headers, libraries and pkg-config files, in target/sysroot/linux_amd64 and target/sysroot/linux_arm64.

It needs Docker with the buildx extension and emulation for the other architecture. Docker Desktop has both. On Linux, install qemu's binfmt support and check it is registered:

ls /proc/sys/fs/binfmt_misc/

Then, from the repository root:

make build-sysroot