web-dev-qa-db-fra.com

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

Le format d'empaquetage instantané nous libère enfin de l'enfer de la dépendance en permettant à chaque paquet d'avoir sa propre copie des dépendances. Je suis intéressé par les détails techniques de la façon dont cela fonctionne. Comment gère-t-il:

  • s'accroche 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 clichés spécifiant la même version de la même bibliothèque? La déduplication est-elle utilisée d'une certaine manière?
  • mises à jour des bibliothèques de base susceptibles d’être utilisées par beaucoup de clichés? OpenSSL vient à l’esprit comme un énorme problème.

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

Un concept fondamental dans xdg-app est la scission entre application et exécution. Chaque application dépend d'un moteur d'exécution, qui fournit les bibliothèques principales sur lesquelles repose l'application. Les temps d'exécution sont généralement partagés par de nombreuses applications, mais un utilisateur peut avoir plusieurs temps d'exécution installés simultanément.

Il semble que dans le cas d'OpenSSL, cela ferait partie de l'exécution dans les applications xdg, de sorte qu'une mise à jour vers OpenSSL devrait affecter de manière transparente toutes les applications xdg utilisant le même environnement d'exécution.

27
muru

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

L'une des fonctionnalités intéressantes évoquée est la prise en charge de la déduplication du contenu dans les packages Snap. Les instantanés seraient automatiquement dédupliqués des fichiers communs partagés entre eux, en fonction de leurs hachages de fichiers. Il y aurait une déduplication sur la couche système de fichiers, une déduplication sur les téléchargements instantanés (avec la prise en charge du serveur) et éventuellement une déduplication des bibliothèques mappées à partir de l'éditeur de liens. La déduplication est un élément de travail important et sa mise en œuvre complète prendra probablement un certain temps, mais il s'agit néanmoins d'un objectif intéressant.

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

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

Une machine dynamique est constituée de trois couches: 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 rapides, fournies directement par les fournisseurs. Mettre à jour une pièce signifie simplement utiliser la nouvelle version d'une image en lecture seule. Le retour à 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 en train de définir 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 le système de base Snappy de logiciels et de services nécessitant beaucoup de clichés mais ne devant pas être inclus dans les clichés en raison des problèmes de mise à jour et de leur taille. Le meilleur exemple que j'ai pour cela est le binaire openssl. Beaucoup de clichés en ont besoin pour générer et valider des clés et des certificats.

L’autre problème que j’ai à résoudre avec un cadre est l’accès aux ressources de l’ensemble du système, notamment les ports. Par exemple, une infrastructure de serveur Web fournirait aux autres applications un moyen 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 me reviennent souvent sur le bureau.

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

8
cynicist

Je ne pense pas que les instantanés vérifient les dépendances déjà installées. Il ne comprend que toutes ses dépendances et son exécution (ce qui explique en partie pourquoi la capture de LibreOffice est de 287 Mo et le flatpak d’environ 200 Mo).

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

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

3
Frederik Baetens

Des précisions supplémentaires s’imposent sur la façon dont l’emballage instantané gère les dépendances partagées.

Les instantanés incluent à peu près tout ce que le logiciel doit exécuter. Je ne pense pas que quelque chose soit partagée entre les instantanés.

Cette affirmation dans l'une des réponses est partiellement vraie. Cependant, tous les packages de capture installés, à l'exception du composant logiciel enfichable principal, dépendent de deux packages, l'un d'entre eux étant le composant logiciel enfichable principal.

  1. snapd - qui est installé par défaut à partir de 16.04 et peut également être installé à partir de 14.04.

  2. core - (le composant logiciel enfichable) qui est automatiquement téléchargé et installé lors de l'installation du premier package de composant logiciel enfichable

Tous les packages d'alignement, à l'exception du noyau lui-même, dépendent de l'alignement du noyau. Si quelque chose ne va pas avec la capture de base, certaines ou toutes les autres captures ne fonctionneront pas. Un problème d’accrochage principal peut être résolu de deux manières.

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

    Sudo snap refresh core  
    
  2. Désinstallez le composant logiciel enfichable principal et tous ses packages, puis réinstallez-les.

    Sudo snap remove core snap-package1 snap-package2  
    Sudo snap install core snap-package1 snap-package2
    
1
karel