Wie gehen Snap-Pakete mit gemeinsamen Abhängigkeiten um?

30

Das Snap-Packaging-Format befreit uns endlich von der Hölle der Abhängigkeiten, indem es jedem Paket ermöglicht, seine eigene Kopie der Abhängigkeiten zu haben. Mich interessieren die technischen Details, wie das geht. Wie geht das?

  • Schnappschüsse abhängig von der Version einer Bibliothek, die bereits über Deb-Pakete für das aktuelle Release installiert wurde? Ignoriert es die installierte Bibliothek?
  • verschiedene Snaps, die dieselbe Version derselben Bibliothek angeben? Macht es irgendwie Deduplizierung?
  • Aktualisierungen von Kernbibliotheken, die wahrscheinlich von vielen Snaps verwendet werden? OpenSSL ist ein großer Schmerzpunkt.

xdg-app hat so etwas wie eine "Laufzeit" :

Ein grundlegendes Konzept in xdg-app ist die Aufteilung von Laufzeit und Anwendung. Jede App hängt von einer Laufzeit ab, die die Kernbibliotheken bereitstellt, auf die sich die App stützt. Laufzeiten werden in der Regel von vielen Anwendungen gemeinsam genutzt, ein Benutzer kann jedoch mehrere Laufzeiten gleichzeitig installieren.

Es scheint, dass OpenSSL Teil der Laufzeit von xdg-apps ist. Ein Update auf OpenSSL sollte daher alle xdg-apps, die dieselbe Laufzeit verwenden, transparent beeinflussen.

muru
quelle

Antworten:

9

Die ersten beiden Situationen werden auf clevere Weise behandelt.

Eines der interessanten Features ist die Deduplizierungsunterstützung für Inhalte in Snap-Paketen. Snaps werden automatisch von gemeinsamen Dateien dedupliziert, die zwischen Snaps basierend auf ihren Datei-Hashes geteilt werden. Es würde eine Deduplizierung auf der Dateisystemebene, eine Deduplizierung bei Snap-Downloads (mit Serverunterstützung) und möglicherweise eine Deduplizierung von zugeordneten Bibliotheken vom Linker geben. Die Deduplizierung ist ein großes Arbeitselement und wird wahrscheinlich eine Weile dauern, bis sie vollständig implementiert ist, aber es ist dennoch ein interessantes Ziel.

Quelle: http://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-Snappy-Deduplication

Die dritte Situation ähnelt in etwa den von Ihnen genannten Laufzeiten:

Eine Snappy-Maschine besteht aus drei Ebenen: der von Canonical bereitgestellten Systemebene, einer Ebene von Frameworks, die das von Anbietern in Zusammenarbeit mit Canonical erstellte Basissystem erweitern, und einer Reihe von Snappy-Anwendungen, die direkt von Anbietern bereitgestellt werden. Wenn Sie ein Teil aktualisieren, müssen Sie nur die neue Version eines schreibgeschützten Bildes verwenden. Das Zurücksetzen auf eine frühere Version ist genauso einfach.

Quelle: http://www.ubuntu.com/cloud/snappy

Es gibt noch keine gute Dokumentation, die Frameworks beschreibt, vor allem, weil sie immer noch an den Grenzen eines Frameworks zu arbeiten scheinen. Hier ist ein Auszug aus ihrer Mailing-Liste, der zur Klärung beitragen könnte.

Ich experimentiere mit Frameworks, um das Snappy-Basissystem im Wesentlichen um Software und Services zu erweitern, die viele Snaps erfordern, aber aufgrund von Aktualisierungsproblemen und -größen nicht in jedem einzelnen Snap enthalten sein sollten. Das beste Beispiel, das ich dafür habe, ist die OpenSSL-Binärdatei. Viele Snaps benötigen dies, um Schlüssel und Zertifikate zu generieren und zu validieren.

Das andere Problem, das mit einem Framework gelöst werden muss, ist der Zugriff auf systemweite Ressourcen, insbesondere auf Ports. Beispielsweise würde ein Webserver-Framework anderen Snapps Möglichkeiten bieten, ihre Webdienst-API und Endpunkte über einen Reverse-Proxy in das Framework zu injizieren, in dem der Webserver ausgeführt wird.

Mir wurde im IRC gesagt, dass ich das Framework-Konzept missbrauche, aber diese beiden Probleme tauchen immer noch häufig auf meinem Schreibtisch auf.

Quelle: https://lists.ubuntu.com/archives/snappy-app-devel/2015-November/000442.html

Zynismusiker
quelle
1
Zur Verdeutlichung gibt es derzeit keine davon, oder? Dies sind Pläne und Sie wollten wahrscheinlich sagen, dass in der ersten Zeile "wird behandelt" statt "wird behandelt"?
muru
Technisch existieren beide. Ich weiß, dass es bereits mindestens ein Docker-Framework gibt und dass es bereits Links für einige Bibliotheken in Ubuntu-Core gibt, die von installierten Apps genutzt werden. Ich habe aber auch keine Ahnung, wie weit es geht; Ich erkläre nur die technischen Details der Lösungen.
Zynismusiker
1
Dies sind keine klugen Wege, nur angeblich kluge Ideen. Zum Beispiel gibt es noch keine offizielle Dokumentation darüber, wie die erste tatsächlich implementiert wird, sondern nur einen Phoronix-Artikel, der auf einen Vortrag verweist, der übrigens ein toter Link ist.
Bviktor
3

Ich glaube nicht, dass Snaps überprüfen, welche Abhängigkeiten bereits installiert sind. Es enthält nur alle Abhängigkeiten und die Laufzeit (weshalb der LibreOffice-Snap zum Teil 287 MB und das Flatpak etwa 200 MB groß ist).

Zu den Snaps gehört so ziemlich alles, was die Software zum Ausführen benötigt. Ich glaube nicht, dass irgendetwas zwischen Schnappschüssen geteilt wird.

Wenn ein Snap aktualisiert wird, werden nur die neuen Abhängigkeiten und nicht der gesamte Snap heruntergeladen.

Frederik Baetens
quelle
2

Weitere Erläuterungen zur Art und Weise, wie Snap Packaging gemeinsam genutzte Abhängigkeiten verarbeitet.

Zu den Snaps gehört so ziemlich alles, was die Software zum Ausführen benötigt. Ich glaube nicht, dass irgendetwas zwischen Schnappschüssen geteilt wird.

Diese Aussage in einer der Antworten ist teilweise richtig, jedoch hängen alle installierten Snap-Pakete mit Ausnahme des Core-Snaps von zwei Paketen ab, von denen eines der Core-Snap ist.

  1. snapd - wird standardmäßig ab 16.04 installiert und kann auch ab 14.04 installiert werden.

  2. core    - (der Kern-Snap), der automatisch heruntergeladen und installiert wird, wenn das erste installierte Snap-Paket installiert wird

Alle Snap-Pakete außer dem Core selbst hängen vom Core-Snap ab. Wenn mit dem Kern-Snap etwas nicht stimmt, funktionieren einige oder alle anderen Snaps nicht. Ein Problem mit dem Kernfang kann auf zwei Arten behoben werden.

  1. Aktualisieren Sie den Kernfang. Auch wenn dies nicht funktioniert, liefern die Ergebnisse der Ausführung des folgenden Befehls zusätzliche Informationen, die zur Behebung des Problems beitragen.

    sudo snap refresh core  
    
  2. Deinstallieren Sie den Core Snap und alle Snap-Pakete und installieren Sie sie erneut.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
karel
quelle