snap Pakete bestehen aus einer einzelnen Datei mit der Dateiendung .snap . Diese Datei ist technisch gesehen ein SquashFS-Dateisystem, in das alle Dateien, die das snap enthält, verpackt sind.
Was in dem snap Paket enthalten ist kann man unter- / durchsuchen. Je nach dem, ob das snap ins System eingehängt ist oder nicht unterscheidet sich der Weg.
Den Inhalt eines snap Pakets, welches ins System eingehängt ist, zu unter- / durchsuchen benötigt keine weiteren Hilfsmittel. Man navigiert einfach zum Einhängepunkt, also /snap . Dann geht man den Ordner des gewünschten snaps, z.B. firefox für das Firefox snap. In diesem Ordner befindet sich immer ein Verzeichnis current , welches immer ein Link auf die aktuelle, installiert, eingehängte Version des snaps ist. Wechselt man in dieses Verzeichnis sieht man alle Dateien und Verzeichnisse, die zum snap gehören. Durch diese Verzeichnisse kann man navigieren, sich Dateien anzeigen lassen usw. Befindet man sich z.B. im Verzeichnis /snap/firefox/current kann man sich im Terminal über
less firefox.desktopdie im snap enthaltene .desktop-Datei anzeigen lassen.
Ein snap Paket muss aber nicht zwingend eingehängt sein, um es zu untersuchen. Man kann auch heruntergeladen bzw. nicht eingehängte Pakete untersuchen. Komfortable geht dies, indem man Programme aus den squashfs-tools-ng nutzt.
Das Paket "squashfs-tools-ng" ist in den Paketquellen einiger Linux-Distribution enthalten. Eine Übersicht findet man auf der Projektseite.
Unter Ubuntu / Debian / Raspberry Pi OS kann man das Paket über
xxxxxxxxxxsudo apt install squashfs-tools-nginstallieren.
Nach der Installation von "squashfs-tools-ng" steht unter anderem das Programm rdsquashfs zur Verfügung. Mit dessen Hilfe kann man sich den Inhalt eines SquashFS-Dateisystems - und damit auch eines snaps - anzeigen lassen.
Zuerst wechselt man in der Verzeichnis, wo das snap Paket liegt. Unter Ubuntu werden regulär installierte snaps unter /var/lib/snapd/snaps gespeichert. Liegt dort z.B. das snap core22_858.snap kann man sich über
xxxxxxxxxxsudo rdsquashfs core22_858.snap -l /das Wurzelverzeichnis diese snaps anzeigen lassen. Das sudo ist hier notwendig, weil die snaps in /var/lib/snapdsnaps zum Besitzer und zur Gruppe root gehören und die Dateirechte mit 300 restriktiv gesetzt sind. Hätte man ein snap manuell heruntergeladen und z.B. im eigenen Home-Verzeichnis gespeichert, wären das Ausführen des Befehls mit sudo nicht notwendig.
Die Option -l des Programm rdsquashfs gibt an, welches Verzeichnis ausgegeben werden sollte. Möchte man sich z.B. alle ausführbaren Programme ausgeben lassen, die in diesem snap enthalten sind, ruft man den Befehl
xxxxxxxxxxsudo rdsquashfs core22_858.snap -l /usr/binauf.
Man kann sich mit Hilfe von rdsquashfs auch Dateien aus dem snap ausgeben lasse. Dazu muss man das Programm mit der Option -c gefolgt vom vollen Pfad und Dateinamen aufrufen. Im folgenden Beispiel würde die Datei /etc/systemd/journald.conf aus dem snap aufgelistet:
xxxxxxxxxxsudo rdsquashfs core22_858.snap -c /etc/systemd/journald.confMan kann sich auch einfach alle Dateien und Verzeichnisse aus dem snap auflisten lassen:
xxxxxxxxxxsudo rdsquashfs core22_858.snap -drdsquashfs kennt noch einige weitere Optionen, unter anderem zum Entpacken von einzelnen oder allen Dateien aus dem snap Paket. Diese kann man sich über den Aufruf von
xxxxxxxxxxrdsquashfs -h#oderman rdsquashfsanzeigen lasssen.
Die "squashfs-tool-ng" beinhalten auch das Programm sqfsdiff mit dem sich der Inhalt von zwei SquashFS-Dateisystemen und damit auch von zwei snap Paketen vergleichen lässt. Im folgenden Beispiel würden zwei Version des core22 snaps, welche im aktuellen Verzeichnis gespeichert sind, vergleichen:
xxxxxxxxxxsudo sqfsdiff --old core22_858.snap --new core22_864.snapJe nach dem, wie viele Dateien und Verzeichnisse im snap Paket sind bzw. sich geändert haben, kann die Ausgabe sehr lang sein. Es gibt verschiedene Arten von Unterschieden:
Lautet eine Ausgabezeile regular file ./pfad/zur datei/dateiname differs bedeutet dies, dass die Datei und der Dateipfad in beiden snaps identisch ist, sich aber der Inhalt der Datei verändert hat.
Lautet eine Ausgabezeile > /pfad/zur/datei/dateinamebedeutet dies, diese diese Datei mit diesem Dateipfad in der neuen Datei enthalten ist, aber nicht in der alten.
Lautet eine Ausgabezeile < /pfad/zur/datei/dateinamebedeutet dies, diese diese Datei mit diesem Dateipfad in der alten Datei enthalten ist, aber nicht in der neue.
Lautet eine Ausgabezeile /pfad/zur/datei/dateiname has a different link target bedeutet dies, dass Datei und Dateipfad in beiden snaps enthalten ist, aber sich die Verlinkung innerhalb des SquashFS-Dateisystem geändert hat.
sqfsdiff kennt eine Reihe von Optionen, um die Vergleich einzuschränken. Die Optionen kann man sich über den Aufruf von
xxxxxxxxxxsqfsdiff -h#oderman sqfsdiffanzeigen lassen.
Startseite der offiziellen Dokumentation zu snaps
Wikipediaartikel zu SquashFS
SquashFS Howto beim The Linux Documentation Projekt
SquashFS Dokumentation des Linux Kernel
Projektseite von squashfs-tools-ng