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


29

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

是否有支持两者的发行版?

如果不是,那有可能吗?


4
除非我们考虑具有不可计算数量的依赖关系的软件包,否则我不认为从理论上讲如何安装它们是不可能的。
德米特里·格里戈里耶夫

2
如果您将依赖性解决方案留给用户,则有可能:)
rackandboneman 17-12-27

在这种情况下,alien如果使用@rackandboneman,则Slackware plus 可以将软件包转换为.tgz文件:)如果您使用源debs或rpms,LFS也可以这样做。
ivanivan

@DmitryGrigoryev IIRC,当您允许否定依赖性(冲突)时,依赖性解析是NP完整的。
user253751 '17

@immibis NP完全表示可计算。不可计算的意思,例如“如果该程序与libc5挂断,请安装libc6”。
德米特里·格里戈里耶夫

Answers:



42

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

但是,所有这些可能源于这样的想法:支持两种软件包格式将使生活更简单,因为您随后可以从任何地方(当然,在提供a .deb或的任何地方.rpm)安装软件包。从哲学上讲,这是有缺陷的。发行版是一组连贯的软件包。如果您要提供用于该发行版的软件,则确实需要专门针对它,包括使用其软件包格式(更重要的是元数据)。本机支持多种包格式没有意义。

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

您应该将您的发行版视为构建所需系统的基础,并遵守发行版的规则和生态系统,而不要将其他发行版中的内容混为一谈。您需要更高级别的抽象来支持混合和匹配(或更确切地说,是为了提供交叉分发环境):Steam运行时,Flatpak等。


10

不,不应该建造这样的怪物。与MacOS应用程序包不同,后者通常包括应用程序在操作系统上运行所需的所有内容,而RPM和.deb程序包几乎始终依赖于其他程序包,例如共享库。Linux软件包列出了需要提供的其他软件包,并且软件包管理器有助于实施这些要求。此外,Linux发行版的完成方式也有所不同(例如/etc/network/interfaces.dvs. /etc/sysconfig/network-scripts)。

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

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


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

1
甚至混用Debian发行版也是一个坏主意:wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian
stanri

然后是基于Debian的基于Ubuntu的Mint ... :-)
DevSolar

1
我不会说我认为这是一个好主意。同时,我看不到为什么这是一个可怕的想法。我认为这些问题可以克服-只是这样做并没有真正的回报。
emory

9

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

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


3

是的,这是可能的,但它破坏了分布。

软件包不仅是格式,而且可以很容易地从一种格式移植到另一种格式。

注意:需要移植软件包安装工具,因为一个软件包要集中列出所有软件包,版本,依赖项,配置文件,安装前和安装后脚本(如果将一个软件包替换为另一个软件包,则替换为另一个软件包)格式,则您希望卸载脚本(旧格式)是从新软件包系统运行的。

但是发行版和软件包不只是软件包的格式。例如,对于Debian:我们想要将文件放置在正确的位置,我们想要提供手册页,我们想要一些通用的取消脚本,我们希望该程序可以在许多体系结构,各种图形环境中运行,以便用户找到他自己也熟悉发行版中的新package.packages。

在Debian中,我们希望用户可以轻松地(从源代码)构建软件包,以便可以自定义一些重要的软件包(对他而言)。这需要大量基础结构,而大多数上游作者无法提供这些基础结构(在各种体系结构上进行自动构建和测试,并且会不时完成)。而且Debian特有的是许可证的要求,因此可以很容易地派生一个软件包或分发包,而无需检查所有软件包。

最后,分发是由一致的软件包进行的,而不仅仅是软件包。


0

是的,大多数基于.deb的发行版已经做到了,但是...

至少在Debian和相关系列上,您具有alien,这将允许您安装RPM软件包。

混合格式的软件包时,您会遇到同样的问题,而无论您使用哪种格式安装外部软件包,这些软件包都不适合与发行版一起使用-如果在基于DEB的系统上安装RPM,则RPM必须与您的系统兼容,就像在基于RPM的系统上安装RPM软件包一样,仅此而已。您可以做到,但您可能不想这么做。


0

是的,没有。deb和rpm只是格式。您可以同时支持两种格式,但毫无意义。包通常在发行版之间不具有可比性,尤其是不基于彼此的发行版之间。

如果所有发行版都具有相同的版本控制要求,则所有发行版都是软件包选择。您可以通过列出软件包来安装任何发行版。

但是发行版必须提供他们可以支持的软件。如果不维护使您的应用程序正常工作的库,而它本身却需要被其他东西取代的库,您如何解决此冲突?程序包管理器无法移植代码。可能有多个由不同发行版选择的继任者。

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.