为什么不同的 Linux 发行版需要打补丁?

sip*_*phr 6 linux packaging package-management distributions

我知道不同的发行版会修补各自存储库中可用的软件包,但我一直不明白为什么需要这样做。如果有人能解释或指向我在线的相关文档,我将不胜感激。谢谢。

Sha*_*dur 17

尝试了几次,但我想我明白你现在要问什么了。

分发版在打包之前修补给定软件有多种可能的原因。我会尝试给出一个非排他性列表;我确定还有其他可能的原因。

出于本次讨论的目的,“上游”是指来自软件官方开发人员的原始源代码

  1. 无论出于何种原因,上游尚未(或尚未)纳入其主分支的补丁。通常是因为该包的发行版的包维护者认为这些补丁是值得的,或者因为需要它们来保持发行版的连续性(假设你有一个网络服务器,并且在对php你一直依赖的几个功能进行例行更新之后不再工作,或者无法读取旧样式的配置文件)

  2. 发行版倾向于喜欢它们的文件系统层次结构的标准化模式/etc/;每个软件开发人员对于什么是适当的标准可能有也可能没有他们自己的想法。因此,分发包维护者倾向于做的第一件事就是修补构建脚本以配置和期望以与分发的其余部分相对应的层次结构模式的所述配置文件。

  3. 继续关于配置的话题,第一个“补丁”往往是一组默认配置文件,可以说是“开箱即用”的其余发行版,允许最终用户立即开始使用安装后,而不必手动整理工作配置。

这只是我的头顶。可能还有其他人,但我希望这能给你一些想法。

  • @siphr 发行版对程序应该是什么的看法并不比其他人的意见更多或更少。这是开源的核心部分——您可以更改程序。发行版维护人员通常会避免进行巨大的更改(因为它需要大量工作,并且会继续进行,因为您需要重新集成每个版本),但有时会发生。很多时候都是为了小事。例如,下一个上游版本不会持续数月;您现在需要修复一个重大错误,因为您的发行版即将发布。 (5认同)
  • @siphr 此外,发行版维护者通常与原始作者/当前上游维护者合作。如果它变成了一种对抗性的关系,那么事情就会变得非常糟糕(除非修复,否则很可能会出现分叉)。 (5认同)
  • @siphr 那将是 Linux From Scratch,是的,在我看来,LFS 恰好有两件事:第一,对构建、构建以及最重要的是 *维护 * 的所有协调和努力深表感谢生产稳定的分布。第二,理解*为什么*没有人会在生产系统上使用 LFS。 (4认同)
  • @siphr 在大多数发行版中,您可以安装最少的一组包,然后从上游源构建其余的包。但是,需要做很多工作,因为集成是发行补丁的一个重要原因。 (3认同)
  • @siphr 坦率地说,LFS 就像一辆你自己用 3D 打印组件和从互联网下载的说明制造的自制汽车——一个闪亮的玩具,你可以修补并自豪地向所有人展示你*可以*做到这一点必须,但任何时候你想完成严肃的工作,你最好使用*真正的*车辆。 (2认同)

Edh*_*dil 10

在我的脑海中,除了@Shadur 的回答:

  • 一些发行版不鼓励使用另一个包提供的嵌入库或文件。例如,很多软件都包含嵌入式 JQuery,但 Debian 有一个 libjs-jquery 包提供它。
  • 通常上游会混合安全补丁和向后不兼容的更改,例如依赖于较新的库。为了防止对整个发行版进行大量更改以获得更正确的证书检查,包维护者可能会选择只选择安全补丁。
  • 上游软件可能会与其他软件发生冲突,例如它们可能提供具有相同路径但内容不同的文件。为了解决这个冲突,可能需要补丁到别处寻找文件。
  • 上游通常满足于将某些内容手动添加到其他软件配置文件的说明,这在安装和卸载软件包时容易出错,因此发行版可能更喜欢使用 *.d 目录中的片段文件。
  • 上游的某些部分可能与发行版的许可证不兼容,因此软件包维护者可能会决定修补有问题的部分。
  • 上游使用假设特定其他软件(例如 Apache)的路径,但维护者希望它支持通用 Web 服务器。
  • 有时,上游开发人员不再通信并且软件位旋转,因此需要一个补丁来保持它的工作。


Fab*_*bby 5

有几个原因:

  1. 没有完美的软件
  2. Linux 上没有通用打包软件这样的东西:

  3. 因为分叉

  4. 由于对圣经 的不同解释FHS
  5. 因为自负


Fah*_*tha 5

至少对于 Debian 来说,一个常见的原因是软件包符合 Debian 政策。毫无疑问,其他发行版也有类似的标准,他们希望他们的包能够满足。由于 Debian 政策是一个严格的大师,这些补丁可能采取多种形式并服务于多种目的,包括:

  • 修改构建系统以使其更加健全或更灵活。有时,构建系统不够灵活,无法处理 Debian 软件包的构建。或者,更改构建系统,以便将文件放置在符合策略和/或 FHS 的位置。

  • 添加手册页(Debian 政策要求每个软件包都有一个手册页)。

  • 删除具有非免费许可证或没有明确许可证的文件。

  • 修补软件(可能包括构建系统),以便它使用该版本的 Debian 中实际可用的软件包进行构建。

  • 特定于架构的修复。Debian 构建在多种架构之上,其中一些软件的编写者可能从未尝试过在其中使用它。