alkabary Asked: 2017-12-12 11:16:03 +0800 CST2017-12-12 11:16:03 +0800 CST 2017-12-12 11:16:03 +0800 CST 是否可以构建同时支持 RPM 和 .deb 软件包的 Linux 发行版? 772 我想知道理论上是否可以构建一个可以同时支持 rpm 和 debian 软件包的 Linux 发行版。 是否有任何发行版支持两者? 如果没有,它甚至可能吗? linux package-management 7 个回答 Voted Stephen Kitt 2017-12-12T11:37:35+08:002017-12-12T11:37:35+08:00 我不认为有任何发行版可以本地支持这两者,但事实证明有一个正在开发中,Bedrock Linux(感谢iMalinowski提供的信息)。在其他发行版上,您可以使用转换工具,例如alien从一种格式转换为另一种格式。只要有足够的时间和精力,任何基于软件的东西都是可行的,因此有可能构建这样的发行版(但考虑到.deb和.rpm软件包之间的功能差异,相当困难)。 然而,所有这一切可能源于支持这两种包格式将使生活更简单的想法,因为您可以从任何地方(嗯,任何提供.deb或的地方.rpm)安装包。从哲学上讲,这是有缺陷的。发行版是一组连贯的软件包;如果你想为那个发行版提供软件,你真的需要专门针对它,包括使用它的包格式(更重要的是,元数据)。原生支持多种包格式是没有意义的。 (在 Debian 世界中,包可以在不是其主要目标的变体上工作,因为包命名相当同质,而且大多数发行版都适合继承树。在 RPM 世界中并非如此。在这两种情况下混合和匹配是个坏主意。) 您应该将您的发行版视为构建所需系统的基础,遵守发行版的规则和生态系统,而不是从其他发行版中混入内容。您需要更高级别的抽象来支持混合和匹配(或者更确切地说,提供交叉分发环境):Steam 运行时、Flatpak 等。 Best Answer Henry Malinowski 2017-12-12T19:41:53+08:002017-12-12T19:41:53+08:00 Bedrock Linux 就是这样做的。不是说我已经这样做了,或者这是一个好主意,但它正在完成。 200_success 2017-12-12T16:52:18+08:002017-12-12T16:52:18+08:00 不,不应该建造这样的怪物。与 MacOS 应用程序包不同,它通常包含应用程序在操作系统上运行所需的所有内容,RPM 和 .deb 包几乎总是依赖于其他包,例如共享库。Linux 包列出了需要存在的其他包,包管理器帮助强制执行这些要求。此外,Linux 发行版的处理方式不同(例如/etc/network/interfaces.dvs. /etc/sysconfig/network-scripts)。 您甚至不应该在同一个包格式系列中混合来自任意存储库的包。也就是说,在 CentOS 机器上安装 SuSE 软件包只是自找麻烦,即使它们都使用 RPM。除非我确切地知道自己在做什么,否则我什至不会安装用于同一操作系统的不同版本的软件包(例如 16.04 系统上的 Ubuntu 14.04 软件包)。 因此,尝试在同一系统上同时支持 RPM 和 .deb 是不可能的。在某些绝望的情况下,您可以使用alien. ilkkachu 2017-12-12T11:29:35+08:002017-12-12T11:29:35+08:00 好吧,有alien(手册页),可以在等之间进行转换rpm,deb但我认为实际问题来自处理依赖项(软件的不同包名称)和配置文件的位置。 当然,如果您的意思是这两种类型的软件包都可能来自发行版本身,那可能会解决,但是为什么有人会这样做……(而且您仍然需要将所有内容转换为其中一种,因为我不认为dpkg知道如何读取数据库,rpm反之亦然。) Giacomo Catenazzi 2017-12-14T00:33:13+08:002017-12-14T00:33:13+08:00 是的,这是可能的,但它破坏了分布。 包不仅仅是一种格式,它可以很容易地从一种格式移植到另一种格式。 注意:需要移植包安装工具,因为希望有一个所有包、版本、依赖项、配置文件、安装前和安装后脚本的集中列表(如果您将一个包替换为另一个包,则在另一个包中)格式,您希望卸载脚本(旧格式)从新的软件包系统运行。 但是发行版和软件包不仅仅是一种格式的软件包。例如对于 Debian:我们希望将文件放在正确的位置,我们希望提供手册页,我们希望有一些通用的去魔化脚本,我们希望程序在多种架构、各种图形环境中运行,以便用户找到他自己也熟悉新的 packages.packages 发行版。 在 Debian 中,我们希望用户(从源代码)可以轻松构建软件包,以便可以自定义一些重要的(对他而言)软件包。这需要很多基础设施,大多数上游作者无法提供(在各种架构上自动构建和测试,并且不时完成)。并且 Debian 特定于许可证的要求,因此更容易分叉一个包或发行版,而无需检查所有包。 最后,分发是由一致的包组成的,而不仅仅是包。 Clearer 2017-12-14T00:42:20+08:002017-12-14T00:42:20+08:00 是的,大多数基于 .deb 的发行版已经做到了,但是...... 至少在 Debian 和相关系列上,您有alien,这将允许您安装 RPM 包。 无论格式如何,当您在安装外部软件包时混合不适合与您的发行版一起使用的软件包时,您都会遇到同样的问题——如果您在基于 DEB 的系统上安装 RPM,则该 RPM 必须与您的系统兼容,就像您在基于 RPM 的系统上安装 RPM 包一样,但就是这样。你可以这样做,但你可能不想这样做。 jdwolf 2017-12-31T17:42:07+08:002017-12-31T17:42:07+08:00 是和不是。deb 和 rpm 只是格式。您可以支持这两种格式,但它毫无意义。软件包在发行版之间通常不具有可比性,尤其是不基于彼此的发行版。 如果所有发行版都具有相同的版本控制要求,那么所有发行版都将是一个包选择。您可以通过列出软件包来安装任何发行版。 但是发行版必须提供他们可以支持的软件。如果使您的应用程序工作的库没有得到维护,并且它本身需要一个已被其他东西取代的库,您如何解决此冲突?包管理器不能移植代码。可能有多个由不同分布选择的后继。
我不认为有任何发行版可以本地支持这两者,但事实证明有一个正在开发中,Bedrock Linux(感谢iMalinowski提供的信息)。在其他发行版上,您可以使用转换工具,例如
alien
从一种格式转换为另一种格式。只要有足够的时间和精力,任何基于软件的东西都是可行的,因此有可能构建这样的发行版(但考虑到.deb
和.rpm
软件包之间的功能差异,相当困难)。然而,所有这一切可能源于支持这两种包格式将使生活更简单的想法,因为您可以从任何地方(嗯,任何提供
.deb
或的地方.rpm
)安装包。从哲学上讲,这是有缺陷的。发行版是一组连贯的软件包;如果你想为那个发行版提供软件,你真的需要专门针对它,包括使用它的包格式(更重要的是,元数据)。原生支持多种包格式是没有意义的。(在 Debian 世界中,包可以在不是其主要目标的变体上工作,因为包命名相当同质,而且大多数发行版都适合继承树。在 RPM 世界中并非如此。在这两种情况下混合和匹配是个坏主意。)
您应该将您的发行版视为构建所需系统的基础,遵守发行版的规则和生态系统,而不是从其他发行版中混入内容。您需要更高级别的抽象来支持混合和匹配(或者更确切地说,提供交叉分发环境):Steam 运行时、Flatpak 等。
Bedrock Linux 就是这样做的。不是说我已经这样做了,或者这是一个好主意,但它正在完成。
不,不应该建造这样的怪物。与 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
.好吧,有
alien
(手册页),可以在等之间进行转换rpm
,deb
但我认为实际问题来自处理依赖项(软件的不同包名称)和配置文件的位置。当然,如果您的意思是这两种类型的软件包都可能来自发行版本身,那可能会解决,但是为什么有人会这样做……(而且您仍然需要将所有内容转换为其中一种,因为我不认为
dpkg
知道如何读取数据库,rpm
反之亦然。)是的,这是可能的,但它破坏了分布。
包不仅仅是一种格式,它可以很容易地从一种格式移植到另一种格式。
注意:需要移植包安装工具,因为希望有一个所有包、版本、依赖项、配置文件、安装前和安装后脚本的集中列表(如果您将一个包替换为另一个包,则在另一个包中)格式,您希望卸载脚本(旧格式)从新的软件包系统运行。
但是发行版和软件包不仅仅是一种格式的软件包。例如对于 Debian:我们希望将文件放在正确的位置,我们希望提供手册页,我们希望有一些通用的去魔化脚本,我们希望程序在多种架构、各种图形环境中运行,以便用户找到他自己也熟悉新的 packages.packages 发行版。
在 Debian 中,我们希望用户(从源代码)可以轻松构建软件包,以便可以自定义一些重要的(对他而言)软件包。这需要很多基础设施,大多数上游作者无法提供(在各种架构上自动构建和测试,并且不时完成)。并且 Debian 特定于许可证的要求,因此更容易分叉一个包或发行版,而无需检查所有包。
最后,分发是由一致的包组成的,而不仅仅是包。
是的,大多数基于 .deb 的发行版已经做到了,但是......
至少在 Debian 和相关系列上,您有
alien
,这将允许您安装 RPM 包。无论格式如何,当您在安装外部软件包时混合不适合与您的发行版一起使用的软件包时,您都会遇到同样的问题——如果您在基于 DEB 的系统上安装 RPM,则该 RPM 必须与您的系统兼容,就像您在基于 RPM 的系统上安装 RPM 包一样,但就是这样。你可以这样做,但你可能不想这样做。
是和不是。deb 和 rpm 只是格式。您可以支持这两种格式,但它毫无意义。软件包在发行版之间通常不具有可比性,尤其是不基于彼此的发行版。
如果所有发行版都具有相同的版本控制要求,那么所有发行版都将是一个包选择。您可以通过列出软件包来安装任何发行版。
但是发行版必须提供他们可以支持的软件。如果使您的应用程序工作的库没有得到维护,并且它本身需要一个已被其他东西取代的库,您如何解决此冲突?包管理器不能移植代码。可能有多个由不同分布选择的后继。