ubuntuusers.de

snap

Status: Ungelöst | Ubuntu-Version: Ubuntu
Antworten |
Dieses Thema ist die Diskussion des Artikels snap.

pantomime

Anmeldungsdatum:
20. März 2013

Beiträge: 512

noisefloor schrieb:

könnte es sein, dass die ziemlich wenig Ahnung von den Paketquelle und alternativen Installationsmethoden hast?

Ich bin dabei zu lernen. Was ich bis heute gelernt habe, dass - egal ob Experte oder Anfänger - die Qualität, die Vertrauenswürdigkeit einer Quelle bei der Auswahl und Installation von Ubuntu-Werkzeugen ein wichtiges Thema bleiben wird.

noisefloor schrieb:

... bevor du dich an Mikrooptimierung vergehst probierst. Wenn du dich ins Wiki einbringen willst gibt es sicherlich viel bessere Weg also sowas hier.

Danke für die Hinweise auf Fehler. Ich würde mich freuen, wenn wir in diesem Thread, wo es um den snap-Artikel im Wiki geht, beim Thema bleiben und ich würde mich auf Rückmeldungen zu meinem Vorschlag freuen die wertende Bezeichnung "Vorteil" im Artikel durch eine neutrale Formulierung

Eine Besonderheit von Paketen im Snap-Format ist, dass damit unabhängig von der Ubuntu-Version beim Anwender aktuelle Versionen der Anwendungssoftware installierbar sind, weil für das Ausführen der Software notwendige Module in der Snap-Datei mitgeliefert werden.

zu ersetzen.

pantomime schrieb:

Bei Paketen aus den offiziellen Paketquellen gibt es bei Linuxdistribution wie Ubuntu und dessen offizielle Derivate keine Versionssprünge. Für alle Pakete der Standardinstallation (offizielle Paketquellen) "stellt das Ubuntu-Team kommerziellen Kundendienst und Sicherheits-Korrekturen zur Verfügung."

noisefloor schrieb:

Wer ist das "Ubuntu Team"? "Sicherheitskorrekturen" (soll wohl ein extrem schräges Wort für "Updates" sein?) bekommen auch Pakete aus Universe eher selten bis nie.

[...]

Das Wort "Kundendienst" ist in dem Kontext auch mega-schräg.

Ich habe in meinem Formulierungsvorschlag gut erkennbar https://de.wikipedia.org/wiki/Ubuntu_(Betriebssystem) als Quelle für diese Begriffe genannt. Ich bin davon ausgegangen, dass die Begriffe geläufig und selbsterklärend sind.

noisefloor schrieb:

... Es gibt z.B. mehrere hundert ungetestete Artikel, die nach einem Tester und Bearbeiter schreien.

Ich rege an, die Diskussion zum Thema, wie man die Benutzer dafür gewinnt, sich im https://wiki.ubuntuusers.de/ aktiver einzubringen in einem anderen Thread zu führen.

gruss, pantomime

Ubunux

Avatar von Ubunux

Anmeldungsdatum:
12. Juni 2006

Beiträge: 17439

Nimm einfach zur Kenntnis, dass dein Vorschlag wegen inhaltlicher Fehler nicht konsensfähig ist!

Wegen minimaler Änderungen der Wortwahl in der Einleitung des Artikels jetzt so eine lange Diskussion anzufangen ist ermüdend!

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

die letzten Änderung von Mylin ist inhaltlich komplett falsch. Mit dem Skript werden _nicht_ verwaiste snaps gefunden und entfernt, sondern ausschließlich alle älteren, noch installierten Revisionen von snaps.

Wenn ein snap, welches als Abhängigkeit installiert wurde, nur in einer Revision auf dem System vorhanden ist, dann ist es nicht als "deaktiviert" markiert, wenn das snap, welches das andere snap mitinstalliert hat, wieder deinstalliert wird. Wenn das jemand live testen möchte: unter 24.04 in der Grundinstallation (=Fx und TB als snap) mal sudo snap kompare ausführen. Dann wird das snap kf5-5-111-qt-5-15-11-core22 als Abhängigkeit von Kompare mit installiert. Wenn man dann sudo snap remove --purge kompare ausführt, bleibt kf5-5-111-qt-5-15-11-core22 zurück und ist nicht als "deaktiviert" markiert.

Bitte die Revision zurücksetzen.

Gruß, noisefloor

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9721

Wohnort: Münster

noisefloor schrieb:

[…] die letzten Änderung von Mylin ist inhaltlich komplett falsch […]

Dein Einwand trifft zu, aber die einfache Entfernung von (aus welchen Gründen auch immer) deaktivierten (disabled) Snaps per Skript ist sinnvoll, z.B. um verschwendeten Speicherplatz wiederzugewinnen.

Bitte die Revision zurücksetzen.

Ich habe statt dessen unter Erhaltung des Skripts (bis auf kleine Verbesserung) den Abschnitt umformuliert.

So OK?

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

So OK?

Ich habe den Text mit mehr Erklärung erweitert, damit der geneigte Nutzer eine besser Entscheidungsgrundlage hat, ob er das Skript ausführen will (oder nicht).

Gruß, noisefloor

Ubunux

Avatar von Ubunux

Anmeldungsdatum:
12. Juni 2006

Beiträge: 17439

Man kann imho doch über einen kleinen Umweg zu einer älteren Version zurückkehren: die entsprechende SnapApp deinstallieren und dann wieder mit der Option --revision eine alte Revision installieren.

Wer Probleme mit dem Speicherplatz hat, der braucht kein Script, der braucht eine snapfreie Distribution. 🤓

tomtomtom Team-Icon

Supporter
Avatar von tomtomtom

Anmeldungsdatum:
22. August 2008

Beiträge: 55438

Wohnort: Berlin

Ubunux schrieb:

Wer Probleme mit dem Speicherplatz hat, der braucht kein Script, der braucht eine snapfreie Distribution. 🤓

Oder mehr Speicherplatz. Viel hilft viel!1!!11 😈

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

die entsprechende SnapApp deinstallieren und dann wieder mit der Option --revision eine alte Revision installieren.

Theoretisch ja, praktisch gibt es aber keinen mir bekannten Weg, eine alte Revisionsnummer von snap $FOO herauszufinden. Also wenn man die nicht irgendwie irgendwo notiert hat, hat man Pech.

Gruß, noisefloor

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13209

Ich hätte noch ein Skript, das ausgibt, welche Abhängigkeiten es gibt. Ist allerdings in Ruby. Haltet Ihr das für nützlich?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/ruby

# Show snap dependencies

require 'set'

def find_base(snap)
  IO.popen(%w{snap info --verbose} << snap, 'r') do |io|
    io.each_line do |line|
      if /^base:\s*(\S+)/ =~ line
        return $1
      end
    end
  end

  nil
end

def find_dependencies(snap)
  deps = Set.new

  IO.popen(%w{snap connections} << snap, 'r') do |io|
    io.each_line do |line|
      if /^\S+\s+\S+\s+([^:\s]+):/ =~ line
        deps << $1
      end
    end
  end

  deps
end

# find all installed snaps
installed = nil

IO.popen(%w{snap list}, 'r') do |io|
  io.each_line do |line|
    if installed
      installed << line[/^\S+/]
    else
      installed = Set.new
    end
  end
end

# find snaps to keep, based on dependency
keep = Set.new

installed.each do |snap|
  base = find_base(snap) and keep << base
  keep.merge find_dependencies(snap)
end

puts 'No dependencies:', (installed - keep).sort
puts
puts 'Dependencies:', keep.sort

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

noch ein Nachtrag zur Ergänzung von Mylin: die funktioniert _nur_, wenn das System auf Englisch eingestellt ist. Wenn das System auf deutsch ist, muss man im Skript disabled durch deaktiviert ersetzen. Wenn das System auf niederländisch eingestellt ist, muss man disabled durch uitgeschakeld ersetzen, im Französischen durch désactivé usw.

Sachdienliche Ideen, wie man das im Wikiartikel einbaut, sind willkommen.

@rklm: ich arbeite gerade an einem Howto, wie man verwaiste snaps findet und entfernt. Da passt dein Script dann besser hin.

Gruß, noisefloor

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9721

Wohnort: Münster

noisefloor schrieb:

[…] noch ein Nachtrag zur Ergänzung von Mylin: die funktioniert _nur_, wenn das System auf Englisch eingestellt ist. Wenn das System auf deutsch ist, muss man im Skript disabled durch deaktiviert ersetzen.

Nein. Sein ursprüngliches Skript funktionierte nur, wenn das System auf Deutsch eingestellt war und er hatte das auch richtigerweise im Text angesprochen. Meine bereits vorgenommene kleine Verbesserung LANG= bessert das, indem das Skript nun für den Befehl snap selbst auf die Programmsprache (English) umschaltet und daher mit jeder Einstellung der Systemsprache gleich funktionieren sollte.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

Danke für die Erklärung. Funktioniert auch so, wie du sagst. Passt also doch.

Gruß, noisefloor

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13209

noisefloor schrieb:

@rklm: ich arbeite gerade an einem Howto, wie man verwaiste snaps findet und entfernt. Da passt dein Script dann besser hin.

Ich versuche auch noch eine Version ohne Ruby nur mit den Standard-Werkzeugen (sed, awk) zu bauen, wenn ich ein wenig Ruhe habe.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13209

rklm schrieb:

Ich versuche auch noch eine Version ohne Ruby nur mit den Standard-Werkzeugen (sed, awk) zu bauen, wenn ich ein wenig Ruhe habe.

Ging schneller als ich dachte:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/sh

# Find all snaps which are used somewhere:
# 1. base snaps
# 2. plugged interfaces

echo 'Calculating...' >&2

{
  for snap in $(snap list | awk 'NR>1 {print $1}'); do
    snap info --verbose "$snap"
  done | sed -n 's#^base: *##p'

  snap connections | awk 'NR>1 { if (match($3, /^[^:]+/, a)) print a[0] }'
} | sort -u

Variante:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/sh

# Find all snaps which are used somewhere:
# 1. base snaps
# 2. plugged interfaces

echo 'Calculating...' >&2

{
  for snap in $(snap list | awk 'NR>1 {print $1}'); do
    snap info --verbose "$snap"
  done | awk '/^base:/ {print $2}'

  snap connections | awk 'NR>1 { if (match($3, /^[^:]+/, a)) print a[0] }'
} | sort -u

Und, Kandidaten (!) für das Löschen:

1
2
3
4
5
#!/bin/bash

# Candidates for deletion

snap list | awk 'NR>1 {print $1}' | fgrep -vf <(snaps-used)

Darunter sind natürlich auch alle Snaps, die man explizit installiert hat.

Mylin

Avatar von Mylin

Anmeldungsdatum:
23. Juli 2024

Beiträge: 339

noisefloor schrieb:

... ist inhaltlich komplett falsch. Mit dem Skript werden _nicht_ verwaiste snaps gefunden und entfernt, sondern ausschließlich alle älteren, noch installierten Revisionen von snaps. ...

Da war ich wohl etwas zu optimistisch, ich bitte dies zu entschuldigen. Bisher habe ich mit diesem Skript Snap aufgeräumt und soweit keine verwaisten Snaps vorgefunden (vielleicht auch nicht richtig gesucht). Ich habe mir die Thematik jetzt einmal genauer betrachtet und dazu ein kleines Skript erstellt.

Was tut dieses Skript?

Es sucht mit snap connections --all in der Schnittstelle content nach snaps die keine Verbindung haben. Dabei ist mir aufgefallen, dass es Snaps ohne Verbindung gibt, die für andere Snaps allerdings noch notwendig sind. Deshalb wird mit find /snap geprüft, ob das Snap als default-provider bei anderen Snaps hinterlegt ist. Ist dies der Fall wird das Snap nicht deinstalliert. Hat ein Snap keine Verbindung (Abhängigkeit) und ist nicht als default-provider hinterlegt wird es deinstalliert. Das Skript ist eine erste Version, wer testen und berichten mag oder Verbesserungen für den Code hat ist gerne dazu eingeladen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash

orphan=$(snap connections --all | grep 'content' | grep -v 'themes' | grep -v 'slot' | awk '$2 == "-" {print $3}' | cut -d: -f1)
provider=$(sudo find /snap -name "snap.yaml" | while read i; do grep -E "default-provider:" "$i" | cut -d: -f2; done)

if [[ $provider =~ $orphan ]]; then    
    plug=$(snap connections $orphan | grep 'content' | awk '$2 != "-" {print $2}' | cut -d: -f1)
    echo "Zu Snap $orphan sind keine Abhängigkeiten vorhanden, allerdings ist Snap $orphan default:provider von Snap $plug und wird deshalb nicht deinstalliert."
  else
    sudo snap remove $orphan
fi