区分同一Debian软件包的不同版本


11

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

例如,假设您在系统上安装了linux-libc-dev软件包,然后

sudo apt-get update && sudo apt-get upgrade

表演

The following packages will be upgraded:
  linux-libc-dev 

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

我们该怎么做?

Answers:


5

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

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

./whatchanged python_papyon

这是它的作用:

  1. 检查是否有更新候选者;如果没有,退出
  2. 如果存在候选者,请创建临时目录,然后将安装版本和候选者的源软件包都提取到其中
  3. 将两者与进行比较,debdiff然后将其输出到stdout(您可能需要重定向以便于阅读)
  4. 清理临时目录。

它可能需要更好地处理某些在源代码检索期间可能出错的事情,流控制可能有点失误,并且必须有更优雅的版本检查方法,但到目前为止我在有限的测试中仍然可以正常工作。目前,将其视为一种可行的快速技巧,并且欢迎进行改进。如果对少数人有用,我将其推送到bzr存储库和/或创建一个Launchpad项目。

编辑:不是让它在pastebin上腐烂,而是为它启动了Launchpad项目。您可以使用来获得最新的主干版本bzr branch lp:whatchanged。随时报告错误,进行分支,在Perl中重写等。


多好!开发工具的答案,就像你的编码风格),但将在适当的perl已编码的吧..
LassePoulsen

谢谢; 希望有用。包装和发布技术有时使开放代码变得不透明的方式在我心中一直存在,而且我还没有找到任何简单的工具来克服它,所以有人表达出对完全相同的需求的动机是最终自己做一个原始人。
mgunes,2010年

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/

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


1
很好 在示例中,我唯一要更改的是使用“ debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc”,而不是原始的diff。
RAOF

1
好吧,它实际上做了同样的事情,但是您可以在每个包/ tarball上使用diff。也许有人想看看svn-trunk与当前pkg之间的区别。
LassePoulsen

我的第二个答案(已更改)实质上使这一过程自动化。
mgunes,2010年

2

这是一种(可能不是最佳的)UDD方法:

为您的发行版(假定为Lucid)(假定如下)包含应包含最新SRU的Pull -updates分支:

bzr branch lp:ubuntu/lucid-updates/package_name

获取最新修订版引入的更改(假设如下),这些更改应对应于最新的SRU:

bzr diff -c`bzr revno`

2
嗯 这很有趣,尽管从某种意义上说软件包名称可能与bzr源树不匹配或不存在,但它可能不如Source Lab全面。
哥德尔

只要您知道源程序包名称,它就会匹配。您可以使用查找生成二进制包的源包apt-cache show package_name | grep Source:
mgunes 2010年

@Murat好吧,<package_name>这样获得的内容不适用于某些软件包:bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr:错误:提供了无效的URL来传输:“ bzr + ssh://bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux” :不支持的方案
哥德尔

恐怕是因为根本没有内核的Ubuntu分支。由于内核是在git(kernel.ubuntu.com)中维护的事实,所以这可能是一个特定的例外,但是目前我不确定bzr软件包分支的确切范围。您可能要在#ubuntu-devel上提问。
mgunes 2010年

@壁画,我知道。这就是为什么该方法没有Source Lab全面的原因。但是,这又是一个有趣的事情。
哥德尔

0

如果要查看软件包归档文件中的文件差异,请提取其md5sums文件,对它们进行排序和比较,然后可以缩小实际文件列表以进行比较。


-1

可能不是“确切的”更改,但apt-listchanges列出了自安装版本以来所做的更改的更改日志条目。

在完成下载新软件包之后但在安装开始之前,它通过添加一个步骤来工作,在该步骤中,它将向您显示要升级的每个软件包的changelog条目。然后,您可以继续或取消。您可以使用安装

sudo apt-get install apt-listchanges

然后用

sudo dpkg-reconfigure apt-listchanges

同样,问题不在于显示ChangeLog更改。
哥德尔

D'oh,错过了您说“源差异”的第一行。
肯西蒙(Ken Simon)2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.