如何检查我是否安装了与系统上完全相同的 deb 包。

在为内部公司项目构建软件包时,有时我们会追踪不到软件包的源代码,只剩下二进制.deb文件。更糟糕的是,软件包构建者可能会将其安装到生产系统中,但忘记在yum中添加,并且后来离开了公司。未来某个时间点,我们需要构建一个新的服务器,并希望确保在工程师的主目录中找到的.deb文件与现有服务器上的文件完全相同。是否有办法确定.deb文件是否完全相同?
在基于rpm的系统上,我会执行以下操作:
old-server$ rpm -qi foo

new-server$ rpm -qi -p foo-1.2.3.rpm

比较大小、构建日期、构建主机,如果它们匹配,那么我就知道我拥有了我所需要的确切rpm软件包。
在基于dpkg的系统上是否有类似的方法呢?
我看到dpkg-query可以返回一些数据的MD5值,但是手册页说它与dselect有关,而且我无法从中获取任何数据。
2个回答

你可以执行 dpkg -l <packagename> 命令,查看软件包是否已安装以及其版本。如果没有对版本号等有一些准则的话,这可能不起作用(例如,在对代码进行更改并发布/安装时,应该提升版本号)。

我猜想将系统上安装的文件与软件包内的文件进行比较应该会给你一个很好的想法?你可以使用dpkg -x <deb-filename> <directory-to-extract-in>从*.deb中提取文件,也可以使用dpkg -L <package-name>列出已安装软件包中的所有文件。

当你拥有这些信息后,你就可以比较文件名、文件日期、校验和或者任何你想要的东西...


如果使用MD5校验和,就像大部分软件包一样,速度会更快。 - enzotib
如何最好地使用软件包中的MD5校验和?是否有办法从已安装和未安装的软件包中获取校验和列表? - Blair Zajac