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.
- Snap
- Flatpak
- Appimage
- Exemple de Flatpak (Transmission sur desktop Archlinux)
- Exemple de Snap (Plex sur serveur Debian)
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, 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.
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
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
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 :
[[email protected] 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 :
[[email protected] 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 [[email protected] Téléchargements]$
Je le vois dans ma liste de Flatpaks installés
[[email protected] 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)
[[email protected] Téléchargements]$ flatpak run com.transmissionbt.Transmission/x86_64/stable
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
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
[[email protected] ~]$ 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 :
[[email protected] ~]$ 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
> ces outils sont plus légers et s’appuient sur l’OS hôte Non, en tout cas pas pour Flatpak. Une application flatpak ne dépend d’absolument rien sur l’hôte. Une application snap **peut** dépendre de trucs sur l’hôte, mais uniquement si le snap a été construit comme cela. Sinon, le cas « normal » pour les snaps est aussi de ne dépendre de rien… Lire la suite »
Merci de tes précisions, que je vais ajouter à mon article en le corrigeant.
Concernant Flatpak il dépend tout de mêmes de runtimes partagées, non ?

Quant à SELinux navré de mon erreur, j’ai lu trop vite : ce serait mieux mais c’est pas le cas.
https://github.com/flatpak/flatpak/wiki/Sandbox
> Concernant Flatpak il dépend tout de mêmes de runtimes partagées, non ? Oui, mais ces runtimes sont comme les applis : des bundles qui se retrouvent injectés dans la sandbox. Les applications ne peuvent en aucun cas dépendre de bibliothèques installées sur le système hôte. Et c’est pareil pour Snap : un snap d’application peut dépendre d’un autre snap… Lire la suite »