snap包如何处理共享依赖项?

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

  • 根据当前版本通过deb软件包安装的库的版本来捕捉? 它是否忽略已安装的库?
  • 不同的快照指定同一个库的相同版本? 它是否以某种方式进行重复数据删除?
  • 对很多快照可能会使用的核心库的更新? 想到OpenSSL是一个巨大的痛点。

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

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

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

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

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

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

至于第三种情况,它们有类似于你提到的运行时间:

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

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

还没有很好的文档描述框架,主要是因为它们似乎仍然在构建框架的边界。 以下是他们的邮件列表摘录,可能有助于澄清事情。

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

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

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

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

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

Snaps几乎包含了软件运行所需的一切。 我认为快照之间没有任何共享。

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

有关snap包装处理共享依赖关系的方式的进一步说明。

Snaps几乎包含了软件运行所需的一切。 我认为快照之间没有任何共享。

其中一个答案中的这个陈述是部分正确的,但是除核心卡扣外的所有已安装的快照包都依赖于两个包,其中一个是核心快照。

  1. snapd – 默认情况下在16.04及更高版本中安装,也可以在14.04中安装。

  2. core – (核心快照),在安装第一个安装的快照包时自动下载并安装

除核心之外的所有快照包都取决于核心捕捉。 如果核心快照有任何问题,那么部分或全部其他快照将无法正常工作。 核心弹簧的问题可以通过以下两种方式解决。

  1. 更新核心快照。 即使这不起作用,运行以​​下命令的结果将提供有助于解决问题的其他信息。

    sudo snap refresh core 
  2. 卸载核心捕捉和所有捕捉包,然后重新安装它们。

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