snap包如何处理共享依赖?

mur*_*uru 36 dependencies snap

通过允许每个包拥有自己的依赖副本,快照打包格式最终将我们从依赖地狱中解放出来。我对它如何做到这一点的技术细节很感兴趣。它是如何处理的:

  • 快照取决于已通过当前版本的 deb 包安装的库版本?它是否忽略已安装的库?
  • 不同的快照指定相同库的相同版本?它是否以某种方式进行重复数据删除?
  • 对可能被大量快照使用的核心库的更新?OpenSSL 是一个巨大的痛点。

xdg-app 有一个叫做“运行时”的东西:

xdg-app 中的一个基本概念是运行时/应用程序拆分。每个应用程序都依赖于一个运行时,它提供应用程序所依赖的核心库。运行时通常由许多应用程序共享,但用户可以同时安装多个运行时。

似乎在 OpenSSL 的情况下,它将成为 xdg-apps 运行时的一部分,因此对 OpenSSL 的更新应该透明地影响使用相同运行时的所有 xdg-apps。

krz*_*iec 11

前两种情况以巧妙的方式处理。

讨论的有趣功能之一是对 Snap 包中内容的重复数据删除支持。快照将根据它们的文件哈希自动删除快照之间共享的公共文件的重复数据。将在文件系统层上进行重复数据删除,对快照下载进行重复数据删除(具有服务器支持),并且可能会从链接器中删除映射库的重复数据。重复数据删除是一个很大的工作项目,可能需要一段时间才能完全实施,但它仍然是一个有趣的目标。

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

至于第三种情况,它们与您提到的运行时类似:

一个 snappy 机器由三层组成:系统层,由 Canonical 提供,一个扩展供应商与 Canonical 合作生产的基础系统的框架层,以及一组由供应商直接提供的 snappy 应用程序。更新任何部分只是意味着使用只读图像的新版本。恢复到以前的版本同样容易。

来源:http : //www.ubuntu.com/cloud/snappy

目前还没有描述框架的好的文档,主要是因为它们似乎仍在确定框架的边界。这是他们邮件列表的摘录,可能有助于澄清事情。

我正在尝试使用 Frameworks 来通过软件和服务扩展 Snappy 基本系统,这些软件和服务很多 snap 需要但由于更新问题和大小,不应包含在任何和每个 snap 中。我对此的最佳示例是 openssl 二进制文件。许多快照需要它来生成和验证密钥和证书。

我用框架解决的另一个问题是访问系统范围的资源,尤其是端口。例如,Web 服务器框架将为其他 snapps 提供通过反向代理将其 Web 服务 api 和端点注入运行 Web 服务器的框架的方法。

我在 IRC 上被告知我有点滥用框架概念,但是这两个问题仍然经常出现在我的办公桌上。

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

  • 这些都不是巧妙的处理方式,只是据称是聪明的想法。例如,仍然没有关于第一个实际如何实现的官方文档,只有一篇指向谈话的 Phoronix 文章,顺便说一句,这是一个死链接。 (3认同)

Fre*_*ens 6

我不认为快照会检查已安装的依赖项。它只包含其所有依赖项和运行时(这就是 LibreOffice snap 大小为 287 MB 而 flatpak 约为 200 MB 的部分原因)。

Snap 几乎包含了软件运行所需的一切。我认为快照之间不会共享任何内容。

但是,当快照更新时,它只会下载新的依赖项,而不是整个快照。