Slide 1

Slide 1 text

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

Slide 8

Slide 8 text

APPIMAGE SPEC https://github.com/AppImage/AppImageSpec

Slide 9

Slide 9 text

MAKING APPIMAGES

Slide 10

Slide 10 text

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 appimagetool­x86_64.AppImage ./appimagetool­x86_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.17­2_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 ./Leafpad­x86_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/

Slide 16

Slide 16 text

LINUXDEPLOYQT wget ­c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/ linuxdeployqt­continuous­x86_64.AppImage" chmod a+x linuxdeployqt*.AppImage unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop ­bundle­non­qt­libs ./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop ­appimage

Slide 17

Slide 17 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

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

Slide 24

Slide 24 text

appimage.org #AppImage build.opensuse.org #opensuse-buildservice

Slide 25

Slide 25 text

BACKUP

Slide 26

Slide 26 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 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!“