如何调试一个构建失败的问题,而这个问题在Launchpad构建环境之外无法重现?

我正在尝试构建一个修改过的libdbusmenu软件包。如果我在本地构建它,它会正确构建。
sudo apt-get build-dep libdbusmenu
wget https://launchpad.net/~a-j-buxton/+archive/dbusmenu/+files/libdbusmenu_12.10.3%2B13.10.20130913-0ubuntu2.1.diff.gz
wget https://launchpad.net/~a-j-buxton/+archive/dbusmenu/+files/libdbusmenu_12.10.3%2B13.10.20130913-0ubuntu2.1.dsc
wget https://launchpad.net/~a-j-buxton/+archive/dbusmenu/+files/libdbusmenu_12.10.3%2B13.10.20130913.orig.tar.gz
dpkg-source -x libdbusmenu*.dsc
cd libdbusmenu*
dpkg-buildpackage

然而,在PPA中,其中一个测试无法运行,导致构建失败。实际的测试输出未写入构建日志:

https://launchpadlibrarian.net/155471644/buildlog_ubuntu-saucy-amd64.libdbusmenu_12.10.3%2B13.10.20130913-0ubuntu2.1_FAILEDTOBUILD.txt.gz

如何解决这个问题?
可能需要更加精确地复制PPA构建者使用的构建环境。如果是这样,我该怎么做呢?
我已经尝试使用pbuilder chroot进行构建 - 在我的本地系统上这个方法是正确的。
Lintian在包上产生了以下警告:
W: libdbusmenu source: quilt-build-dep-but-no-series-file
W: libdbusmenu source: patch-system-but-no-source-readme
W: libdbusmenu source: ancient-standards-version 3.9.2 (current is 3.9.4)

是的,lintian对这个软件包产生了很多错误。但这实际上是一个未经修改的Ubuntu软件包(只是升级了日志),在除了PPA之外的任何地方都可以构建成功,所以我并不认为这有什么关系。 - Alistair Buxton
我不确定这是否算作一个答案,但你可以将你的构建日志与官方Ubuntu软件包的构建日志进行比较。当测试套件失败时,你可以在debian/rules中添加export VERBOSE=1,以强制将整个测试套件的输出写入构建日志。你可以尝试使用sbuild而不是pbuilder,参见https://wiki.ubuntu.com/SimpleSbuild。 - Michael Miller
1个回答

在查看日志时,有一些警告,你可能应该看一下,特别是如果你在本地机器上没有遇到这些警告的话。但是我觉得关于发生了什么的重要提示是失败测试的名字:glib-events。
事件几乎总是与I/O相关的,所以为了在本地机器上强制出现错误,可以取消设置XAUTHORITY和DISPLAY,关闭标准输入或将其重定向到/dev/null,并将标准输出和错误重定向到文件中。nohup会为您做重定向,但不会影响环境,或者您可以使用at或batch代替nohup,它们还提供了更改会话领导者的优势。

一个好主意,但不幸的是它没有起作用。当从at环境中运行pbuilder时,所有的测试仍然通过。 - Alistair Buxton