快照程序包如何处理共享依赖关系?


30

通过允许每个包都有自己的依赖副本,snap打包格式最终使我们摆脱了依赖地狱。我对如何执行此操作的技术细节感兴趣。如何处理:

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

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

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

似乎对于OpenSSL,它将是xdg-apps中运行时的一部分,因此,对OpenSSL的更新应该透明地影响使用同一运行时的所有xdg-apps。

Answers:


9

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

讨论的有趣功能之一是对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二进制文件。许多快照都需要此来生成和验证密钥和证书。

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

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

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


1
要澄清的是,这些现在都不存在了,对吧?这些是计划,您可能打算在第一行中说“将被处理”而不是“被处理”?
大师

从技术上讲,两者都存在。我知道至少已经有了一个docker框架,并且已经有一些ubuntu-core附带的库链接,已安装的应用程序可以利用这些库。我也不知道他们走了多远。我只是在解释解决方案的技术细节。
犬儒主义者

1
这些不是巧妙地处理的方法,仅是所谓的聪明主意。例如,仍然没有关于第一个实际实施方式的官方文档,只有Phoronix文章指向演讲,这是一个无效的链接。
bviktor

3

我认为快照不会检查已经安装了哪些依赖项。它仅包括其所有依赖项和运行时(这部分是为什么LibreOffice snap为287 MB,flatpak为200MB的部分原因)。

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

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


2

为了进一步说明快照打包处理共享依赖项的方式。

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

答案之一中的这一说法部分正确,但是除核心快照外,所有已安装的快照软件包都依赖于两个软件包,其中一个是核心快照。

  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
    
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.