是否可以构建同时支持 RPM 和 .deb 包的 Linux 发行版?

alk*_*ary 29 linux rpm dpkg package-management

我想知道理论上是否有可能构建一个既支持 rpm 又支持 debian 包的 Linux 发行版。

是否有任何发行版同时支持两者?

如果不是,它甚至可能吗?

Ste*_*itt 42

我不认为有任何发行版同时支持两者,但事实证明有一个正在开发中,Bedrock Linux(感谢iMalinowski提供的信息)。在其他发行版上,您可以使用转换工具,例如alien从一种格式转换为另一种格式。只要有足够的时间和精力,任何基于软件的东西都是可行的,因此可以构建这样的发行版(但考虑到.deb.rpm包之间的功能差异,相当困难)。

然而,这一切可能源于支持两种包格式会使生活更简单的想法,因为您可以从任何地方安装包(好吧,任何提供.deb或 的地方.rpm)。从哲学上讲,这是有缺陷的。发行版是一组连贯的包;如果你想为那个发行版提供软件,你真的需要专门针对它,包括使用它的包格式(更重要的是,元数据)。原生支持多种包格式是没有意义的。

(在 Debian 世界中,包可以在不是其主要目标的变体上工作,因为包命名法相当一致,并且因为大多数发行版都适合继承树。这在 RPM 世界中并非如此。在这两种情况下,混合和匹配是个坏主意。)

您应该将您的发行版视为构建所需系统的基础,遵守发行版的规则和生态系统,不要混入其他发行版中的东西。您需要更高级别的抽象来支持混合和匹配(或者更确切地说,提供跨分发环境):Steam 运行时、Flatpak 等。


Hen*_*ski 27

基岩 Linux 做到了这一点。并不是说我已经这样做了,或者说这是一个好主意,但它正在完成。


200*_*ess 10

不,这样的怪物不应该被建造。与 MacOS 应用程序包不同,它通常包括应用程序在操作系统上运行所需的一切,RPM 和 .deb 包几乎总是依赖于其他包,例如共享库。Linux 包列出了需要存在的其他包,包管理器有助于强制执行这些要求。此外,Linux 发行版在处理事情的方式上有所不同(例如/etc/network/interfaces.d/etc/sysconfig/network-scripts)。

您甚至不应该在同一包格式系列中混合来自任意存储库的包。也就是说,在 CentOS 机器上安装 SuSE 软件包只是自找麻烦,即使它们都使用 RPM。除非我确切地知道我在做什么,否则我什至不会安装用于同一操作系统的不同版本的软件包(例如,16.04 系统上的 Ubuntu 14.04 软件包)。

因此,尝试在同一系统上同时支持 RPM 和 .deb 是不可能的。在某些绝望的情况下,您可以使用 转换特定的包alien,但您应该期望投入大量精力来解决此类黑客不可避免地出现的问题。

  • 即使对于来自同一家族的发行版,混合包也可能是一个坏主意。例如,Debian 和 Ubuntu 都是基于 .deb 的,但 Ubuntu 做出了一些与 Debian 不同的设计决策,因此在 Debian 中使用 Ubuntu 软件包可能并不总是有效。 (3认同)

ilk*_*chu 9

嗯,有alien人页),可以相互转换rpmdeb等等,但我会假设实际问题来自处理依赖(对于不同的软件包名称),并配置文件位置。

当然,如果您的意思是这两种类型的包都可以来自发行版本身,那可能可以解决,但是为什么有人会这样做......(而且您仍然需要将所有内容转换为一种或另一种,因为我认为不dpkg知道如何读取 的数据库,rpm反之亦然。)