[[Vorlage(Getestet, jammy)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis()]] [:snap:] bietet einige Tools für das Debugging von snaps. = Debugging = Zur Fehlersuche und zum Debuggen von snaps dienen im wesentlichen die folgenden beiden Befehle[1]: {{{#!vorlage Befehl snap debug BEFEHL [OPTION] snap run OPTION NAMES_DES_SNAPS }}} Je nach Befehl muss der Aufruf ggf. mit Root-Rechten[2] erfolgen. == Netzwerkverbindung prüfen == Ob snapd eine Netzwerkverbindung hat und der zentrale Server zum Herunterladen von snaps erreichbar ist kann über {{{#!vorlage Befehl snap debug connectivity }}} erfolgen. Wenn alle in Ordnung ist lautet die Ausgabe {{{ Connectivity status: * PASS }}} == Status unter Umgehung des REST-API von snapd prüfen == Die Kommunikation mit snap bzw. genau genommen dem Hintergrunddienst snapd erfolgt über eine [wikipedia:Representational_State_Transfer:REST API]. Diese muss man normalerweise als Nutzer nicht direkt abfragen, Details hierzu sind in der [https://snapcraft.io/docs/snapd-api snapd Dokumentation] {en} zu finden. Sollte snapd Probleme machen oder ggf. gar erreichbar sein, kann man die REST API umgehen und die letzten Änderungen auch direkt abfragen. Der Befehl dazu lautet: {{{#!vorlage Befehl sudo snap debug state /var/lib/snapd/state.json }}} Beispielausgabe: {{{ ID Status Spawn Ready Label Summary 185 Done heute um 11:29 CEST heute um 11:29 CEST install-snap Installiere "mosquitto" Snap 186 Done heute um 12:03 CEST heute um 12:04 CEST install-snap Installiere "lxd" Snap }}} Die Ausgabe entspricht dem, was `snap changes` normalerweise liefert. Man kann so auch Details zu einer Änderung abfragen, wie z.B.: {{{#!vorlage Befehl sudo snap debug state /var/lib/snapd/state.json --change 185 }}} Ausgabe: {{{ Lanes ID Status Spawn Ready Kind Summary 0 4234 Done heute um 11:29 CEST heute um 11:29 CEST prerequisites Sicherstellen, dass die Voraussetzungen für "mosquitto" verfügbar sind 0 4235 Done heute um 11:29 CEST heute um 11:29 CEST download-snap Snap "mosquitto" (831) von Kanal "stable" herunterladen 0 4236 Done heute um 11:29 CEST heute um 11:29 CEST validate-snap Zusicherungen für Snap "mosquitto" (831) abrufen und überprüfen 0 4237 Done heute um 11:29 CEST heute um 11:29 CEST mount-snap Snap "mosquitto" (831) einbinden 0 4238 Done heute um 11:29 CEST heute um 11:29 CEST copy-snap-data Daten von Snap "mosquitto" kopieren 0 4239 Done heute um 11:29 CEST heute um 11:29 CEST setup-profiles Sicherheitsprofile für Snap "mosquitto" (831) einrichten 0 4240 Done heute um 11:29 CEST heute um 11:29 CEST link-snap Snap "mosquitto" (831) für das System verfügbar machen 0 4241 Done heute um 11:29 CEST heute um 11:29 CEST auto-connect Automatisches Verbinden von geeigneten Plugs und Slots von Snap "mosquitto" 0 4250 Done heute um 11:29 CEST heute um 11:29 CEST connect mosquitto:network mit snapd:network verbinden 0 4251 Done heute um 11:29 CEST heute um 11:29 CEST connect mosquitto:network-bind mit snapd:network-bind verbinden 0 4249 Done heute um 11:29 CEST heute um 11:29 CEST setup-profiles Einrichten der Sicherheitsprofile für Autoverbindungen des Snaps "mosquitto" (831) 0 4242 Done heute um 11:29 CEST heute um 11:29 CEST set-auto-aliases Automatisch Aliase für Snap "mosquitto" festlegen 0 4243 Done heute um 11:29 CEST heute um 11:29 CEST setup-aliases Aliase für Snap "mosquitto" einrichten 0 4244 Done heute um 11:29 CEST heute um 11:29 CEST run-hook Installationshook von Snap "mosquitto" ausführen, falls vorhanden 0 4245 Done heute um 11:29 CEST heute um 11:29 CEST run-hook Run default-configure hook of "mosquitto" snap if present 0 4246 Done heute um 11:29 CEST heute um 11:29 CEST start-snap-services Snap "mosquitto" (831) Dienste starten 0 4247 Done heute um 11:29 CEST heute um 11:29 CEST run-hook Den Konfigurationshook von Snap "mosquitto" ausführen, falls vorhanden 0 4248 Done heute um 11:29 CEST heute um 11:29 CEST run-hook Run health check of "mosquitto" snap }}} Über {{{#!vorlage Befehl sudo snap debug state /var/lib/snapd/state.json --connections }}} lassen sich so auch vorhandene Verbindungen zwischen snaps, die [:snap/#Schnittstellen-Interfaces-Slots-und-Plugs:Slots und Plugs] abgefragt werden. `snap debug state` kennt noch eine Reihe weiterer Möglichkeiten, die man sich über `snap debug state -h` anzeigen lassen kann. == detailliertes Debugging von snaps == Wer Probleme mit einer snap Applikation hat, kann sich tiefergehende Informationen zwecks Debuging anzeigen lassen. Dies ist bei normaler Nutzung von funktionierenden snaps aber in der Regel selten bis nie notwendig. Mit {{{#!vorlage Befehl snap run --trace-exec NAMES_DES_SNAPS }}} kann man sich anzeigen lassen, was beim Starten des snaps passiert und was wie lange dauert. Beispiel {{{#!vorlage Befehl snap run --trace-exec thunderbird }}} {{{ Gtk-Message: 16:58:02.597: Not loading module "atk-bridge": The functionality is provided by GTK natively. Please try to not load it. (thunderbird:16830): Gtk-WARNING **: 16:58:02.670: GTK+ module /snap/thunderbird/371/gnome-platform/usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so cannot be loaded. GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported. Gtk-Message: 16:58:02.670: Failed to load module "canberra-gtk-module" (thunderbird:16830): Gtk-WARNING **: 16:58:02.672: GTK+ module /snap/thunderbird/371/gnome-platform/usr/lib/gtk-2.0/modules/libcanberra-gtk-module.so cannot be loaded. GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported. Gtk-Message: 16:58:02.672: Failed to load module "canberra-gtk-module" [GFX1-]: glxtest: libpci missing ATTENTION: default value of option mesa_glthread overridden by environment. /usr/share/libdrm/amdgpu.ids: No such file or directory ATTENTION: default value of option mesa_glthread overridden by environment. Slowest 10 exec calls during snap run: 0.022s /snap/snapd/20092/usr/lib/snapd/snap-confine 0.014s /usr/bin/chmod 0.010s /usr/bin/realpath 0.238s /snap/thunderbird/371/snap/command-chain/desktop-launch 0.021s /snap/thunderbird/371/bin/gpg-shim 0.017s /snap/thunderbird/371/bin/tmpdir 0.011s /usr/bin/snapctl 0.075s /snap/thunderbird/371/glxtest 0.035s /snap/thunderbird/371/pingsender 0.034s /snap/thunderbird/371/pingsender Total time: 30.694s }}} Bei Programmen, die im Vordergrund laufen, wie z.B. normale Anwendungen, erfolgt die Ausgabe von `Slowest 10 exec calls during snap run:` erst, wenn das Programm wieder beendet wird. Die letzte Zeile der Ausgabe `Total time` gibt an, wie lange das Programm geöffnet war. Der Befehl {{{#!vorlage Befehl snap run --strace NAME_DES_SNAPS }}} ruf das snap direkt mit [wikipedia_en:Strace:strace] auf. Die (unter Umständen) sehr vielen Informationen, was gerade passiert, werden direkt im Terminal ausgegeben. Man kann `strace` Optionen mitgeben. Dazu verwendet man `--strace='OPTIONEN'`, also z.B. `--strace='-c'`. Der Befehl {{{#!vorlage Befehl snap run --gdb NAMES_DES_SNAPS }}} ruft das Programm mit dem [:GDB:GNU Debugger] auf und wechselt in die interaktive GDB-Shell, sobald der erste Abfangpunkt erreicht ist. = Links = * [https://snapcraft.io/docs/debug-snaps Debugging] {en} von snaps - weitere Hinweise * [https://snapcraft.io/docs/using-the-api Dokumentation der REST API] {en} von snapd * [https://forum.snapcraft.io/t/stracing-snap-commands/1433 Diskussionsthread] {en} im Snapcraft-Forum mit Beispielen für die strace und gdb Optionen #tag: System, Paketverwaltung, snap