WORKSHOP
openSUSE Conference
May 27, 2017
Simon Peter
AppImage
Adrian Schröter
Open Build Service
Your desktop application as a cross-distribution
AppImage
Slide 2
Slide 2 text
TO RECAP
Slide 3
Slide 3 text
"As a developer, I want to reach
users with minimal effort"
Slide 4
Slide 4 text
.exe .dmg .AppImage
Slide 5
Slide 5 text
EXECUTABLE
EXECUTABLE
SQUASHFS IMAGE
SQUASHFS IMAGE
AppImage
• One file per app
and version
Slide 6
Slide 6 text
EXECUTABLE
EXECUTABLE
SQUASHFS IMAGE
SQUASHFS IMAGE
AppImage
• Binary
• Mounts the image
with FUSE when
executed
Slide 7
Slide 7 text
EXECUTABLE
EXECUTABLE
SQUASHFS IMAGE
SQUASHFS IMAGE
AppImage • Bundle app and
everything that is not
part of all target
systems: icons, i18n,
Qt 5, KF5,…
• Built on host that as
old as the oldest target
systems
APPIMAGETOOL
Turns an AppDir into an AppImage
Get it from
https://github.com/probonopd/AppImageKit/releases
Usage in a nutshell, assuming that you already have an
AppDir in place:
chmod a+x appimagetoolx86_64.AppImage
./appimagetoolx86_64.AppImage some.AppDir
Slide 11
Slide 11 text
mkdir p leafpad/leafpad.AppDir && cd leafpad
# Get existing binary
wget c „http://.../leafpad_0.8.172_amd64.deb“
# Turn into an AppDir
cd leafpad.AppDir
dpkg x ../leafpad_*.deb .
cp ./usr/share/icons/hicolor/scalable/apps/leafpad.svg .
cp ./usr/share/applications/leafpad.desktop .
wget c https://.../AppRun
chmod a+x AppRun
cd ..
# Package as an AppImage
wget c https://.../appimagetool.AppImage
chmod a+x appimagetool.AppImage
./appimagetool.AppImageleafpad.AppDir/
HELLO WORLD,…
Slide 12
Slide 12 text
…MORE LIKE THIS
# Build on an „old enough“ build system
(for which recent compilers and build tools exist, e.g., CentOS 6.x)
# Make sure it is relocatable (no hardcoded „/usr“); otherwise patch it
# Turn into an AppDir
...
chmod a+x AppRun
# Bundle any libraries that might not be there in a recent enough version
# on each target system
# Package the AppDir as an AppImage
...
./appimagetool.AppImage leafpad.AppDir ./Leafpadx86_64.AppImage
# Test on each target system really! (I use Live ISOs)
Slide 13
Slide 13 text
live demo:
Download and extract
AppImage, re-generate
AppImage
Slide 14
Slide 14 text
LINUXDEPLOYQT
Turns a usr/ filesystem tree into an AppDir, and the AppDir
in into an AppImage (using appimagetool)
Originally focused on Qt desktop applications but can also
be used for non-Qt applications
Get it from
github.com/probonopd/linuxdeployqt/releases/
Recommended to run on Travis CI or OBS
Slide 15
Slide 15 text
Making appdir/usr/… tree
Using qmake:
qmake PREFIX=/usr
make j4
make INSTALL_ROOT=appdir install ; find appdir/
Using CMake:
cmake . DCMAKE_INSTALL_PREFIX=/usr
make j4
make DESTDIR=appdir install ; find appdir/
Using autotools:
./configure prefix=/usr
make j4
make install DESTDIR=$(readlink f appdir)
find appdir/
CONTINUOUS APPIMAGE WORKFLOW
2
Push
commit to
GitHub
1
Prepare
build sys-
tem, e.g.,
CentOS 6
with Qt5,…
3
Build and
package
as an
AppImage
4
Upload to,
e.g., Bintray,
GitHub
Releases
5
Post
download
link on
Project
homepage
Slide 18
Slide 18 text
LIVE DEMO
Slide 19
Slide 19 text
OBS AppImage
Slide 20
Slide 20 text
OBS: trusted, reliable, auditable build system
that tracks security updates of dependencies,
ensures licensing compliance, and hosts build
products
An ideal match!
OBS APPIMAGE
Slide 21
Slide 21 text
Let‘s walk through
https://github.com/probonopd/AppImageKit/
wiki/Using-Open-Build-Service
OBS APPIMAGE
Slide 22
Slide 22 text
live demo of the
QtQuickApp on OBS „hello
world“
Slide 23
Slide 23 text
Your turn now…
Can we get it to work with your app?
https://github.com/probonopd/AppImageKit/
wiki/Using-Open-Build-Service
OBS APPIMAGE
Works for all common Linux distributions
Run the latest applications on mature (e.g.,
enterprise) OSes
One app = one file
Super simple for users: just download one
AppImage file, make it executable, and run
No unpacking or installation necessary
SOLVES...
Slide 27
Slide 27 text
No root needed
No system libraries changed
Works out of the box, no installation of runtimes
needed
Works on Live ISOs, university lab computers,...
Can use the same AppImages when dual-booting
multiple distributions
SOLVES...
Slide 28
Slide 28 text
„This is just very cool.“
https://plus.google.com/+LinusTorvalds/posts/WyrATKUnmrS
Slide 29
Slide 29 text
Krita
OFFICIAL APPIMAGES
Microsoft
PowerShell
KDevelop
Scribus
OpenShot
digiKam
JetBrains
Toolbox
MuseScore
Kdenlive
Subsurface
ImagePlay
Drawpile
...hundreds more
Avidemux
Slide 30
Slide 30 text
BUT...
FOSDEM 2017
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
MORE
• Binary delta updates
using AppImageUpdate – only download what has
changed
• Sandboxing
using, e.g., Firejail
• Optional appimaged daemon
for desktop integration (menus, icons, MIME types,
updates,...)
Slide 33
Slide 33 text
"As a tester, I want to run
multiple builds without
messing up my system.“
Slide 34
Slide 34 text
"As a user, I want to
download an application
from the original author
and run it, now!“