为什么 src rpms 不同

Why do src rpms differ

我一直在使用 mock 构建 rpm。这是一个像这样的两步过程。

mkdir buildsrpm
mock buildsrpm --spec myprogram-1.spec --sources myprogram-1.tar.gz --resultdir buildsrpm
mkdir rebuild
mock rebuild buildsrpm/myprogram-1.src.rpm --resultdir rebuild

第一步是构建源 rpm。第二步是构建 rpm。

在我使用的过程中,我创建目录来存储结果。

我注意到 运行 diff -qrs buildsrpm/myprogram-1.src.rpm rebuild/myprogram-1.src.rpm结果是他们不一样。

所以我的问题是:

  1. 为什么 mock rebuild 生成源 rpm?显然我不需要一个,因为我提供了源 rpm 作为重建的输入。
  2. 为什么不同?
  3. 如果我正在创建一个存储库,哪个更好?

尝试在不同的 chroot 中 运行 它。例如:

mock -r fedora-23-x86_64  foo-1.0.16-1.fc22.src.rpm

你会注意到它会创建(在二进制包旁边)foo-1.0.16-1.fc23.src.rpm。查看disttag中的差异。

生成的 SRPM 是在 chroot 内部使用来自该 chroot 的 rpmbuild 命令构建的。这可能会或可能不会导致差异(在 src.rpm 上尝试 rpm -qpi)。在 Fedora 22 和 23 之间可能没有区别,但 'Build Date'(因此它们总是二进制不同)。但是 Epel-5 和 Fedora-23 在使用的​​校验和(MD5 vs. SHA)上甚至会有差异。

如果您使用 Mock's sign plugin 则生成的 SRPM 甚至可以签名。

总而言之 - 您应该使用重建的 SRPM 以确保安全。然而,原始的 SRPM 通常也能正常工作。