Comment les packages snap gèrent-ils les dépendances partagées?

30

Le format d'empaquetage instantané nous libère enfin de l'enfer des dépendances en permettant à chaque paquet d'avoir sa propre copie des dépendances. Je m'intéresse aux détails techniques sur la façon dont cela se fait. Comment gère-t-il:

  • snaps en fonction de la version d'une bibliothèque déjà installée via les packages deb pour la version actuelle? Ignore-t-il la bibliothèque installée?
  • différents snaps spécifiant la même version de la même bibliothèque? Est-ce que cela fait la déduplication d'une manière ou d'une autre?
  • mises à jour des bibliothèques de base susceptibles d'être utilisées par de nombreux snaps? OpenSSL me vient à l'esprit comme un énorme problème.

xdg-app a quelque chose appelé "runtime" :

Un concept fondamental dans xdg-app est le partage d'exécution / application. Chaque application dépend d'un runtime, qui fournit les bibliothèques principales sur lesquelles l'application s'appuie. Les runtime sont généralement partagés par de nombreuses applications, mais un utilisateur peut avoir plusieurs runtimes installés en même temps.

Il semble que dans le cas d'OpenSSL, il ferait partie du runtime dans les applications xdg, donc une mise à jour d'OpenSSL devrait affecter de manière transparente toutes les applications xdg utilisant le même runtime.

muru
la source

Réponses:

9

Les deux premières situations sont gérées de manière intelligente.

L'une des fonctionnalités intéressantes évoquées est la prise en charge de la déduplication pour le contenu des packages Snap. Les snaps seront automatiquement dédupliqués des fichiers communs partagés entre les snaps en fonction de leurs hachages de fichiers. Il y aurait une déduplication sur la couche du système de fichiers, une déduplication sur les téléchargements instantanés (avec prise en charge du serveur) et peut-être une déduplication des bibliothèques mappées à partir de l'éditeur de liens. La déduplication est un gros travail et sa mise en œuvre prendra probablement un certain temps, mais c'est néanmoins un objectif intéressant.

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

Quant à la troisième situation, ils ont quelque chose de similaire aux temps d'exécution que vous avez mentionnés:

Il existe trois couches qui composent une machine accrocheuse: la couche système, fournie par Canonical, une couche de frameworks qui étendent le système de base produit par les fournisseurs en collaboration avec Canonical, et un ensemble d'applications accrocheuses, fournies directement par les fournisseurs. Mettre à jour n'importe quel morceau signifie simplement utiliser la nouvelle version d'une image en lecture seule. Revenir à une version précédente est tout aussi simple.

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

Il n'y a pas encore de bonne documentation décrivant les cadres, principalement parce qu'ils semblent encore déterminer les limites de ce qu'est un cadre. Voici un extrait de leur liste de diffusion qui pourrait aider à clarifier les choses.

J'expérimente avec Frameworks pour étendre essentiellement le système de base Snappy par des logiciels et des services dont de nombreux snaps ont besoin mais ne devraient pas être inclus dans tous les snaps en raison de problèmes de mise à jour et de taille. Le meilleur exemple que j'ai pour cela, est le binaire openssl. De nombreux snaps en ont besoin pour générer et valider des clés et des certificats.

L'autre problème que je dois résoudre avec un cadre est l'accès aux ressources à l'échelle du système, notamment les ports. Par exemple, une infrastructure de serveur Web fournirait des moyens pour d'autres snapps d'injecter leur API de service Web et leurs points de terminaison via un proxy inverse dans l'infrastructure exécutant le serveur Web.

On m'a dit sur IRC que j'abusais en quelque sorte du concept de cadre, mais ces deux problèmes reviennent souvent sur mon bureau.

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

cynique
la source
1
Pour clarifier, aucun de ceux-ci n'existe actuellement, non? Ce sont des plans et vous vouliez probablement dire "seront traités" au lieu de "sont traités" dans la première ligne?
muru
Techniquement, les deux existent. Je sais qu'il existe déjà au moins un framework docker et qu'il existe déjà des liens pour certaines bibliothèques incluses avec ubuntu-core dont les applications installées tirent parti. Je n'ai aucune idée du chemin parcouru, cependant; J'explique simplement les détails techniques des solutions.
cynique
1
Ce ne sont pas des manières intelligemment gérées, seulement des idées prétendument intelligentes. Par exemple, toujours aucune documentation officielle sur la façon dont le premier est réellement implémenté, seul un article de Phoronix pointant vers une conversation, qui est un lien mort entre eux.
bviktor
3

Je ne pense pas que les snaps vérifient quelles dépendances sont déjà installées. Il inclut simplement toutes ses dépendances et son exécution (ce qui explique en partie pourquoi le composant logiciel enfichable LibreOffice fait 287 Mo et le flatpak environ 200 Mo).

Les snaps incluent à peu près tout ce dont le logiciel a besoin pour fonctionner. Je ne pense pas que quelque chose soit partagé entre les snaps.

Cependant, lorsqu'un snap est mis à jour, il ne télécharge que les dépendances nouvelles et non le snap entier.

Frederik Baetens
la source
2

Des éclaircissements supplémentaires sont nécessaires sur la façon dont l'empaquetage par capture gère les dépendances partagées.

Les snaps incluent à peu près tout ce dont le logiciel a besoin pour fonctionner. Je ne pense pas que quelque chose soit partagé entre les snaps.

Cette déclaration dans l'une des réponses est partiellement vraie, cependant tous les packages d'accrochage installés, à l'exception de l'accrochage principal, dépendent de deux packages, dont l'un est l'accrochage principal.

  1. snapd - qui est installé par défaut en 16.04 et versions ultérieures et peut également être installé en 14.04.

  2. core    - (le core snap) qui est automatiquement téléchargé et installé lorsque le premier package snap installé est installé

Tous les packages d'accrochage, à l'exception du noyau lui-même, dépendent de l'accrochage du noyau. S'il y a un problème avec le composant logiciel enfichable de base, certains ou tous les autres composants logiciels enfichables ne fonctionneront pas. Un problème avec le composant logiciel enfichable de base peut être résolu des deux manières suivantes.

  1. Mettez à jour le composant logiciel enfichable de base. Même si cela ne fonctionne pas, les résultats de l'exécution de la commande suivante fourniront des informations supplémentaires qui aideront à résoudre le problème.

    sudo snap refresh core  
    
  2. Désinstallez le composant logiciel enfichable principal et tous les packages de composants logiciels enfichables, puis réinstallez-les.

    sudo snap remove core snap-package1 snap-package2  
    sudo snap install core snap-package1 snap-package2
    
Karel
la source