AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 410269
Accepted
alkabary
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 7 个回答
  • 6374 Views

7 个回答

  • Voted
  1. 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 等。

    • 43
  2. Best Answer
    Henry Malinowski
    2017-12-12T19:41:53+08:002017-12-12T19:41:53+08:00

    Bedrock Linux 就是这样做的。不是说我已经这样做了,或者这是一个好主意,但它正在完成。

    • 27
  3. 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.

    • 10
  4. ilkkachu
    2017-12-12T11:29:35+08:002017-12-12T11:29:35+08:00

    好吧,有alien(手册页),可以在等之间进行转换rpm,deb但我认为实际问题来自处理依赖项(软件的不同包名称)和配置文件的位置。

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

    • 9
  5. Giacomo Catenazzi
    2017-12-14T00:33:13+08:002017-12-14T00:33:13+08:00

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

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

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

    但是发行版和软件包不仅仅是一种格式的软件包。例如对于 Debian:我们希望将文件放在正确的位置,我们希望提供手册页,我们希望有一些通用的去魔化脚本,我们希望程序在多种架构、各种图形环境中运行,以便用户找到他自己也熟悉新的 packages.packages 发行版。

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

    最后,分发是由一致的包组成的,而不仅仅是包。

    • 3
  6. Clearer
    2017-12-14T00:42:20+08:002017-12-14T00:42:20+08:00

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

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

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

    • 0
  7. jdwolf
    2017-12-31T17:42:07+08:002017-12-31T17:42:07+08:00

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

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

    但是发行版必须提供他们可以支持的软件。如果使您的应用程序工作的库没有得到维护,并且它本身需要一个已被其他东西取代的库,您如何解决此冲突?包管理器不能移植代码。可能有多个由不同分布选择的后继。

    • 0

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve