OBS AppImage
openSUSE Conference
May 27, 2017
Simon Peter
AppImage
Adrian Schröter
Open Build Service
Portable cross-distro application bundles
for the Linux desktop
Slide 2
Slide 2 text
THE PROBLEM
Slide 3
Slide 3 text
"As a developer, I want to reach
users with minimal effort"
Slide 4
Slide 4 text
.exe .dmg ?
Slide 5
Slide 5 text
Approach #1
OBS
Slide 6
Slide 6 text
„Let‘s take the distribution
approach and scale it“
Slide 7
Slide 7 text
A system to build distributions in a
controlled way
Allow application authors to package
applications for all major distributions
CENTRAL IDEA
Slide 8
Slide 8 text
Source
(from User)
Base Binaries
(from OBS)
OBS checks
sources and
binares. And may
build the source.
Published Binaries
Slide 9
Slide 9 text
Authors can get newer applications to mature distributions
Application authors can leverage already-packaged
dependencies
Optimized for base distribution
Optional submission to become part of official distribution
SOLVES...
Slide 10
Slide 10 text
Still cannot link to a file for Linux
Still needs to understand RPM spec files, debian packaging
Still need to install applications before using them
Still need a package manager, mess around with repositories
Still need root rights to install
BUT...
Slide 11
Slide 11 text
Approach #2
AppImage
Slide 12
Slide 12 text
„Let‘s take the un-distro
approch, like Windows and
macOS“
Slide 13
Slide 13 text
.exe .dmg .AppImage
Slide 14
Slide 14 text
Distribution = base system
Applications directly from original
authors (upstreams)
Like Windows and macOS
CENTRAL IDEA
Slide 15
Slide 15 text
DEMO
Slide 16
Slide 16 text
EXECUTABLE
EXECUTABLE
SQUASHFS IMAGE
SQUASHFS IMAGE
AppImage
• One file per app
and version
Slide 17
Slide 17 text
EXECUTABLE
EXECUTABLE
SQUASHFS IMAGE
SQUASHFS IMAGE
AppImage
• Binary
• Mounts the image
with FUSE when
executed
Slide 18
Slide 18 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
Slide 19
Slide 19 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 20
Slide 20 text
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 21
Slide 21 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 22
Slide 22 text
„This is just very cool.“
https://plus.google.com/+LinusTorvalds/posts/WyrATKUnmrS
Slide 23
Slide 23 text
Krita
OFFICIAL APPIMAGES
Microsoft
PowerShell
KDevelop
Scribus
OpenShot
digiKam
JetBrains
Toolbox
MuseScore
Kdenlive
Subsurface
ImagePlay
Drawpile
...hundreds more
Avidemux
https://github.com/probonopd/AppImageKit/wiki/AppImages
Slide 24
Slide 24 text
BUT...
FOSDEM 2017
Slide 25
Slide 25 text
Author needs a trusted, reliable, auditable build system
Author needs to track security updates of dependencies
Author needs to ensure licensing compliance
BUT...
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
BETTER
TOGETHER
Slide 28
Slide 28 text
OBS AppImage
Slide 29
Slide 29 text
OBS: trusted, reliable, auditable build system
that tracks security updates of dependencies, ensures
licensing compliance, and hosts build products
AppImage: simple bundle format that allows upstream
application authors to reach Linux users easily
An ideal match!
OBS APPIMAGE
Slide 30
Slide 30 text
DEMO
Slide 31
Slide 31 text
Packaging workshop this afternoon:
let‘s take your application
and package it as an AppImage on OBS
Not signed up? Don‘t worry:
„Hello world“ at https://build.opensuse.org/package/show/home:probono/QtQuickApp
Instructions on https://github.com/probonopd/AppImageKit/wiki/Using-Open-Build-Service
OBS APPIMAGE
"As a tester, I want to run
multiple builds without
messing up my system.“
Slide 35
Slide 35 text
"As a user, I want to
download an application
from the original author
and run it, now!“
Slide 36
Slide 36 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 ppimagetool.AppImage
./appimagetool.AppImageleafpad.AppDir/
HELLO WORLD,…
Slide 37
Slide 37 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 38
Slide 38 text
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