我已经配置了私有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没有以同样的方式压缩吗?
答案 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参数。
我希望这可以帮助某人: - )