为什么 Ubuntu 转向 Snap 软件包?

Vis*_*v K 210 package-management apt ubuntu-core snap

为什么 Ubuntu 转储.deb软件包并转向.snap软件包?

至少现在他们正在.deb为正态分布保留包。.deb已经是最流行的包装格式了。

给出了关于 Snap 包格式是什么的想法。但是现有的 deb 包会发生什么?迁移到 Snap 有什么明显的优势吗?值得痛苦吗?

Mic*_*ell 237

Snap试图解决 Linux 作为桌面操作系统的一个基本问题:软件可用性和软件分发。然而,Snap并不打算完全取代 debs。Snaps 和 Debs 相互配合。

我是 Linux 爱好者,也是 Linux 应用程序的项目经理。虽然我喜欢整个 Linux 系统,但我无法忍受软件包分发的当前状态。像 Snaps 这样的通用应用格式旨在解决这个基本问题。

在 Linux 中,包是专门为单个发行版的单个版本构建的。通过大量调整,可以制作一个.deb可以在所有基于 Debian 的系统上运行的软件包,但这很复杂并且限制了开发人员。由于依赖项的版本锁定,它有时也不实用。

如果我为 Ubuntu 20.04 创建一个 deb 包,它只能在那个版本上工作。我还必须为 16.04、18.04、20.10 等制作不同的包。我已经有做四个软件包为Ubuntu。我还需要为每个 Debian 版本、每个 Fedora 版本和每个 openSUSE 版本制作一个。RPM 在这方面更灵活,但锁定的依赖问题仍然会成为障碍。

这意味着如果我想发布我的应用程序的新版本,我必须创建 20 多个包来覆盖大多数 Linux 发行版,但这仍然不会覆盖每个发行版。第二种可能性是等待发行版维护者将您的包添加到发行版中,但这通常需要花费大量时间。此外,分发维护人员决定他们的用户获得哪个版本,而不是软件开发人员。

使用 Snap,单个包在支持 snap的每个发行版的每个版本上运行。有关支持它的许多发行版的列表,请参阅安装 snapd

此外,使用 Snap,开发人员发布和维护包,而不是分发维护者。因此,作为开发人员,我可以向所有用户发布新版本,而无需等待其他任何人。

本质上,我讨厌 Linux 包分发的一切都由 Snap 解决了。尽管重要的是要注意这些核心问题也正在由Flatpaks解决,并且在一定程度上由AppImages 解决。关于哪种格式更好的讨论引起了激烈的争论,而且对话的时间比本答复的意义要长得多。现在,我会说我可以运行任何通用格式,因为它们的工作方式都不同,因此不会相互冲突,从而可以同时运行所有 3 个包和传统包。

TL; 博士

Linux 包分发对开发人员和用户来说都是糟糕的。Snaps、Flatpaks 和 AppImages 旨在解决基于 Linux 的系统的这个基本问题。


这个问题实际上是关于为什么要搬家,但如果有人有兴趣了解更多关于 Snaps 是什么以及它们是如何工作的。我创建了这个视频来深入解释结构。

  • 天哪,你说得这么难,除非没有人支持这么多版本的 Fedora、Debian 或 Ubuntu。到 16.04 结束时,15.04 已停产。到 Fedora 23 发布时,F21 只剩下不到一个月的时间了,足以让人们跳过一个版本。并不是说这很重要。一旦你编写了基本的 RPM 规范文件或基本的 Debian 包,其他发行版都是经过调整的版本,然后为每个新版本构建它们只是 Jenkins 的工作。 (23认同)
  • Ubuntu 包是为许多版本制作的:14.04、15.10、16.04 和一些继续支持旧的 LTS,如 12.04 仍然受支持。|| Fedora 没有 LTS,所以支持的版本更少,但仍然至少有 2 个版本,可能支持 3 个版本。|| 什么听起来更好?A. 为一个发行版制作同一应用程序的每个版本的多个包,并为多个发行版执行此操作。或者 B. 为您的应用程序的每个版本制作一个快照,并且适用于任何发行版和所述发行版的任何版本。是的,我在这种情况下投票支持快照。 (18认同)
  • @konung Snaps 不是容器。例如,很多人将它们与 Docker 进行比较,但 Docker 是真正的容器,而 Snaps 则不是。快照类似于容器,但它们不是完整的容器,因为它们允许限制之外的异常。例如,设置/配置/数据内容存储在 /home 文件夹内的 Snap 之外。通过这种方式,您可以拥有任意数量的快照版本,所有版本都可以共享相同的数据/配置。 (8认同)
  • @ user447607 您误解了 Snaps 和 Snappy 是什么。不会有一堆冗余,会有运行时,并且会有选项让快照依赖于其他快照以节省空间。事实上,这已经是可能的。Snappy 是一个不同的包管理系统,它处理快照,而 apt 仍然与 DEB 相关。Snaps 不会取代 DEB,而是增强了 DEB,因此您可以获得涵盖这两种方法的混合方法。事实上,Snaps 可以通过现有的 DEB 自动生成。 (7认同)
  • @konung Docker 是纯粹的容器化,而 Snaps 具有容器化功能以及与系统核心组件的集成。例如,Docker 要求容器中包含所有内容才能使用它。然而,Snaps 只需要包含必需品,然后它就可以在 Snap 之外使用其他东西。Snaps 也有更好的基础设施,因为 Docker 没有真正的更新机制,但 Snaps 使用类似于 APT for Debian 的包管理系统。我建议查看我在原始帖子中链接的视频。我打算尽快制作更新版本。 (4认同)
  • A. 多个程序包,因为有了选项 B,我现在负责跟踪 snap 中所有组件的安全更新,并在每次出现安全更新时更新 snap。让发行版担心。|| 当发行版的新版本发布时,没有义务更新以前的版本。假设 Fedora 23 有我的包的 1.0 版和 Fedora 24 1.1。Fedora 23 可能永远不会看到 1.0 的更新,除非我向后移植一个关键的错误修复来制作 1.0.1,在这种情况下,我仍然在 git 的 1.0 分支上保留原始规范文件。 (3认同)
  • @Elgs Qian Chen 我并不是建议您不要使用它。我认为你应该使用任何你想要的。我只是更喜欢澄清有关 Arch 的声明,这样人们就不会随意找到线程说它有多棒而不提及警告。它有很多优点,但也有缺点。我实际上是 Arch 衍生产品的贡献者,所以这些年来我看到了很多起起落落。:) (3认同)

小智 48

这很简单。Snappy 包包含所有必需的文件,其中 .deb 包依赖于其他包。

不利的一面是 snappy 更大,因为它包含所有文件。但最大的优点是你不会遇到其他包的问题,​​如果你删除这个包,其他包不会受到缺少依赖项的影响。

  • 所以本质上他们正在走 Windows 的道路——讽刺的是,这在过去被 Linux 人嘲笑。 (39认同)
  • 这也意味着安全噩梦。哦,请证明我是错的...因为正确会如此可怕。 (14认同)
  • 嘿@JürgenA.Erhard,据我所知,每个包都有自己的库,例如密码学,所以不是验证一个(即自编译),你必须基本上单独处理每个包,这就是你的意思“安全噩梦”? (2认同)

May*_*hux 8

Snappy Personal,他们的包管理/更新新方法,旨在更快、更可靠、事务性和更强的安全性。

Snappy 至少用于他们的桌面旋转——计划是将 Ubuntu 的 Desktop-Next 旋转从 .deb 切换到 Snappy Personal。

.deb 仍然存在,普通用户在将 .deb 转换为 snappy 时仍然可以定期使用它。

Snappy 将用于统一现在使用 snappy 作为其核心 Os 的 ioT 中的包管理概念。此外,snappy 提供了一种更好的更新方式,并在更新/升级时摆脱问题,因为它使用整个图像的概念,这意味着更新将只是一个片段,因此不会失败

阅读这些文章了解更多信息:

http://www.webupd8.org/2015/04/ubuntu-desktop-to-eventually-switch-to.html

http://www.itworld.com/article/2914850/linux/is-ubuntu-moving-away-from-deb-packages-here-is-the-complete-story.html

还有一个来自 ubuntu 的 QA 视频,可以回答很多问题 https://youtu.be/lHO8j8uo5Z4

  • 为什么他们不能制作具有向后兼容性的 .deb 版本 2 包?为什么要在 linux 社区分裂?目前的计划是慢慢迁移到 Snappy,除非它完全失败。 (10认同)
  • @Maythux https://xkcd.com/927/ (5认同)
  • 在 Linux 中打包的方法多种多样(这已经导致第三方程序出现问题)已经够糟糕的了,另一种只会造成更大的混乱:-/ (3认同)

ser*_*ens 5

如果您正在考虑创建一些供他人使用的东西,即产品,请考虑立即迁移到活泼的 Ubuntu Core

该软件以快照形式交付,鉴于其特性,我们可以确信安装和升级将按照原始创建者的意图在每个系统上运行。其他特征是安全性,例如独立执行和干净的接口以与系统通信并配置已安装的快照。

为了实现这一点,snap与 debian 包有很大不同:

  • snaps 存在于一个独立的系统确定的位置,而 debian 包可以将文件散布在整个地方。
  • 快照没有维护者脚本。

回到使用不使用的原始问题,如果您打算用 Ubuntu Core 替换您的桌面,我建议您坚持使用常规的 Ubuntu 桌面。Ubuntu Core,我个人喜欢称其为nothing distro,因为它本身什么都不是,但它提供了一个非常好的构建块来提供某些东西,这就是为什么它现在在物联网中很受欢迎。

  • 我正在 Windows 中安装 VLC,它安装了占用空间所需的所有软件包。在 linux 中,我们只得到我们没有的包。它在更新和硬盘使用方面非常方便。 (6认同)
  • 换句话说,它就像 Windows 所做的一样? (5认同)
  • 这是一个广泛的问题。Windows 有什么特别的作用? (2认同)
  • 类似,是的。与在手机上安装“apk”没有什么不同。应用程序可以随其认为合适的依赖项而发展。不过,有一些方法可以将其拆分,例如使用“框架”快照,但这需要严格的安全审查。与 Windows 的不同之处在于,这里没有 *安装程序 * 可能能够登陆他们想要的任何地方。 (2认同)