-1

我已经配置了一个私有 APT 存储库(使用 Internet 上的资源,例如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 packages 等中找到...

但是构建失败并出现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!

我不明白为什么它会失败,因为当我比较两个包(具有那些 md5 总和)时,内容完全相同(我使用了差异工具,但没有差异,也没有新的或删除的文件)。我唯一能看到的是 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 的压缩方式不同吗?

4

2 回答 2

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"

于 2014-02-08T16:16:46.053 回答
-1

我之前的回答还可以,但不完整。

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

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

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

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

于 2014-02-19T22:13:45.367 回答