snap ist eine Software von Canonical, die dazu dient, Pakete zu installieren. Die per snap installierten Pakete bringen ihre eigene Laufzeitumgebung mit und sind damit unabhängig vom Stand des restlichen Systems.

snap ist daher vergleichbar mit flatpak oder appImage.

Canonical hat sicherlich gute Gründe, ein solches Paket anzubieten. Generell gibt es gute Gründe, die Kontrolle und Verantwortung bei der Verteilung von Software mehr in Richtung der Entwickler zu verlagern.

Wo ist das Problem?

Die Art und Weise, wie Canonical ihr snappy in das "normale", apt basierte, Softwaremanagement integriert, ist undurchsichtig und verwirrend. Man weiß nie genau, ob man sich Software direkt aus dem Ubuntu Repository installiert, oder ob man ein snap Paket herunterlädt.

Auch ist in der Praxis der Umgang mit snap Paketen recht schwierig, vor allem, wenn man etwas mehr damit machen will, als sie einfach zu starten.

Wo welche Konfigurationsdateien für snap Programme abgelegt sind, muss man erforschen. Hat man sie gefunden, ist es aber noch nicht gesagt, dass man sie auch ändern kann, weil die Sandbox des Programms evtl. read-only ist.

Es kann auch passieren, dass symbolische Links nicht aufgelöst werden, so dass man plötzlich einen "Datei nicht gefunden" Fehler bekommt, obwohl man die Datei direkt vor der Nase hat.

Man kann mit snap Paketen also die eine oder andere Überraschungen erleben. Überraschungen, die man eigentlich nie - in dem Moment, in dem sie auftreten, aber überhaupt rein gar nicht - gebrauchen kann.

Wer eine Ubuntu Distribution nutzen, aber keine Überraschungen dieser Art erleben will, muss snap entfernen.

snap entfernen

Die einzelnen Schritte, um snap zu entfernen.

Die Durchführung besteht aus mehreren Schritten.

  1. Die schon installierten snap Pakete entfernen. Dazu braucht man snap.
  2. snap Dämon entfernt.
  3. Verhindern, das snap wiederkommt.

Pakete entfernen.

Als erstes muss man herausfinden, welche Pakete auf dem System per snap schon installiert sind.

Liste aller Snap-Programme anzeigen

snap list

Die Liste ist natürlich je nach System unterschiedlich.

Beispiel einer Ausgabe von snap list auf einem Ubuntu 23.04 System nach der Installation.


Name                       Version           Rev    Tracking         Publisher   Notes
bare                       1.0               5      latest/stable    canonical✓  base
core18                     20230426          2745   latest/stable    canonical✓  base
core22                     20230503          634    latest/stable    canonical✓  base
firefox                    113.0.1-1         2681   latest/stable/…  mozilla✓    -
gnome-42-2204              0+git.587e965     102    latest/stable/…  canonical✓  -
gtk-common-themes          0.1-81-g442e511   1535   latest/stable/…  canonical✓  -
snap-store                 41.3-71-g709398e  959    latest/stable/…  canonical✓  -
snapd                      2.59.2            19122  latest/stable    canonical✓  snapd
snapd-desktop-integration  0.9               83     latest/stable/…  canonical✓  -
software-boutique          0+git.0fdcecc     57     latest/stable/…  flexiondotorg  classic
ubuntu-mate-welcome        22.04.0-d3d4bb1a  726    latest/stable/…  flexiondotorg  classic

Die Pakete "software-boutique" und "ubuntu-mate-welcome" gab es auf dem frischen Kubuntu 23.04 System nicht. Sie gibt es aber unter Ubuntu-MATE 20.04. Es gibt also unterschiedliche Pakete, je nach Distro und Version.

Jedes der Pakete muss einzeln entfernt werden. Sinnvoll ist es, dabei eine bestimmte Reihenfolge einzuhalten.

Die Pakete snapd, coreXX und bare gehören zu snap selber und sollten zum Schluss gelöscht werden.

Hält man die Reihenfolge nicht ein, ist es allerdings auch nicht wirklich schlimm. Man bekommt dann Fehlermeldungen, die einen wieder auf den richtigen Weg bringen.

Aber:

Zum Entfernen von snap Paketen wird snap benutzt. snapd selber muss daher das letzte Paket sein, das entfernt wird.

Und:

Zum Entfernen von snapd wird "apt" benutzt.

Hier ist die Kommandoabfolge für die oben angezeigten Pakete:

Pakete einzeln entfernen

sudo snap remove --firefox sudo snap remove --purge gnome-42-2204 sudo snap remove --purge gtk-common-themes sudo snap remove --purge snapd-desktop-integration sudo snap remove --purge software-boutique sudo snap remove --purge bare sudo snap remove --purge core22

Hintergrundprozesse entfernen

snapd ist ein Paket, dass über den Paketmanager apt installiert wurde. Es muss auch über apt wieder deinstalliert werden.

snapd deinstallieren

sudo apt remove --purge snapd

Hintergrundprozess stoppen

snap hat - noch zu Lebzeiten - einen Hintergrundprozess mit Namen "snapd" und noch diverse andere Unterprozesse gestartet. An sich sollte das Kommando apt remove snapd auch die Hintergrundprozesse aufräumen, Sollten diese auch nach der De-Installation doch noch laufen, müssen sie gestoppt werden. Solange sie laufen, blockieren sie weitere Aufräumarbeiten.

Hintergrundprozess prüfen

sudo systemctl status snapd

Und zur Sicherheit:

sudo systemctl list-units | grep snap

Wenn da noch was ist, dann sind die folgenden Schritte notwendig.

Hintergrundprozess stoppen

sudo systemctl stop snapd

Hintergrundprozess abschalten

sudo systemctl disable snapd

Hintergrundprozess prüfen

sudo systemctl status snapd

Verzeichnisse entfernen

Nachdem die Hintergrundprozesse beendet wurden, kann die Festplatte aufgeräumt werden.

snap legt überall und nirgends im System Verzeichnisse an.

Mir bekannt sind:

Diese Liste habe ich auf einem Kubuntu 23.04 System zusammengestellt. Auf geht's.

Privates snap Verzeichnis löschen

rm -rf snap

Globales snap Verzeichnis löschen

sudo rm -rf /snap

Variables snap Verzeichnis löschen

sudo rm -rf /var/snap

snapd (Dämon) Verzeichnis löschen

sudo rm -rf /var/lib/snapd

Bitte bei den rm Befehlen prüfen, ob sie auch wirklich erfolgreich waren. Auf manchen Systemen hängt snap eigene Dateisysteme unterhalb der genannten Verzeichnisse ein. Dann können die Verzeichnisse nicht gelöscht werden.

Abschließen

Ganz zum Schluss sollte man das System neu starten. Das hilft auch, wenn man die Verzeichnisse im ersten Durchgang nicht löschen konnte.

Danach prüfen, ob

Wenn hier etwas vorhanden ist, das man vorher gelöscht hat, wurde es nach dem Neustart durch einen wieder gestarteten Hintergrundprozess erneut angelegt. Dann muss man die Prozedur noch einmal sorgfältig durchgehen und suchen, wo was schief gelaufen ist. Sorry.

Zwei mögliche Ursachen:

  1. Die systemd Prozesse noch angeschaltet. (Weil man z.B. vergessen hat, am Ende den snapd per apt zu deinstallieren.). Diese Prozeese legen sich ihre Verzeichnisse beim Hochfahren wieder an.
  2. Die rm -rf XXX Befehle sind nicht alle durchgelaufen, weil das System eigene Dateisysteme für /var/lib/snapd und /snap angelegt und eingebunden hatte.
    Überprüfen kann man das mit mount | grep snap.
    Diese Dateisysteme werden u.U. nicht per fstab, sondern irgendwo über systemd eingebunden.

Hier noch einmal die zentralen Befehle zum Abschalten, nachdem man alle Pakete deinstalliert hat:

  1. sudo apt remove --purge snapd
  2. sudo systemctl disable snapd
  3. sudo reboot
  4. sudo rm -rf /snap /var/lib/snapd

Rückkehr verhindern

Verhindern, dass snap wiederkommt.

Tja. snap ist weg und man hat Ruhe? Ganz so ist es nicht.

Canonical hat sein Repository System - und damit apt - ein wenig modifiziert.

Hat man sein System von snap befreit und versucht, ein Paket mit Namen "irgendwas" zu installieren, das im Repository nur als snap Paket verfügbar ist, so wird snap beim Aufruf von apt install irgendwas klammheimlich wieder installiert.

Wer das nicht will, kann apt so konfigurieren, dass genau das nicht mehr passiert.

Dazu muss man eine sog. "preferences" Richtlinie für apt anlgen. Der Inhalt dieser Richtlinie sieht folgendermaßen aus:

"apt preferences" zur Verhinderung von snap.

# To prevent repository packages from triggering the installation of Snap,
# this file forbids snapd from being installed by APT.
# For more information: https://linuxmint-user-guide.readthedocs.io/en/latest/snap.html

Package: snapd
Pin: release a=*
Pin-Priority: -10

Die Datei muss im Verzeichnis /etc/apt/preferenced.d liegen. Der Name ist an sich egal, sollte aber einen Hinweis darauf enthalten, was das Ding macht, z.B. nosnap.pref

Diese Datei wird unter Linux Mint ausgeliefert. Linux Mint basiert auf dem Ubuntu Repository, will aber nicht auf den snap Zug aufspringen.

Alternativen

Man ist also snap los geworden. Das ist schön. Dumm ist es nur, wenn man die Software, die man gerade weg geworfen hat, an sich braucht. Da Canonical die "normale" Version - also ein .deb Paket - nicht mehr zur Verfügung stellt, muss man sich die Software anderweitig besorgen.

Das ist, je nach Software, ganz einfach bis echt ätzend.

.deb Pakete

Ganz einfach ist es, wenn der Hersteller der Software diese als .deb Paket anbietet.

  1. Herunterladen,
  2. mit apt install XXX.deb oder apt deb XXX.deb installieren
  3. fertig.

Bei dieser Art der Installation wird automatisch eine typische Einbindung in das System erzeugt (Menüeinträge, link nach /usr/bin, etc.).

TODO: ppa und Hersteller-Repositories

Eine Anweisung für Firefox findet sich unter Install Firefox on Linux.

Externes Archiv

Ähnlich einfach ist es, wenn der Hersteller die Software als "tar-ball" oder ZIP Archiv anbietet. Herunterladen, irgendwohin (vorzugsweise nach /opt) entpacken. Danach muss man sich allerdings noch um die Pfad- und Menü-Einträge kümmern. Aber auch das ist keine Hexenwerk.

Ein Problem kann das Aktualisieren der Software sein. Pakete die per apt oder snap installiert worden sind, werden automatisch aktualisiert. Das ist bei per Hand installierten Paketen erst einmal nicht so.

Manche Hersteller, z.B. Mozilla, liefern die Software mit einem eigenen Update-Mechanismus aus. Dann braucht man sich um regelmäßige Updates nicht zu kümmern, die sind auf diesem Weg u.U. schneller da, als über das Repository.

Sonderfall: Chromium

Chromium fällt in die Kategorie "... bis echt ätzend." Google finanziert die Entwicklung von Chromium als Basis für Google Chrome. Man kann sich ohne Probleme Chrome als .deb Paket herunterladen, aber für Chromium existiert diese Möglichkeit nicht (mehr).

Hier ist eine Quelle, die das Chromium Paket aus dem Repository von Linux Mint "klaut":

Eine ander Quelle, das ppa:saiarcot895/chromium-beta, die man im Netz findet, scheint nicht mehr gepflegt zu werden.