reprepro抱怨生成的pbuilder debian.tar.gz archive md5

时间:2014-02-04 21:29:47

标签: md5 apt pbuilder

我已经配置了私有APT存储库(使用互联网上的资源,如http://inodes.org/2009/09/14/building-a-private-ppa-on-ubuntu/),我第一次上传了包含我的C ++应用程序源代码的软件包。 所以reprepro存储库是空的。

我使用以下命令来启动构建:

sudo reprepro -V -b /srv/reprepro processincoming incoming

然后构建开始,大量输出生成,我可以看到pbuilder正在编译项目源代码,一切都很好。我甚至可以在result/文件夹中找到debian包等...

但是使用 POST_BUILD_FAILED 构建失败,因为似乎pbuilder已经更改了 douane-testing_0.8.1-apt1.debian.tar.gz 文件和md5总和现在是不同的,如下所示:

File "pool/main/d/douane-testing/douane-testing_0.8.1-apt1.debian.tar.gz" is already registered with different checksums!
md5 expected: 97257ae2c5790b84ed7bb1b412f1d518, got: df78f88b97cadc10bc0a73bf86442838
sha1 expected: ae93c44593e821696f72bee4d91ce4b6f261e529, got: d6f910ca5707ec92cb71601a4f4c72db0e5f18d9
sha256 expected: c3fac5ed112f89a8ed8d4137b34f173990d8a4b82b6212d1e0ada1cddc869b0e, got: ebdcc9ead44ea0dd99f2dc87decffcc5e3efaee64a8f62f54aec556ac19d579c
size expected: 2334, got: 2344
There have been errors!

我不明白为什么它会失败,因为当我比较2个包(具有那些md5总和)时,内容严格相同(我使用了diff工具但没有差异,也没有新的或删除的文件)。 我唯一能看到的是,pbuild的存档比我上传的原始数据大10个字节:

在我的开发机器上,md5的文件 97257ae2c5790b84ed7bb1b412f1d518

-rw-r--r--  1 zedtux zedtux   2334 Feb  3 23:38 douane-testing_0.8.1-apt1.debian.tar.gz

在我的服务器上,文件包含md5 df78f88b97cadc10bc0a73bf86442838

-rw-r--r-- 1 root root   2344 Feb  5 00:58 douane-testing_0.8.1-apt1.debian.tar.gz

我的服务器上有pbuild版本0.213。

这种行为可能是什么原因以及如何解决?

修改

我怀疑GPG密钥的问题看起来缺失,然后文件没有签名,所以md5sum是不同的。 在构建过程中,我有以下几行:

I: Extracting source
gpgv: Signature made Wed Feb  5 22:04:37 2014 UTC using RSA key ID 9474CF36
gpgv: Can't check signature: public key not found
dpkg-source: warning: failed to verify signature on ./douane-testing_0.8.1-apt1.dsc

修改2

我试图找到手动创建.debian.tar.gz文件的命令。 我发现的最好的是以下内容:

tar cv debian | gzip --no-name --rsyncable -9 > douane-testing_0.8.1-apt1.debian.tar.gz

我没有得到与dpkg-source相同的结果,但我在我的服务器上尝试了相同的命令(我应该至少有相同的大小),但它不匹配......

难道Debian和Ubuntu没有以同样的方式压缩吗?

2 个答案:

答案 0 :(得分:0)

经过一些研究之后,我在launchpad.net找到了解决方案!

  

找到解决方案。默认情况下,pbuilder会像这样调用dpkg-buildpackage:

     

DEBBUILDOPTS =“$ DEBBUILDOPTS -rfakeroot”   dpkg-buildpackage -us -uc $ DEBBUILDOPTS

     

这会导致dpkg-buildpackage重建diff.gz和.dsc文件。在那里添加一个-b,但它不会。它还意味着生成的.changes文件将仅引用.deb文件。我认为这就是你想要的。

     

简单的解决方案是在.pbuilderrc中添加一行:

     

DEBBUILDOPTS = “ - B”

答案 1 :(得分:-1)

我以前的回答没问题,但还不完整。

然后我遇到了proxypro抱怨源tarball(.orig.tar.xz)的问题。 但这是正常的,因为我没有正确地做包裹。

我编写了一个bash脚本,我正在VM中为每个Ubuntu系列执行。 这个脚本总是从头开始做所有事情,并且正在使用dh_make --createorig参数,这就是问题所在。

正确的方法是生成一次(例如在Ubuntu上精确),然后重新使用.orig.tar.xz文件,不再使用dh_make的--createorig参数。

我希望这可以帮助某人: - )