区分同一个 debian 包的不同版本

Göd*_*del 11 package-management motu development

有什么方法可以获取本地安装的软件包与其更新的软件包之间的源差异?这对于准确检查哪些部件已被修复、更改或添加非常有用。

例如,假设您的系统上安装了 linux-libc-dev 软件包,并且

sudo apt-get update && sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

显示

The following packages will be upgraded:
  linux-libc-dev 
Run Code Online (Sandbox Code Playgroud)

但是您想在升级之前检查与同一软件包的本地版本相比所做的确切更改。

我们怎么做?

Las*_*sen 7

Afaik 做到这一点的唯一方法是获取源代码并使差异成为您的自我。您可以使用 apt-get 获取用于编译包的实际源代码。外汇:

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/
Run Code Online (Sandbox Code Playgroud)

这将以标准补丁格式打印出所有文件之间的所有差异。


mgu*_*nes 5

这是我一起破解的另一个解决方案:whatchanged

它以您感兴趣的二进制包的名称作为唯一参数。以最近的 SRU 为例:

./whatchanged python_papyon
Run Code Online (Sandbox Code Playgroud)

这是它的作用:

  1. 检查是否有更新候选者;如果没有就退出
  2. 如果存在候选者,则创建临时目录并将已安装版本和候选者的源包提取到其中
  3. 将两者与debdiffstdout 和输出进行比较(您可能希望重定向以便于阅读)
  4. 清理临时目录。

它可能需要更好地处理某些在源检索过程中可能出错的事情,流程控制可能有点偏离,并且必须有更优雅的版本检查方法,但到目前为止在我有限的测试中它运行良好。现在,将其视为有效的快速 hack,并且非常欢迎改进。如果它对少数人有用,我会将它推送到 bzr 存储库和/或创建一个 Launchpad 项目。

编辑:与其让它在 pastebin 上腐烂,我已经为它启动了一个 Launchpad 项目;您可以使用bzr branch lp:whatchanged. 随意报告错误、分支、用 Perl 重写等。