为什么 ubuntu 源与原始源不同?

Woj*_* B. 5 package-management packaging install-from-source

当我做:

wget ftp://ftp.openbsd.com/pub/OpenBSD/OpenSSH/portable/openssh-5.8p1.tar.gz
wget ftp://ftp.openbsd.com/pub/OpenBSD/OpenSSH/portable/openssh-5.8p1.tar.gz.asc
gpg openssh-5.8p1.tar.gz.asc 
tar -zxvf openssh-5.8p1.tar.gz
mv openssh-5.8p1 openssh-5.8p1_downloaded
apt-get source openssh-server
diff -r openssh-5.8p1 openssh-5.8p1_downloaded/ | wc -l
Run Code Online (Sandbox Code Playgroud)

我得到了很多差异(wc -l 返回 3000 行)。这是为什么?

Raf*_*lak 8

管理软件包并将应用程序导入 Ubuntu 存储库的 Ubuntu 开发人员保留修改这些应用程序的权利。他们被允许这样做,因为几乎所有的软件都是免费许可的。他们不会试图掩盖它,这些变化对任何人都是可见的。事实上,他们甚至更改包的版本以表明它与原始版本不同。apt-get source您执行的命令将您下载openssh-server到版本5.8p1-7ubuntu1 中。注意后缀。(您可以使用任何包管理器检查版本)。该方案orig_version-XubuntuY在所有包中都非常普遍。X 编号表示Debian 中修订号,Y 代表Ubuntu 中的修订号也许您知道这一点,但作为对可能阅读此答案的每个人的旁注:大多数 ubuntu 软件包都是从 Debian 存储库复制的 - 因此,如果 Debian 开发人员发布 5.8p1 版 7 次,则每次将其包含更改时将其发布到存储库,而且,这是 Ubuntu 开发人员第一次发布更改后的版本,最终版本号将是 5.8p1-7ubuntu1。

如果上游版本足够好,他们为什么想要或需要包含自己的更改?

  • 上游包是为一般观众提供的。但是,与任何其他发行版一样,Ubuntu 有许多特定的更改,例如组织结构略有不同的文件系统。在这种情况下,任何使用系统架构的这些部分(在 Ubuntu 中专门更改)的应用程序都需要适应 Ubuntu。
    • 一个很好的例子是,大多数应用程序都准备好了,以便它们可以与 Apport 一起使用——崩溃检测和错误报告工具,专门用于 Ubuntu。
  • 在许多情况下(尽管不是在 openssh-server 的情况下)需要进行这些更改以确保正确的桌面集成。没有多少应用程序知道 Unity,因为它在其他发行版中并不常见。这意味着,如果应用程序应该与指标、Dash 或其他任何东西集成,Ubuntu 开发人员必须实现此功能并发布应用程序及其对存储库的更改。
  • 所有发布后的错误修正都是作为对源的本地(Ubuntu 范围)更改发布的。这些应用程序永远不会在 Ubuntu 的单个版本中更新到更新的上游版本。这意味着,如果您的 Oneiric 与 openssh-server 5.8p1 一起发布,它将不会更新到 5.9p1 - 您需要等待 Precise,或者自己获取。但是,Ubuntu 提供了修复关键错误和安全问题的更新。这些修复程序必须应用于适当的 Ubuntu 系列中的版本 - 在你的情况下它是 Oneiric - 并作为对 5.8p1 版本所做的更改发布。
  • 有时应用程序开发人员的质量要求低于 Ubuntu。有时,Ubuntu 开发人员会在将应用程序上传到存储库之前修复应用程序中的错误。
  • 也会发生在没有引入任何更改的情况下增加修订号的情况。当应用程序由于其所依赖的库(或新版本)发生重大变化而需要重建时,就会出现这种情况。然后增加修订号只是为了提高包版本。

您可以在以下两个地方获得有关更改的更多信息:

在那里你可以找到你感兴趣的包,选择你感兴趣的版本,甚至可以下载 debian 源包来手动读取所有.patch文件,这些文件是由 Ubuntu 开发者提供的,在构建时应用到原始源Ubuntu 包。

另请注意,这些更改总是在包的更改日志中简要解释(可在这些站点和使用您计算机上的大多数包管理器获得 - 但有指向您的链接openssh-server- 至少阅读它以注意版本号如何作为补丁更改被包含在内)。

我希望你会发现它很清楚!