![是否可以构建一个同时支持 RPM 和 .deb 软件包的 Linux 发行版?](https://linux22.com/image/123497/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E6%9E%84%E5%BB%BA%E4%B8%80%E4%B8%AA%E5%90%8C%E6%97%B6%E6%94%AF%E6%8C%81%20RPM%20%E5%92%8C%20.deb%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%20Linux%20%E5%8F%91%E8%A1%8C%E7%89%88%EF%BC%9F.png)
我想知道理论上是否有可能构建一个既支持 rpm 又支持 debian 软件包的 Linux 发行版。
是否有支持两者的发行版?
如果不可能的话,这可能吗?
答案1
我不认为有任何发行版本身就支持两者,但它事实证明有一个正在开发中,基岩Linux(谢谢伊·马利诺夫斯基以获得信息)。在其他发行版上,您可以使用转换工具,例如alien
从一种格式转换为另一种格式。只要有足够的时间和精力,任何基于软件的东西都是可行的,因此有可能构建这样的发行版(但考虑到功能.deb
和.rpm
软件包之间的差异,相当困难)。
然而,所有这一切可能源于这样的想法:支持两种包格式将使生活变得更简单,因为您可以从任何地方安装包(好吧,任何提供.deb
或 的地方.rpm
)。从哲学上来说,这是有缺陷的。发行版是一组连贯的包;如果您想为该发行版提供软件,您确实需要专门针对它,其中包括使用其包格式(更重要的是,元数据)。原生支持多种包格式是没有意义的。
(在 Debian 世界中,包可以在不是其主要目标的变体上工作,因为包命名法相当同质,并且因为大多数发行版都适合继承树。在 RPM 世界中情况并非如此。在这两种情况下,混合和匹配是个坏主意。)
您应该将您的发行版视为构建所需系统的基础,遵守您的发行版的规则和生态系统,而不是混合其他发行版的内容。您需要更高级别的抽象来支持混合和匹配(或者更确切地说,提供跨发行版环境):Steam 运行时、Flatpak 等。
答案2
Bedrock Linux 就是这样做的。并不是说我已经这样做了,或者这是一个好主意,但它正在被完成。
答案3
不,这样的怪物不应该被建造。与 MacOS 应用程序包(通常包含应用程序在操作系统上运行所需的所有内容)不同,RPM 和 .deb 包几乎总是依赖于其他包,例如共享库。 Linux 包列出了需要存在的其他包,包管理器帮助强制执行这些要求。此外,Linux 发行版的完成方式也有所不同(例如/etc/network/interfaces.d
vs. /etc/sysconfig/network-scripts
)。
您甚至不应该在同一包格式系列中混合来自任意存储库的包。也就是说,在 CentOS 机器上安装 SuSE 软件包只是自找麻烦,即使它们都使用 RPM。我什至不会安装针对同一操作系统的不同版本的软件包(例如 16.04 系统上的 Ubuntu 14.04 软件包),除非我确切地知道自己在做什么。
因此,尝试在同一系统上支持 RPM 和 .deb 是不可能的。在某些绝望的情况下,您可以使用 转换特定的包alien
,但您应该花费大量精力来解决此类黑客攻击不可避免地出现的问题。
答案4
是的,这是可能的,但它破坏了分布。
包不仅仅是格式,可以轻松地从一种格式移植到另一种格式。
注意:软件包安装工具需要移植,因为人们希望拥有所有软件包、版本、依赖项、配置文件、安装前和安装后脚本的集中列表(如果您将一个软件包替换为另一个软件包,则在另一个软件包中)格式,您希望卸载脚本(旧格式)从新的软件包系统运行。
但发行版和包不仅仅是包的格式。例如,对于 Debian:我们希望将文件放在正确的位置,我们希望提供手册页,我们希望有一些通用的去恶魔化脚本,我们希望程序可以在多种架构、各种图形环境中运行,以便用户找到他自己也熟悉发行版中的新packages.packages。
在 Debian 中,我们希望用户可以轻松地(从源代码)构建软件包,以便可以自定义一些(对他来说)重要的软件包。这需要大量的基础设施,而大多数上游作者无法提供这些基础设施(在各种架构上自动构建和测试,并且不时完成)。而且 Debian 特有的是许可证的要求,因此更容易分叉软件包或发行版,而无需检查所有软件包。
最后,分发是由一致的包组成的,而不仅仅是由包组成。