# How to create an AppImage?

**URL:** <https://discourse.appimage.org/t/how-to-create-an-appimage/155>\
**Category:** Creating AppImages\
**Created:** [March 2, 2017, 9:24pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155 "2017-03-02T21:24:10Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 2, 2017, 9:24pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/1 "2017-03-02T21:24:10Z")

</div>

Hi there, i want to know, if someone have a Tutorials, Tips & Tricks for create by easy way or not too much dificult way an AppImage file.

i recently compile AppImage Kit, but i dont know what i should do to make an AppImage.

someone have an easy example???

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 3, 2017, 3:59pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/2 "2017-03-03T15:59:49Z")

</div>

Hi @inukaze and welcome to AppImage.

There are different ways to generate an AppImage of your application:

1. Convert existing binary packages, or
2. Bundle your Travis CI builds as AppImages, or
3. Run linuxdeployqt on your Qt application, or
4. Use electron-builder, or
5. Manually create an AppDir

Please see this to get started:

> **[AppImage/AppImageKit](https://github.com/AppImage/AppImageKit/wiki/Creating-AppImages)**
>
> Package desktop applications as AppImages that run on common Linux-based operating systems, such as RHEL, CentOS, openSUSE, SLED, Ubuntu, Fedora, debian and derivatives. Join #AppImage on irc.freen...

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 3, 2017, 6:12pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/3 "2017-03-03T18:12:11Z")

</div>

I wanna make manually for example :

```
MyApp/usr
MyApp/usr/bin/app.x32
MyApp/usr/bin/app.x64
MyApp/usr/share/applications
MyApp/usr/share/icons
MyApp/usr/share/pixmaps
MyApp/usr/share/doc
MyApp/usr/share/man
MyApp/usr/lib32
MyApp/usr/lib64

```

and include binaries for 32 Bits and 64 Bits. if possible use an script to launch it

But i have a dunno. if i need the portable extract some files inside **"$HOME/.config/**" its possible to make it, and use the script for check if the file exist, if the files exist “do nothing” but if not exist. extract the files i need for the configuration of App, i can make that for the launcher-script the part of check files

From my scripts , i just need the “architecture” part :

```
# Get the Kernel Name
Kernel=$(uname -s)
case "$Kernel" in
    Linux) Kernel="linux" ;;
    Darwin) Kernel="mac" ;;
    FreeBSD) Kernel="freebsd" ;;
* ) echo "Your Operating System -> ITS NOT SUPPORTED" ;;
esac

echo
echo "Operating System Kernel : $Kernel"
echo

# Get the machine Architecture
Architecture=$(uname -m)
case "$Architecture" in
    x86) Architecture="x86" ;;
    ia64) Architecture="ia64" ;;
    i?86) Architecture="x86" ;;
    amd64) Architecture="amd64" ;;
    x86_64) Architecture="x86_64" ;;
    sparc64) Architecture="sparc64" ;;
* ) echo "Your Architecture '$Architecture' -> ITS NOT SUPPORTED." ;;
esac

echo
echo "Operating System Architecture : $Architecture"
echo

```

Yesterday i try to use :

```
$ ./AppDirAssistant\ 0.3.1 
Traceback (most recent call last):
  File "./bin//appimager", line 15, in <module>
    import sys, os, gtk, shutil, time, datetime
  File "/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/ __init__.py", line 30, in <module>
    import gobject as _gobject
  File "/usr/lib64/python2.7/site-packages/gobject/ __init__.py", line 26, in <module>
    from glib import spawn_async, idle_add, timeout_add, timeout_add_seconds, \
  File "/usr/lib64/python2.7/site-packages/glib/ __init__.py", line 22, in <module>
    from glib._glib import *
ImportError: /usr/lib64/python2.7/site-packages/glib/_glib.so: undefined symbol: PyUnicodeUCS2_DecodeUTF8

$ ./AppImageAssistant\ 0.9 
Traceback (most recent call last):
  File "/tmp/.mount_EYpPMb/AppImageAssistant", line 36, in <module>
    import os, sys, gtk, vte
  File "/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/ __init__.py", line 30, in <module>
    import gobject as _gobject
  File "/usr/lib64/python2.7/site-packages/gobject/ __init__.py", line 26, in <module>
    from glib import spawn_async, idle_add, timeout_add, timeout_add_seconds, \
  File "/usr/lib64/python2.7/site-packages/glib/ __init__.py", line 22, in <module>
    from glib._glib import *
ImportError: /usr/lib64/python2.7/site-packages/glib/_glib.so: undefined symbol: PyUnicodeUCS2_DecodeUTF8

```

This not work under Slackware64 14.2 :’(  
I prefer and need a manually method, to understand i should do  
and the method, works on every distribution without exceptions.

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 3, 2017, 6:17pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/4 "2017-03-03T18:17:37Z")

</div>

Please don’t use AppImageAssistant. It is outdated. Use `appimagetool` instead.

You also need

```auto
MyApp/AppRun
MyApp/myapp.desktop
MyApp/myapp.png

```

The AppRun file should be your main launcher script.

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 3, 2017, 6:29pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/5 "2017-03-03T18:29:40Z")

</div>

Ok, but i download and compile AppImageKit from github .  
i compile it.

i can’t install it, because  
`su -c "make install" root`

dont work, looks like the “makefile” dont have the default prefix paths. for make installation.

and if i enter in the “build” folder and try to use “appimagetool”

```
$ ./appimagetool
WARNING: appstreamcli is missing, please install it if you want to use AppStream metadata
SOURCE is missing

```

in the build folder, dont exist file called " **appstreamcli**"  
How i “install” this software if the makefile, dont have installation, and appstreamcli is not compile by default ???

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 3, 2017, 6:52pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/6 "2017-03-03T18:52:30Z")

</div>

Why don’t you use the AppImage of appimagetool?  
[https://github.com/probonopd/AppImageKit/releases/download/continuous/appimagetool-x86\_64.AppImage](https://github.com/probonopd/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage)

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 3, 2017, 6:55pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/7 "2017-03-03T18:55:12Z")

</div>

Because i dont find it, yesterday. but let my try it 😃

```
./appimagetool-x86_64.AppImage 
WARNING: appstreamcli is missing, please install it if you want to use AppStream metadata
SOURCE is missing

```

Its the same thing ☹

This is just for Terminal, or have a GUI / Front-End ???

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 3, 2017, 9:33pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/8 "2017-03-03T21:33:44Z")

</div>

You need to supply the `<SOURCE>` argument.

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 3, 2017, 9:39pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/9 "2017-03-03T21:39:07Z")

</div>

Can you give me an example, please ?  
How i do should use it ?

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 4, 2017, 9:10am UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/10 "2017-03-04T09:10:27Z")

</div>

Please send a link to the application you are trying to package, then I can give you step-by-step instructions. If it is a proprietary application, do you have/can you make a demo version.

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 4, 2017, 3:28pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/11 "2017-03-04T15:28:50Z")

</div>

Manual compile of :

> **[nashmuhandes/GZDoom-GPL](https://github.com/nashmuhandes/GZDoom-GPL)**
>
> GZDoom-GPL is a GPL-compliant fork of GZDoom. Contribute to nashmuhandes/GZDoom-GPL development by creating an account on GitHub.

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 5, 2017, 4:05pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/12 "2017-03-05T16:05:52Z")

</div>

Since there is no Travis CI build or other binaries, I tried with `zdoom` instead and it works well for me with the following `zdoom.yml` file.

```auto
app: zdoom
union: true

ingredients:
  dist: precise
  sources:
    - deb http://us.archive.ubuntu.com/ubuntu/ precise main universe multiverse
    - deb http://us.archive.ubuntu.com/ubuntu/ precise-updates main universe multiverse
    - deb http://debian.drdteam.org/ stable multiverse
  script:
    - wget -c https://github.com/freedoom/freedoom/releases/download/v0.11.1/freedoom-0.11.1.zip
    - unzip freedoom-*.zip
script:
  - mv -f opt/zdoom/* usr/bin/
  - mkdir -p usr/share/games/doom
  - mv ../freedoom-*/* usr/share/games/doom/

```

You can use this to generate an AppImage on any deb-based system like this:

```auto
wget "https://github.com/probonopd/AppImages/blob/master/recipes/meta/Recipe"
bash -ex Recipe zdoom.yml

```

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 5, 2017, 5:00pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/13 "2017-03-05T17:00:44Z")

</div>

1 - im use GzDoom, for the OpenGL Support, zDoom don’t have OpenGL support

2 - I don’t use Debian or Derivates ( less Ubuntu because is very buggy and glitchy on my pc its impossible to use it )

3 - The Apps i wanna try to make it portable, are manual compile, like :

GitHub -\> Gens2 ( Sega Emulator )  
GitHub -\> GzDoom-GPL ( GzDoom Fork, becase Gloome is dead )  
Codeplex -\> Pcsxr Stable  
Git -\> Pcsx  
GoogleCode -\> Snes9x-gtk (version ; 1.51-78)

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 16, 2017, 9:48am UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/14 "2017-03-16T09:48:31Z")

</div>

You don’t have to use Debian, or its derivatives to run AppImages. But the infrastructure I use to put them together is using Debian and Ubuntu so far (e.g., the example given above). There is nothing preventing you from creating AppImage using other systems though, e.g., the Subsurface AppImage is put together on CentOS 6.

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 16, 2017, 2:55pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/15 "2017-03-16T14:55:44Z")

</div>

Can you give me an example without use a packages files in : deb, rpm, tgz, txz, flatpak, snap.

Just using the binary files, please ?

i am not using others systems, i not using Mac OS X or Microsoft Windows, i am using GNU/Linux, my idea for use AppImage, is for made more ease usage of application under any GNU/Linux distributions.

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 17, 2017, 1:00am UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/16 "2017-03-17T01:00:41Z")

</div>

Where do I get the binary files from? Compile myself?

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 17, 2017, 1:17pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/17 "2017-03-17T13:17:15Z")

</div>

Yes, or if you want i can send you a version compile by me under  
Slackware64 14.2.

Or well, you can use a precompiled binary of some Linux App. i just need an example how i make an AppImage file using Binary and libs for solve dependency.

for example for solve dependency i can use something like

```
#!/bin/bash
Kernel=$(uname -s)
case "$Kernel" in
    Linux) Kernel="linux" ;;
    Darwin) Kernel="mac" ;;
    KFreeBSD)	Kernel="freebsd" ;;
* ) echo	"Your Operating System -> IT'S NOT SUPPORTED"	;;
esac

Architecture=$(uname -m)
case "$Architecture" in
    x86)	Architecture="x32" ;;
    i?86)	Architecture="x32" ;;
    amd64)	Architecture="x64" ;;
    x86_64)	Architecture="x64" ;;
* ) echo	"Your Architecture '$Architecture' -> IT'S NOT SUPPORTED."	;;
esac

export LD_LIBRARY_PATH="$PWD/.libs_$Architecture/$Kernel"

```

On the launch script

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 17, 2017, 4:50pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/18 "2017-03-17T16:50:09Z")

</div>

Can you provide debs for Ubuntu 14.04 (trusty) in a ppa or repository? Then it would be easy for me to make an AppImage, and give you a script so that you can do it yourself.

---

<div class="post-metadata">

**Author:** ![inukaze](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/inukaze/32/47_2.png) [@inukaze](https://discourse.appimage.org/u/inukaze)\
**Post date:** [March 18, 2017, 3:05pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/19 "2017-03-18T15:05:38Z")

</div>

No, because i dont use Ubuntu, for the reasons i say before  
1 - Is very unstable  
2 - is very Glitchy  
3 - Is very buggy  
4 - Is extremly slowpoke (On my machine 45 mins to reach Lxde Desktop)

Why someone wanna a software make it from that ???  
It not possible to use Binary files directly for make AppImage File ???

---

<div class="post-metadata">

**Author:** ![probono](https://yyz1.discourse-cdn.com/flex027/user_avatar/discourse.appimage.org/probono/32/81_2.png) [@probono](https://discourse.appimage.org/u/probono)\
**Post date:** [March 18, 2017, 5:37pm UTC](https://discourse.appimage.org/t/how-to-create-an-appimage/155/20 "2017-03-18T17:37:54Z")

</div>

it is possible, but it is more work - see how the Krita and Subsurface AppImages are built on CentOS 6 for example.

Can you build your software on [Travis CI](https://travis-ci.org/)?

[Next page](https://discourse.appimage.org/t/how-to-create-an-appimage/155.md?page=2)
