Installer facilement des applications sur Linux (bureau/serveur) sans Docker : Flatpak, Snap, Appimage

appimage 11 sept. 2017

Soyez prévenus que cet article n’est pas pour les puristes : j’y ferai de gros raccourcis en comparant des outils non pas sur leurs technologies -bien différentes- mais sur leur finalité.

On parle de plus en plus de virtualisation et de containers sur Linux. Si sur serveurs les Machines Virtuelles (VM) sont de plus en plus remplacées au profit de containers Docker, plus simples à installer/utiliser, sur les PC de bureau (et serveurs, clouds…) on trouve de plus en de Snaps, Flatpaks et Appimages. Contrairement à Docker, ces outils s’installent quasi partout.

Si les technologies sont bien différentes, merci des précisions de Mathieu en commentaire, la finalité est identique : installer une application de manière très simple, peu importe la distribution Linux, et l’isoler -au mieux- de l’OS principal dans une optique de sécurité. Sécurité au 1er degré mais aussi dans le sens “boulette” lors de l’installation ou la désinstallation de l’application.

 

Les distributions Linux ont leurs “appstores”, par exemple AUR pour Archlinux, Launchpad pour Ubuntu etc, et des packages adaptés pour telle ou telle distribution tels que .deb ou .rpm. On peut aussi utiliser des outils comme que debtap sur Archlinux pour convertir des paquets.deb en installateurs pour Arch. Tous ces packages permettent d’installer la dite application avec toutes les dépendances nécessaires à son bon fonctionnement. C’est bien pratique mais ça suppose que le gars qui fait le package pour Archlinux le tienne à jour, par exemple. Sans compter que, si on n’est pas à l’aise sur Linux, dans certains cas l’installation/compilation/désinstallation peut engendré quelques déconvenues (du genre librairies supprimées ou requises mais qui sont en BETA et donc pas dans les sources classiques de sa distribution).

C’est notamment l’un des intérêts de passer par ces solutions de containers : tout est pré-mâché (et testé), c’est à la limite du clic & run façon Windows. Ajoutez à ça que ces outils permettent aussi de ne créer qu’un seul container qui est compatible plusieurs distributions (au lieu de packages ciblés), vous obtenez un produit simple à utiliser, très tendance notamment auprès des néophytes dans le monde Linux.

Si dans ma conception “utiliser Linux” revient à dire “je sais compiler et installer une application” et “je sais installer un serveur et le sécuriser”, je suis aussi comme tout le monde -un peu fainéant ?- et apprécie parfois de gagner du temps en installant simplement divers outils. 

 

  1. Snap
  2. Flatpak
  3. Appimage
  4. Exemple de Flatpak (Transmission sur desktop Archlinux)
  5. Exemple de Snap (Plex sur serveur Debian)

 

 

Snap

Snap, créé par (et sous licence) Canonical (Ubuntu) vient avec toutes les dépendances et l’application est sandboxée (isolée du kernel) via AppArmor. Une des utilités est de pouvoir installer plusieurs version d’une application “snapée”. A contrario ça suppose que l’auteur du Snap, comme pour Docker, tienne à jour toutes les librairies embarquées (point de vue sécurité). Snap présente l’avantage de tourner sur serveur comme desktop (enfin selon l’OS) tout comme sur OpenWRT & Solus. Petit plus, ils proposent un outil pour créer des snaps depuis un dépôt GitHub.

On trouve des snaps sur leur store.

 

Flatpak

Flatpak, 100% open source, fonctionne comme Snap mais avec 2 différences : l’application est sandboxée via BubbleWrap (merci Mathieu d’avoir corrigé mon erreur) et il s’appuie sur des éléments d’une session graphique pour fonctionner, il lui faut un environnement desktop et non serveur. Tout comme pour Snap il existe un outil de création de Flatpaks : Flathub.

Pour des packs : leur site ou encore Flathub voire via GitHub.

 

Appimage

Un container Appimage embarque toutes les libraires nécessaires à son fonctionnement. Il n’est en revanche pas sandboxé comme les 2 premiers mais ça peut s’exécuter via FireJail. Compatible desktop et serveurs. Comme les autres ils ont leur outil d’aide à la création d’images : Openbuildservice.

Images répertoriées sur leur hub.

 

Alors oui, tout comme il existe une multitude de distributions Linux, de packages, de markets, il existe aussi plusieurs solutions de containérisation. J’utilise Flatpak vu le mauvais support d’Archlinux par Snap mais je pense que vu la simplicité d’utilisation de ces outils il faut simplement se focaliser sur “qui propose l’application dont j’ai besoin ?”.

 

Exemple d’utilisation de Flatpak

Les commandes de Flatpak sont simplistes

Usage:
  flatpak [OPTION…] COMMAND

Builtin Commands:
 Manage installed apps and runtimes
  install             Install an application or runtime
  update              Update an installed application or runtime
  uninstall           Uninstall an installed application or runtime
  list                List installed apps and/or runtimes
  info                Show info for installed app or runtime

 Running applications
  run                 Run an application
  override            Override permissions for an application
  make-current        Specify default version to run
  enter               Enter the namespace of a running application

 Manage file access
  document-export     Grant an application access to a specific file
  document-unexport   Revoke access to a specific file
  document-info       Show information about a specific file
  document-list       List exported files

 Manage remote repositories
  remotes             List all configured remotes
  remote-add          Add a new remote repository (by URL)
  remote-modify       Modify properties of a configured remote
  remote-delete       Delete a configured remote
  remote-ls           List contents of a configured remote

 Build applications
  build-init          Initialize a directory for building
  build               Run a build command inside the build dir
  build-finish        Finish a build dir for export
  build-export        Export a build dir to a repository
  build-bundle        Create a bundle file from a build directory
  build-import-bundle Import a bundle file
  build-sign          Sign an application or runtime
  build-update-repo   Update the summary file in a repository
  build-commit-from   Create new commit based on existing ref
  repo                Print information about a repo

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

[collapse]

Si vous êtes comme moi un utilisateur basique alors seules celles-ci sont utiles

Usage:
  flatpak [OPTION…] COMMAND

Builtin Commands:
 Manage installed apps and runtimes
  install             Install an application or runtime
  update              Update an installed application or runtime
  uninstall           Uninstall an installed application or runtime
  list                List installed apps and/or runtimes
  info                Show info for installed app or runtime

 Running applications
  run                 Run an application
  override            Override permissions for an application
  make-current        Specify default version to run
  enter               Enter the namespace of a running application

Il faut commencer par installer Flatpak sur votre OS. Puis trouvez ensuite le pack de l’application que vous cherchée, dans cet exemple le client BitTorrent Transmission. Je télécharge donc leur paquet Flatpak et le lance via :

[aerya@aerya Téléchargements]$ flatpak install com.transmissionbt.Transmission.flatpakref 

A la manière de Docker, ce fichier .flatpakref, dont voici le contenu, n’est pas un installateur mais plus un fichier de configuration pour l’outil Flatpak dans lequel il va trouver quoi télécharger, où et une signature GPG pour vérifier que la source est officielle.

L’installation se déroule simplement : 

[aerya@aerya Téléchargements]$ flatpak install com.transmissionbt.Transmission.flatpakref 
Installing: com.transmissionbt.Transmission/x86_64/stable
Installing: com.transmissionbt.Transmission/x86_64/stable from flathub
[####################] 1 delta parts, 1 loose fetched; 1363 KiB transferred in 1
Installing: com.transmissionbt.Transmission.Locale/x86_64/stable from flathub
[####################] 1 delta parts, 1 loose fetched; 386 KiB transferred in 8 
[aerya@aerya Téléchargements]$ 

Je le vois dans ma liste de Flatpaks installés

[aerya@aerya Téléchargements]$ flatpak list
Ref                                           Options       
com.transmissionbt.Transmission/x86_64/stable system,current
org.gnome.Polari/x86_64/stable                system,current
org.gnome.Platform/x86_64/3.24                system,runtime

Et peux le lancer simplement (faire fie des éventuelles erreurs)

[aerya@aerya Téléchargements]$ flatpak run com.transmissionbt.Transmission/x86_64/stable

 

 

Exemple d’utilisation de Snap

Là encore les commandes sont très simples

Usage:
  snap [OPTIONS] <command>

Install, configure, refresh and remove snap packages. Snaps are
'universal' packages that work across many different Linux systems,
enabling secure distribution of the latest apps and utilities for
cloud, servers, desktops and the internet of things.

This is the CLI for snapd, a background service that takes care of
snaps on the system. Start with 'snap list' to see installed snaps.


Application Options:
      --version  Print the version and exit

Help Options:
  -h, --help     Show this help message

Available commands:
  abort       Abort a pending change
  ack         Adds an assertion to the system
  alias       Enables the given aliases
  aliases     Lists aliases in the system
  buy         Buys a snap
  change      List a change's tasks
  changes     List system changes
  connect     Connects a plug to a slot
  disable     Disables a snap in the system
  disconnect  Disconnects a plug from a slot
  download    Downloads the given snap
  enable      Enables a snap in the system
  find        Finds packages to install
  get         Prints configuration options
  help        Help
  info        show detailed information about a snap
  install     Installs a snap to the system
  interfaces  Lists interfaces in the system
  known       Shows known assertions of the provided type
  list        List installed snaps
  login       Authenticates on snapd and the store
  logout      Log out of the store
  refresh     Refreshes a snap in the system
  remove      Removes a snap from the system
  revert      Reverts the given snap to the previous state
  run         Run the given snap command
  set         Changes configuration options
  try         Tests a snap in the system
  unalias     Disables the given aliases
  version     Help
  watch       Watch a change in progress

[collapse]
 

Ici sur un serveur Debian pour y mettre Plex. Commencer par installer Snap

sudo apt install snapd

Puis on peut installer Plex (ce Snap), avec la commande –classic permettant d’accéder à des dossiers (donc des bibliothèques) en dehors du Snap

[aerya@TestSnap ~]$ sudo snap install menta-plexmediaserver --classic
menta-plexmediaserver 1.8.4.4249 from 'menta' installed

Nous pouvons ensuite voir ce Snap dans la liste des installés :

[aerya@SnapTest ~]$ snap list
Name                   Version     Rev   Developer  Notes
core                   16-2.27.5   2774  canonical  -
menta-plexmediaserver  1.8.4.4249  6     menta      -

Et un serveur Plex tourne localement sur IP:32401

 

Mots clés