我想知道从理论上讲是否有可能构建一个既支持rpm又支持Debian软件包的Linux发行版。
是否有支持两者的发行版?
如果不是,那有可能吗?
alien
如果使用@rackandboneman,则Slackware plus 可以将软件包转换为.tgz文件:)如果您使用源debs或rpms,LFS也可以这样做。
我想知道从理论上讲是否有可能构建一个既支持rpm又支持Debian软件包的Linux发行版。
是否有支持两者的发行版?
如果不是,那有可能吗?
alien
如果使用@rackandboneman,则Slackware plus 可以将软件包转换为.tgz文件:)如果您使用源debs或rpms,LFS也可以这样做。
Answers:
基岩Linux做到了这一点。并不是说我已经做到了,或者说这是一个好主意,但是它正在完成。
我认为没有任何发行版可以同时支持这两种软件,但事实证明,有一个正在开发中的发行版,即Bedrock Linux(感谢iMalinowski提供的信息)。在其他发行版中,您可以使用转换工具,例如alien
从一种格式转换为另一种格式。只要有足够的时间和精力,任何基于软件的方法都是可行的,因此有可能构建这样的发行版(但是鉴于.deb
和.rpm
软件包功能之间的差异,这非常困难)。
但是,所有这些可能源于这样的想法:支持两种软件包格式将使生活更简单,因为您随后可以从任何地方(当然,在提供a .deb
或的任何地方.rpm
)安装软件包。从哲学上讲,这是有缺陷的。发行版是一组连贯的软件包。如果您要提供用于该发行版的软件,则确实需要专门针对它,包括使用其软件包格式(更重要的是元数据)。本机支持多种包格式没有意义。
(在Debian世界中,软件包可以在不是主要目标的变体上工作,因为软件包的命名法是同质的,并且因为大多数发行版都适合于继承树。在RPM世界中并非如此。在两种情况下,混合和匹配是个坏主意。)
您应该将您的发行版视为构建所需系统的基础,并遵守发行版的规则和生态系统,而不要将其他发行版中的内容混为一谈。您需要更高级别的抽象来支持混合和匹配(或更确切地说,是为了提供交叉分发环境):Steam运行时,Flatpak等。
不,不应该建造这样的怪物。与MacOS应用程序包不同,后者通常包括应用程序在操作系统上运行所需的所有内容,而RPM和.deb程序包几乎始终依赖于其他程序包,例如共享库。Linux软件包列出了需要提供的其他软件包,并且软件包管理器有助于实施这些要求。此外,Linux发行版的完成方式也有所不同(例如/etc/network/interfaces.d
vs. /etc/sysconfig/network-scripts
)。
您甚至不应该混用同一软件包格式系列中任意存储库中的软件包。就是说,即使它们都使用RPM,在CentOS机器上安装SuSE软件包也只是自找麻烦。除非我确切知道我在做什么,否则我什至不会安装用于同一操作系统的其他版本的软件包(例如,在16.04系统上的Ubuntu 14.04软件包)。
因此,试图在同一系统上同时支持RPM和.deb是不可能的。在某些绝望的情况下,您可以使用来转换特定的程序包alien
,但是您应该期望付出大量的精力来解决由此类黑客不可避免地引起的问题。
是的,这是可能的,但它破坏了分布。
软件包不仅是格式,而且可以很容易地从一种格式移植到另一种格式。
注意:需要移植软件包安装工具,因为一个软件包要集中列出所有软件包,版本,依赖项,配置文件,安装前和安装后脚本(如果将一个软件包替换为另一个软件包,则替换为另一个软件包)格式,则您希望卸载脚本(旧格式)是从新软件包系统运行的。
但是发行版和软件包不只是软件包的格式。例如,对于Debian:我们想要将文件放置在正确的位置,我们想要提供手册页,我们想要一些通用的取消脚本,我们希望该程序可以在许多体系结构,各种图形环境中运行,以便用户找到他自己也熟悉发行版中的新package.packages。
在Debian中,我们希望用户可以轻松地(从源代码)构建软件包,以便可以自定义一些重要的软件包(对他而言)。这需要大量基础结构,而大多数上游作者无法提供这些基础结构(在各种体系结构上进行自动构建和测试,并且会不时完成)。而且Debian特有的是许可证的要求,因此可以很容易地派生一个软件包或分发包,而无需检查所有软件包。
最后,分发是由一致的软件包进行的,而不仅仅是软件包。