Appimage: Difference between revisions

From NixOS Wiki
imported>Anoadragon453
Link to a slightly earlier section in the nixpkgs manual, so that users see that there is a type 1 and 2 of appimages.
imported>Chrillefkr
Adding binfmt_misc method to run appimage files
Line 11: Line 11:
</syntaxhighlight>
</syntaxhighlight>


== Register AppImage files as a binary type to binfmt_misc ==
You can tell the Linux kernel to use an interpreter (e.g. <code>appimage-run</code>) when executing certain binary files through the use of [https://en.wikipedia.org/wiki/Binfmt_misc#External_links binfmt_misc], either by filename extension or magic number matching. Below NixOS configuration registers AppImage files (ELF files with magic number "AI" + 0x02) to be run with <code>appimage-run</code> as interpreter.
<syntaxhighlight lang="nix">
boot.binfmt.registrations.appimage = {
  wrapInterpreterInShell = false;
  interpreter = "${pkgs.appimage-run}/bin/appimage-run";
  recognitionType = "magic";
  offset = 0;
  mask = ''\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff'';
  magicOrExtension = ''\x7fELF....AI\x02'';
};
</syntaxhighlight>
This way AppImage files can be invoked directly.


== How AppImage files are packaged by NixOS ==
== How AppImage files are packaged by NixOS ==


See the [https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-appimageTools nixpkgs manual on wrapping AppImage packages]. In short, the AppImage is extracted and any dependencies are added as nix build dependencies.
See the [https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-appimageTools nixpkgs manual on wrapping AppImage packages]. In short, the AppImage is extracted and any dependencies are added as nix build dependencies.

Revision as of 22:58, 17 September 2023

AppImage is a monolithic packaging format for linux applications. It contains all dependencies in one file that is composed of an executable with a tacked on filesystem.

On most distros, all one has to do is download the .AppImage file, make it executable chmod +x $AppImage, and execute it. This doesn't work in nixOS out of the box though (can someone explain why?)


Running an AppImage file on NixOS

$ nix-shell -p appimage-run
$ appimage-run $AppImageFile

Register AppImage files as a binary type to binfmt_misc

You can tell the Linux kernel to use an interpreter (e.g. appimage-run) when executing certain binary files through the use of binfmt_misc, either by filename extension or magic number matching. Below NixOS configuration registers AppImage files (ELF files with magic number "AI" + 0x02) to be run with appimage-run as interpreter.

boot.binfmt.registrations.appimage = {
  wrapInterpreterInShell = false;
  interpreter = "${pkgs.appimage-run}/bin/appimage-run";
  recognitionType = "magic";
  offset = 0;
  mask = ''\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff'';
  magicOrExtension = ''\x7fELF....AI\x02'';
};

This way AppImage files can be invoked directly.

How AppImage files are packaged by NixOS

See the nixpkgs manual on wrapping AppImage packages. In short, the AppImage is extracted and any dependencies are added as nix build dependencies.