Ship AppImage with bundled GTK runtime and automated releases
AppImage / build (push) Has been cancelled
AppImage / release (push) Has been cancelled
Tests / unit (de, 3.10) (push) Has been cancelled
Tests / unit (de, 3.14) (push) Has been cancelled
Tests / unit (en, 3.10) (push) Has been cancelled
Tests / unit (en, 3.14) (push) Has been cancelled
AppImage / build (push) Has been cancelled
AppImage / release (push) Has been cancelled
Tests / unit (de, 3.10) (push) Has been cancelled
Tests / unit (de, 3.14) (push) Has been cancelled
Tests / unit (en, 3.10) (push) Has been cancelled
Tests / unit (en, 3.14) (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
# AppImage packaging
|
||||
|
||||
The x86-64 AppImage bundles Python 3.12, PyGObject, GTK 4, libadwaita,
|
||||
libdbusmenu, icons and fallback fonts from Ubuntu 24.04. It requires a Linux
|
||||
host with **glibc 2.39 or newer** and a graphical Wayland or X11 session.
|
||||
It does not bundle glibc, audio drivers or firmware. ARM and older glibc
|
||||
distributions are not supported by this binary; running from source is another option.
|
||||
|
||||
## Download and use
|
||||
|
||||
Download the `.AppImage` from [GitHub Releases](https://github.com/justin-eckenweber/btd700linux/releases/latest),
|
||||
make it executable, and open it. All regular CLI arguments also work.
|
||||
|
||||
```bash
|
||||
chmod +x BTD_700_Control-*-x86_64.AppImage
|
||||
./BTD_700_Control-0.3.0-x86_64.AppImage
|
||||
./BTD_700_Control-0.3.0-x86_64.AppImage --demo
|
||||
```
|
||||
|
||||
Put the file at its permanent location before adding a menu entry:
|
||||
|
||||
```bash
|
||||
./BTD_700_Control-0.3.0-x86_64.AppImage --install-desktop
|
||||
```
|
||||
|
||||
The menu entry and **Start at login** use the original AppImage path, not its
|
||||
temporary mount. Moving or renaming the file requires installing the menu entry
|
||||
again and toggling Start at login off/on. `--remove-desktop` removes this app's
|
||||
menu entry, autostart entry and installed icon. It leaves the AppImage in place.
|
||||
|
||||
If FUSE is unavailable, use the runtime's extraction mode:
|
||||
|
||||
```bash
|
||||
APPIMAGE_EXTRACT_AND_RUN=1 ./BTD_700_Control-0.3.0-x86_64.AppImage
|
||||
```
|
||||
|
||||
When installing a menu entry or enabling autostart from this mode, the launcher
|
||||
preserves it using the runtime's `--appimage-extract-and-run` argument.
|
||||
|
||||
For a permanent launcher on such a system, extract once with `--appimage-extract`,
|
||||
keep the resulting `squashfs-root` directory, and run its `AppRun`. The launcher
|
||||
created from that extracted copy uses its `AppRun` wrapper. Remove its
|
||||
desktop/autostart entries before deleting the directory.
|
||||
|
||||
GNOME still needs a working StatusNotifier/AppIndicator extension for a tray.
|
||||
USB access uses the host's `/dev/hidraw` permissions. If access is denied, download
|
||||
`70-btd700-control.rules` from the same release and install it as described in the
|
||||
[README](../README.md#usb-permissions). The app never changes system permissions itself.
|
||||
|
||||
## Build
|
||||
|
||||
Run from the repository root using rootless Podman (Docker can also build the
|
||||
same Containerfile):
|
||||
|
||||
```bash
|
||||
podman build -t btd700-appimage-builder -f packaging/appimage/Containerfile .
|
||||
podman run --rm -v "$PWD:/src:z" btd700-appimage-builder
|
||||
```
|
||||
|
||||
Verify the resulting file on a minimal test host without Python, GTK, libadwaita
|
||||
or libdbusmenu installed (CLI, menu installation/removal, both GUI languages,
|
||||
real D-Bus tray events against a simulated device, and extraction-mode startup):
|
||||
|
||||
```bash
|
||||
podman build -t btd700-appimage-test -f packaging/appimage/TestContainerfile .
|
||||
podman run --rm -v "$PWD:/src:z" btd700-appimage-test
|
||||
```
|
||||
|
||||
The output goes to `dist/`. Ubuntu source repositories are enabled in the builder.
|
||||
`assemble.py` copies runtime files and follows their ELF dependencies, retaining
|
||||
package versions and license texts. The build downloads the exact corresponding
|
||||
Ubuntu source archives and publishes them in `*-dependency-sources.tar.gz`.
|
||||
`*-packages.json` lists the binary and source versions. The container receives
|
||||
current Ubuntu 24.04 security updates, so two builds at different times need not
|
||||
be byte-identical. No host packages are installed by this process.
|
||||
|
||||
Appimagetool 1.9.1 and type2-runtime 20251108 are checksum-pinned. The dependency
|
||||
source archive also includes the runtime source, its build scripts and patches,
|
||||
and the libfuse 3.15.0 and squashfuse 0.5.2 sources used by that runtime. To rebuild
|
||||
the runtime, follow `BUILD.md` and `scripts/docker/` in that source archive;
|
||||
the Dockerfile uses Alpine 3.21 and installs its build dependencies. The GNU LGPL
|
||||
libraries in the AppDir remain dynamically linked and replaceable after extracting
|
||||
the image. Repack a modified AppDir using appimagetool with `--runtime-file`.
|
||||
For Ubuntu libraries, unpack their `.dsc` files with `dpkg-source -x`, install
|
||||
the package's build dependencies and build with `dpkg-buildpackage` in Ubuntu 24.04.
|
||||
For app modifications, rebuild from this project's tagged source and Containerfile.
|
||||
|
||||
The release contains `SHA256SUMS` for the binary, dependency sources, package manifest
|
||||
and USB rule. The project itself remains MIT-licensed; dependencies retain their
|
||||
own licenses. See [third-party notices](../THIRD_PARTY_NOTICES.md).
|
||||
Reference in New Issue
Block a user