Using AppImageKit you can package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, Ubuntu, Fedora, debian and derivatives.
C Shell
Latest commit ce2d4d7 Jan 24, 2017 @probonopd committed on GitHub Merge pull request #335 from jgmdev/appimagetool/master
Fixed segfault on appimaged as described on issue #334
Permalink
Failed to load latest commit information.
resources Fix icon, closes #280 Nov 14, 2016
squashfs-tools @ 81f6e4f Add squashfs-tools submodule Oct 15, 2016
squashfuse @ 1f98030 minor modification for runtime Oct 18, 2016
.gitignore Initial commit Sep 14, 2016
.gitmodules Add squashfs-tools submodule Oct 15, 2016
.travis.yml Only build the appimagetool/master branch Jan 15, 2017
AppRun.c Fix segfault when calling AppRun from outside the AppDir by using an … Oct 23, 2016
LICENSE Update LICENSE Nov 12, 2016
Makefile.runtime restore lz4 support Oct 18, 2016
README.md Mention /isofrom/Applications and /run/archiso/img_dev/Applications Jan 22, 2017
appimaged.c Removed a left over exit() call that was used for testing. Jan 24, 2017
appimaged.ctl Do not hardcode architecture Dec 3, 2016
appimagetool.c Create usr/share/metainfo/ before trying to write there Dec 20, 2016
appimagetoolnoglib.c Make the glib version of appimagetool the default since it can do more Sep 17, 2016
binreloc.c Automatically suggest TARGET; using binreloc for string concatenation Sep 15, 2016
binreloc.h Automatically suggest TARGET; using binreloc for string concatenation Sep 15, 2016
build-appdirs.sh Use patched mksquashfs --offset feature (#277) Nov 12, 2016
build.sh Add determine_icon_destination() function Jan 22, 2017
digest.c Function to read ELF sections Sep 25, 2016
elf.c elf.c: in read_elf32, compare read size against ehdr32 instead of ehd… Nov 16, 2016
elf.h Properly include elf.h Sep 18, 2016
getsection.c getsection: make use of Elf32_Ehdr and Elf32_Shdr on 32-bit systems (#… Dec 2, 2016
getsection.h Function to read ELF sections Sep 25, 2016
install-build-deps.sh Install Cairo (needed for determining icon size) Jan 22, 2017
notify.c fix timeout according to comment Oct 17, 2016
runtime.c Revert "Reapply "Fix symlink extraction"" Nov 14, 2016
shared.c Move icons with unknown size to icons/hicolor/48x48/apps Jan 22, 2017
squashfuse.patch reduce Makefile.am modification on squashfuse Oct 18, 2016
validate.c Add validate tool to verify signatures Sep 25, 2016

README.md

AppImageKit Build Status discourse Gitter irc Donate

Copyright (c) 2004-16 Simon Peter probono@puredarwin.org and contributors.

Using AppImageKit you can package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, Ubuntu, Fedora, Debian and derivatives.

The AppImage format is a format for packaging applications in a way that allows them to run on a variety of different target systems (base operating systems, distributions) without further modification.

https://en.wikipedia.org/wiki/AppImage

AppImageKit is a concrete implementation of the AppImage format and provides tools such as appimagetool and appimaged for conveniently handling AppImages.

appimagetool uses a next-generation AppImage format based on squashfs and embeds a runtime for it. appimaged is a daemon that handles registering and unregistering AppImages with the system (e.g., menu entries, icons, MIME types, binary delta updates, and such).

appimagetool usage

A precompiled version can be found in the last successful Travis CI build, you can get it with:

wget "https://github.com/probonopd/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod a+x appimagetool-x86_64.AppImage

Usage in a nutshell, assuming that you already have an AppDir in place:

./appimagetool-x86_64.AppImage some.AppDir

Detailed usage:

Usage:
  appimagetool [OPTION...] SOURCE [DESTINATION] - Generate, extract, and inspect AppImages

Help Options:
  -h, --help                  Show help options

Application Options:
  -l, --list                  List files in SOURCE AppImage
  -u, --updateinformation     Embed update information STRING; if zsyncmake is installed, generate zsync file
  --bintray-user              Bintray user name
  --bintray-repo              Bintray repository
  --version                   Show version number
  -v, --verbose               Produce verbose output
  -s, --sign                  Sign with gpg2
  -n, --no-appstream          Do not check AppStream metadata

If you want to generate an AppImage manually, you can:

mksquashfs Your.AppDir Your.squashfs -root-owned -noappend
cat runtime >> Your.AppImage
cat Your.squashfs >> Your.AppImage
chmod a+x Your.AppImage

appimaged usage

appimaged is an optional daemon that watches locations like ~/bin and ~/Downloads for AppImages and if it detects some, registers them with the system, so that they show up in the menu, have their icons show up, MIME types associated, etc. It also unregisters AppImages again from the system if they are deleted. If firejail is installed, it runs the AppImages with it.

A precompiled version can be found in the last successful Travis CI build, you can get it with:

wget "https://github.com/probonopd/AppImageKit/releases/download/continuous/appimaged-x86_64.AppImage"
chmod a+x appimaged-x86_64.AppImage

Usage in a nutshell:

./appimaged-x86_64.AppImage --install

Or, if you are on a deb-based system:

wget -c "https://github.com/probonopd/AppImageKit/releases/download/continuous/appimaged_1.0_amd64.deb"
sudo dpkg -i appimaged_*.deb
systemctl --user enable appimaged
systemctl --user start appimaged

It will register the AppImages in with your system from the following places:

  • $HOME/Downloads
  • $HOME/.local/bin
  • $HOME/bin
  • /Applications
  • /isodevice/Applications
  • /isofrom/Applications
  • /run/archiso/img_dev/Applications
  • /opt
  • /usr/local/bin

Run appimaged -v for increased verbosity.

Detailed usage:

Usage:
  appimaged [OPTION...] 

Help Options:
  -h, --help          Show help options

Application Options:
  -v, --verbose       Be verbose
  -i, --install       Install this appimaged instance to $HOME
  -u, --uninstall     Uninstall an appimaged instance from $HOME
  --version           Show version number

NOTE: It may be necessary to restart (or xkill) dash, nautilus, to recognize new directories that didn't exist prior to the first run of appimaged. Alternatively, it should be sufficient to log out of the session and log in again after having run appimaged once.

If you have AppImageUpdate on your $PATH, then it can also do this neat trick:

screenshot from 2016-10-15 16-37-05

Here is an easy way to get the latest AppImageUpdate onto your $PATH:

APP=AppImageUpdate
nodeFileName=$(wget -q "https://bintray.com/package/files/probono/AppImages/$APP?order=desc&sort=fileLastModified&basePath=&tab=files" -O - | grep -e '-x86_64.AppImage">' | cut -d '"' -f 6 | head -n 1)
wget -c "https://bintray.com/$nodeFileName" -O "$APP"
chmod a+x "$APP"
sudo mv "$APP" /usr/local/bin/

Building

NOTE: The AppImage project supplies binaries that application developers can use. These binaries are built using the CentOS 6 Docker on Travis CI build system in this repository. As an application developer, you do not have to use the build system. You only have to use the build systems when contributing to AppImageKit, when needing another architecture than x86_64, or when trying to reproduce our binaries.

On a not too recent Ubuntu:

git clone -b appimagetool/master --single-branch --recursive https://github.com/probonopd/AppImageKit
cd AppImageKit/
sudo bash -ex install-build-deps.sh
bash -ex build.sh