AppImage Packaging

Ásbrú can be distributed as an AppImage, with the necessary code for this inside the dist/appimage-raw folder. The embedded binaries are currently based on Alpine Linux, which is the base OS for the build. The generated AppImage is quite large but embeds all of the needed Perl and GTK libraries and even libc so it's expected to work on most, if not all, Linux systems.

Building

To build the AppImage, you will need Docker installed and accessible from your POSIX shell. Then, just cd to the root directory of the project, and run: ./dist/appimage-raw/make_appimage.sh. It will be available on ./dist/appimage-raw/build.

Code Support

Code changes were needed to make the AppImage work independently of the particular system that is running it, since Ásbrú is a complex application which invokes multiple subprocesses and interacts with the OS in various different ways. The reason for each will be documented here for future maintainers' knowledge of the needed adjustments.

Additional Environment Variables

Some environment variables were created when running as an AppImage so that the code can use them for adjusting the way it runs subprocesses.

The environment variables ASBRU_ENV_FOR_EXTERNAL and ASBRU_ENV_FOR_INTERNAL contain strings that, when prepended to shell commands, use either the original environment variables (for invoking programs external to the AppImage) or the internal modified environment variables (for invoking programs internal to the AppImage where the invocation is intermediated by a program external to the AppImage).

The environment variable ASBRU_SUB_CWD is created in-code and is necessary because using cd is no longer a viable approach when supporting AppImages, since the process works by relinking the LD header binaries inside the AppImage to the relative path of the embedded libc implementation, so when creating the asbru_conn subprocess, the desired shell directory must be communicated somehow.

Environent variable ASBRU_IS_APPIMAGE is also set to 1, if any future specific checks need to be done.