Ubuntu 20.04 : passage de Snap à Flatpak

Ubuntu propose les paquets Snap, qui est une solution propriétaire, alors que l’équivalent open-source est Flatpak. L’idée de ces deux projets est de simplifier la distribution des applications (dépendances, virtualisation), c’est louable.

Par contre, les deux technologies étant très proches, le fait que Canonical ait choisi de développer sa propre solution paraît tout de même aller à l’encontre du bon sens, même si elle y a sans doute un intérêt économique pour ses entités ‘Server’ et ‘IoT’.

L’inconvénient de ces packages est qu’ils sont gourmands en ressources, puisqu’ils embarquent toutes leurs dépendances. Comme les machines sont souvent surdimensionnées par rapport à ce que l’on en fait, cela passe inaperçu. L’ancien système apt/deb (sous Debian/Ubuntu) reste quand même le plus efficace, mais implique un certain retard dans la disponibilité des applications, car plus complexe à gérer.

J’avais déjà pensé à supprimer le système des snaps sur mon Ubuntu 20.04, sans franchir le pas avec l’idée de garder un système « standard » et « propre ». Mais à l’usage, le catalogue Flatpak apparaît être plus vaste que celui de Snap, ce qui est somme toute logique (open source vs proprietary software).

Une application m’a fait basculer : il s’agit du client Nextcloud, une application tout de même assez standard, et largement utilisée. La version disponible sur Ubuntu est la 2.6 (qui plantait régulièrement). Et pas de package Snap de fourni, il faut se tourner vers un PPA pour avoir la version 3. Par contre un package Flatpak à jour était disponible : cela a achevé de me décider à faire la bascule.

Tant qu’à n’en garder qu’un, autant garder le meilleur… Et donc bye-bye Snap, welcome Flatpak.

Snaps, Flatpak et les autres

Après avoir lu quelques pages sur le sujet (notamment celle-là sur linux-fr), les discussions vont bon train sur les différents systèmes disponibles : deb et rpm (les « historiques »), et les Snap, Flatpak, ou AppImage (qui intègrent tout l’environnement nécessaire)… et encore d’autres comme pip ou nix ! Aucun n’est parfait, et l’une des problématiques principales qui revient le plus est la confiance : ces packages contenant tout ce qu’il faut pour tourner, que contiennent-ils vraiment ? d’où viennent-ils et qui les a fait ?

Un sondage montre que la bonne vieille méthode est quand même la préférée :

75 votes seulement, à prendre avec précautions !

Voir cette page pour une comparaison entre Snaps, Flatpak et AppImage d’où ce sondage est extrait.

En ce qui me concerne, l’intégration au système est aussi primordiale : je garde en tête l’application Puddletag (éditeur de fichiers audio) qui avait disparu d’Ubuntu 20.04, et que j’ai installé au format AppImage dans un premier temps (voir cet article). Je n’avais plus la possibilité de le lancer avec un click droit sur un fichier audio… pas d’intégration au shell, et donc très embêtant.

Suppression des Snaps

Parmi les inconvénients de Snap pour un utilisateur lambda, le plus évident est le temps de chargement de Gnome Software, le magasin d’application. Il a été modifié par Ubuntu pour inclure les packages Snap, et se synchronise à chaque démarrage, ce qui prend du temps et se révèle assez désagréable à l’usage.

Pour supprimer l’ensemble du système Snap, j’ai suivi deux tutos, celui-ci et celui-là (ils se complètent).

On commence par afficher tous les snaps installés sur son système :

$ snap list
Nom                  Version                     Révision  Suivi            Éditeur       Notes
bpytop               1.0.50                      186       latest/stable    kz6fittycent  -
canonical-livepatch  9.5.5                       95        latest/stable    canonical✓    -
chromium             87.0.4280.88                1421      latest/stable    canonical✓    -
core                 16-2.48                     10444     latest/stable    canonical✓    core
core18               20200929                    1932      latest/stable    canonical✓    base
core20               20                          634       latest/stable    canonical✓    base
discord              0.0.13                      119       latest/stable    snapcrafters  -
gnome-3-28-1804      3.28.0-19-g98f9e67.98f9e67  145       latest/stable    canonical✓    -
gnome-3-34-1804      0+git.3556cb3               60        latest/stable/…  canonical✓    -
gtk-common-themes    0.1-50-gf7627e4             1514      latest/stable/…  canonical✓    -
shotcut              20.11.28                    123       latest/stable    meltytech✓    classic
signal-desktop       1.38.2                      339       latest/stable    snapcrafters  -
snap-store           3.38.0-55-geb45541          498       latest/stable/…  canonical✓    -
snapd                2.48.1                      10492     latest/stable    canonical✓    snapd

Et on commence par supprimer toutes les applications :

$ sudo snap remove bpytop
sudo snap remove discord
sudo snap remove shotcut
sudo snap remove signal-desktop
sudo snap remove chromium

Ensuite on désinstalle le reste en respectant l’ordre (pas sûr que cela soit vraiment important) :

$ sudo apt remove canonicval-livepatch
sudo snap remove snap-store
sudo snap remove gtk-common-themes
sudo snap remove gnome-3-28-1804
sudo snap remove gnome-3-34-1804
sudo snap remove core18
sudo snap remove core20
sudo snap remove snapd

Pour supprimer le package « core », j’avais un message d’erreur, il a fallu le démonter auparavant :

$ sudo umount /snap/core/10444
sudo snap remove core

Puis on procède au nettoyage, sans oublier le plugin de l’outil graphique d’installation de logiciels :

$ sudo apt autoremove --purge snapd gnome-software-plugin-snap
rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd

Sans oublier de mettre le package en HOLD afin d’éviter une réinstallation au cours d’une mise à jour, on ne sait jamais :

$ sudo apt-mark hold snapd

À ce stade, j’ai quand même redémarré pour vérifier que tout se passait bien : ce fut le cas.

Ajout de Flatpak

Pour installer Flatpak, j’ai suivi ce tuto. On installe d’abord flatpak comme un programme, ainsi que le plugin pour l’interface graphique (gnome-software):

$ sudo apt install flatpak
sudo apt install gnome-software-plugin-flatpak

Puis on installe le Flathub repository, le magasin d’applications le plus complet :

$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Voilà, il ne reste plus qu’à réinstaller les applications que j’avais déjà, plus Nextcloud client bien entendu ! On peut utiliser l’interface graphique de Gnome Software, ou chercher et installer en ligne de commande :

$ flatpak search nextcloud
Name       Description                  Application ID    Version Branch Remotes
Nextcloud… Nextcloud desktop synchroni… com.nextcloud     3.0.2   stable flathub
QOwnNotes  Plain-text file notepad wit… …nnotes.QOwnNotes 20.9.11 stable flathub
Kontact    Gère vos courriels, calendr… org.kde.kontact   19.04.1 stable flathub
OpenTodoL… Todo list and note taking a… …dev.OpenTodoList 3.28.0  stable flathub
[~]

Que l’on installe ensuite par son nom ou son « Application ID » :

$ flatpak install com.nextcloud

System ou user

Comme la documentation l’indique, on peut installer les applications « system wide », c’est le défaut et elles seront disponibles à tous les utilisateurs du système ; ou « per-user », et dans ce cas elles ne seront disponibles que pour l’utilisateur qui les a installées.

Cela peut conduire à des erreurs, comme cela m’est arrivé pour Gourmand, mon application de recettes de cuisine. En effet, la doc indiquait la commande suivante pour installer le Flathub repository :

$ flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo

Notez le paramètre « –user » qui a été ajouté (il s’agit d’une erreur). Dans ce cas, le dépôt n’est donc accessible que pour l’utilisateur. On peut le vérifier avec cette commande :

$ flatpak remote-list
Name    Options
flathub user

Or Gourmand ne s’installant qu’en mode system, cela provoquait des messages d’erreur lors de la recherche de dépendances, comme le runtime org.Gnome.Platform.

$ sudo flatpak install gourmand-1.0.0.flatpak
error: The application io.github.GourmandRecipeManager.Gourmand/x86_64/master requires the runtime org.gnome.Platform/x86_64/40 which was not found

Il est donc important de s’assurer en cas d’erreur de ce type que l’on travaille bien dans le même environnement, et dans ce cas les dépendances seront trouvées et installées automatiquement. Note : j’ai d’abord supprimé le dépôt avec la commande flatpak remote-delete --user flathub, puis réinstallé en enlevant le paramètre –user de la commande (qui se retrouve donc en « system », puisque c’est le défaut) :

$ flatpak remote-list
Name    Options
flathub system
$ sudo flatpak install gourmand-1.0.0.flatpak
Required runtime for io.github.GourmandRecipeManager.Gourmand/x86_64/master (runtime/org.gnome.Platform/x86_64/40) found in remote flathub
Do you want to install it? [Y/n]: Y
... etc...

On peut ensuite vérifier que les packages ont bien été installés « system-wide » avec la commande suivante (voir la dernière colonne « Installation ») :

$ flatpak list
Name                             Application ID                        Version Branch Origin           Installation
Gourmand                         \u2026ithub.GourmandRecipeManager.Gourmand         master gourmand4-origin system
Mesa                             org.freedesktop.Platform.GL.default   21.1.8  20.08  flathub          system
openh264                         org.freedesktop.Platform.openh264     2.1.0   2.0    flathub          system
GNOME Application Platform v...  org.gnome.Platform                            40     flathub          system
Yaru Gtk Theme                   org.gtk.Gtk3theme.Yaru                        3.22   flathub          system

Quelques commandes flatpak

On peut donc lister les applications flatpak installées :

$ flatpak list --app
Name                                 Application ID                               Version        Branch       Installation
Nextcloud desktop sync client        com.nextcloud.desktopclient.nextcloud        3.0.2          stable       system
Shotcut                              org.shotcut.Shotcut                          20.11.28       stable       system
Signal Desktop                       org.signal.Signal                            1.38.2         stable       system

Ou pour tout avoir taper simplement :

$ flatpak list

Pour obtenir des infos sur une application :

$ flatpak info com.nextcloud.desktopclient.nextcloud

Nextcloud desktop sync client - Nextcloud desktop synchronization client

          ID: com.nextcloud.desktopclient.nextcloud
         Ref: app/com.nextcloud.desktopclient.nextcloud/x86_64/stable
        Arch: x86_64
      Branch: stable
     Version: 3.2.0
     License: GPL-2.0+
      Origin: flathub
  Collection: org.flathub.Stable
Installation: system
   Installed: 165,4 MB
     Runtime: org.kde.Platform/x86_64/5.15
         Sdk: org.kde.Sdk/x86_64/5.15

      Commit: d0c12edc7730942ced6eb43727f6203273d30c161fe97ac4042e6706b9d516ff
      Parent: 76893524b0799423d203de19dceded7f775dde519d04869b084b6902e0c4eefb
     Subject: Update desktop.git to 3.2.0 (b07a228e)
        Date: 2021-04-13 10:39:01 +0000

Pour lancer l’application en mode commande (utile pour obtenir des messages d’erreur) :

$ flatpak run com.nextcloud.desktopclient.nextcloud

Pour retirer ce qui n’est plus utilisé :

$ flatpak uninstall --unused

Pour réparer des inconsistances avec l’installation locale :

$ flatpak repair

Pour remettre à zéro les permissions sur le portail d’une application :

$ flatpak permission-reset com.nextcloud.desktopclient.nextcloud

Enfin pour afficher l’historique des changements apportés à flatpak (voir les logs en fait) :

$ flatpak history

pip pour bpytop

Un autre système pour installer les applications mentionné plus haut est pip. D’une extrême simplicité, il a le problème du manque de contrôle. J’ai du l’utiliser pour bpytop (un top amélioré, sous python), car il n’y avait pas de flatpak disponible. J’ai donc procédé comme indiqué sur la page Github du logiciel (en lui faisant confiance) :

$ sudo apt install python3-pip
pip3 install bpytop --upgrade

NOTE : Depuis, j’ai désinstallé pip et bpytop et utilise glances pour monitorer le système, outil très complet et faisant partie des dépôts standards.

Place disque

Quelques mois plus tard, je me suis retrouvé avec des problèmes d’espace disque sur ma partition système… Le coupable était le dossier /var/lib/flatpak qui occupait 8Go (4Go pour un dossier « repo »).

Pour faire un peu de ménage, il suffit de taper la commande suivante :

$ flatpak uninstall --unused

J’ai ainsi gagné environ 4Go, soit la moitié de l’espace occupé, ce qui n’est pas négligeable.

Une autre solution est d’utiliser l’option --user lors de l’installation de packages : l’installation se fera alors dans ~/.local/share/flatpak (dans le cas où /home est sur une autre partition bien sûr, et avec la conséquence que seul l’utilisateur pourra utiliser l’application). Ne pas oublier de taper la commande suivante auparavant pour installer le magasin d’applications dans ce nouvel emplacement :

$ flatpak --user remote-add flathub https://flathub.org/repo/flathub.flatpakrepo

Il est aussi possible de définir un autre espace de stockage appelé « custom installation » comme décrit ici. Malheureusement sur Ubuntu, on perd alors les icônes d’applications et l’intégration au lanceur de Gnome. 🙁

J’ai aussi testé de faire pointer /var/lib/flatpak vers un autre disque avec l’aide d’un lien (sudo ln -s /MonDisque/flatpak /var/lib/flatpak), mais cela n’a pas l’air de fonctionner très bien, et l’on perd aussi l’intégration dans Gnome (icône, lanceur).

Voilà, je n’ai pas trouvé mieux pour l’instant !

Conclusion

Voilà, tout a l’air de fonctionner correctement, et je n’ai plus de snaps sur le système. À voir comment cela se passerait à la prochaine mise à jour, si je décidais d’installer le 20.10 par exemple…

Mais à moins d’une nouvelle fonctionnalité particulièrement intéressante (ce qui se fait rare, le système étant tout de même très complet et mature), je pense attendre la prochaine LTS, à savoir la 22.04, et faire dans ce cas une installation plutôt qu’une mise à jour. Et supprimer à nouveau les snaps si je suis satisfait de cette nouvelle situation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *