![比较同一 Debian 软件包的不同版本](https://linux22.com/image/1074543/%E6%AF%94%E8%BE%83%E5%90%8C%E4%B8%80%20Debian%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%E4%B8%8D%E5%90%8C%E7%89%88%E6%9C%AC.png)
有没有办法获取本地安装的软件包和其更新软件包之间的源代码差异?这将有助于准确检查哪些部分已被修复、更改或添加。
例如,假设你的系统上安装了 linux-libc-dev 包,并且
sudo apt-get update && sudo apt-get upgrade
节目
The following packages will be upgraded:
linux-libc-dev
但是您需要在升级之前检查与本地版本相同的软件包相比所做的具体更改。
我们该如何做呢?
答案1
据我所知,做到这一点的唯一方法是获取源代码并自己进行差异分析。您可以使用 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/
这将以标准补丁格式打印出所有文件之间的所有差异。
答案2
以下是我提出的另一种解决方案:发生了什么变化。
它以您感兴趣的二进制包的名称作为唯一参数。以最近的 SRU 为例:
./whatchanged python_papyon
它的作用如下:
- 检查是否有更新候选;如果没有,则退出
- 如果存在候选版本,则创建临时目录并将已安装版本和候选版本的源包放入其中
- 将两者进行比较,
debdiff
并输出到标准输出(您可能需要重定向以便于阅读) - 清理临时目录。
它可能需要更好地处理在源代码检索过程中可能出错的某些事情,流程控制可能有点偏离,并且必须有更优雅的版本检查方法,但它在我迄今为止的有限测试中运行良好。目前,认为它是一个有效的快速破解,并且改进是最受欢迎的。如果它对少数人有用,我会将它推送到 bzr 存储库和/或创建一个 Launchpad 项目。
编辑:为了不让它烂在 pastebin 上,我已经开始Launchpad 项目您可以使用 获得最新的主干修订版bzr branch lp:whatchanged
。欢迎报告错误、分支、用 Perl 重写等等。
答案3
这是一个(可能不是最佳的)乌德做法:
为您的版本(假设为 Lucid)提取更新分支(假设如下)应该包含最新的 SRU:
bzr branch lp:ubuntu/lucid-updates/package_name
获取最新修订版引入的更改,该更改(假设如下)应与最新的 SRU 相对应:
bzr diff -c`bzr revno`
答案4
可能不是“确切的”变化,但apt-listchanges
列出了自安装版本以来所做更改的更改日志条目。
它的工作原理是,在您下载完新软件包之后,但在安装开始之前添加一个步骤,其中显示每个即将升级的软件包的更改日志条目。然后您可以继续或取消。您可以使用
sudo apt-get install apt-listchanges
然后设置
sudo dpkg-reconfigure apt-listchanges