![为什么 ubuntu 源与原始源不同?](https://linux22.com/image/814242/%E4%B8%BA%E4%BB%80%E4%B9%88%20ubuntu%20%E6%BA%90%E4%B8%8E%E5%8E%9F%E5%A7%8B%E6%BA%90%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
当我做:
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
我得到了大量差异(wc -l 返回 3000 行)。这是为什么?
答案1
管理软件包并将应用程序导入 Ubuntu 存储库的 Ubuntu 开发人员保留修改的权利这些应用程序。他们被允许这样做,因为那里的几乎所有软件都是免费许可的。他们不会试图掩盖它,这些变化对任何人都是可见的。事实上,他们甚至更改了软件包的版本,以表明它与原始版本不同。apt-get source
您执行的命令下载了openssh-server
版本更新至 5.8p1-7ubuntu1。注意后缀。(您可以使用任何包管理器检查版本)。该方案orig_version-XubuntuY
在所有包中非常常见。X 数字表示Debian 中的修订号,Y 代表Ubuntu 中的修订号。 也许您对此有所了解,但对于可能阅读此答案的每个人,我有一个补充说明:大多数 ubuntu 软件包都是从 Debian 存储库复制而来 - 因此,如果 Debian 开发人员发布了 5.8p1 版本七次,每次都包含他们的更改,并将其发布到存储库,并且这是 Ubuntu 开发人员第一次发布带有他们的更改的版本,则生成的版本号将是 5.8p1-7ubuntu1。
如果上游版本足够好,为什么他们想要或需要包含自己的更改?
- 上游软件包面向普通用户提供。但是,Ubuntu 与其他发行版一样,有许多具体变化,例如,文件系统组织方式略有不同。在这种情况下,任何使用系统架构这些部分的应用程序(这些部分在 Ubuntu 中进行了专门更改)都需要适应 Ubuntu。
- 一个很好的例子是,大多数应用程序都已做好准备,以便能够与 Apport 一起工作 - Apport 是一个崩溃检测和错误报告工具,专门用于 Ubuntu。
- 在许多情况下(虽然 openssh-server 的情况并非如此),需要进行这些更改以确保正确的桌面集成。由于 Unity 在其他发行版中并不常见,因此没有多少应用程序知道 Unity。这意味着,如果应用程序应该与指标、Dash 或其他任何东西集成,Ubuntu 开发人员必须实现此功能并将应用程序及其更改发布到存储库。
- 所有发布后的错误修复都作为对源的本地(Ubuntu 范围)更改发布。应用程序永远不会在单个 Ubuntu 版本中更新到较新的上游版本。这意味着如果您的 Oneiric 是使用 openssh-server 5.8p1 发布的,它将不会更新到 5.9p1 - 您需要等待 Precise,或者自己获取。但是,Ubuntu 提供了修复关键错误和安全问题的更新。这些修复必须应用于适当的 Ubuntu 系列中的版本 - 在您的情况下是 Oneiric - 并作为对 5.8p1 版本的更改发布。
- 有时应用程序开发人员的质量要求比 Ubuntu 的要低。Ubuntu 开发人员有时会在将应用程序上传到存储库之前修复其中的错误。
- 也会出现这样的情况:修订号增加但没有引入任何更改。当应用程序需要重建,因为它所依赖的库发生了重大更改(或有新版本)时,就会发生这种情况。然后修订号增加只是为了提高软件包版本。
您可以在这两个地方获得有关更改的更多信息:
在那里你可以找到你感兴趣的软件包,选择你感兴趣的版本,甚至可以下载 debian 源包来手动阅读所有的。修补文件,即由 Ubuntu 开发人员提供并在构建 Ubuntu 包时应用于原始源。
还请注意,这些变化总是在包的变更日志(可从这些网站获取,也可使用你电脑上的大多数包管理器获取 - 但是有链接到你的openssh-server
-至少阅读它以注意版本号在包含补丁时如何变化)。
我希望你能明白!