1

在构建机器人上构建包时,我目前有一个构建步骤

dpkg-buildpackage ...

这很好用,但所有输出都集中在瀑布中的一个步骤中,这使得很难一眼看出故障是在配置期间、构建期间还是在打包期间。所以我想要一种更细粒度的构建方式。

碰巧我知道我想使用 dh 构建的所有包。这意味着我可以配置、构建、测试和打包构建步骤,每个构建步骤都运行以下命令之一:

dh build --until dh_auto_configure
dh build --until dh_auto_build
dh build --until dh_auto_test
dpkg-buildpackage -nc ...

(我使用 dh 来调用这些,因此如果包使用任何内容,它就可以进行覆盖。我不希望 buildbot 必须知道相关包是否使用覆盖。)

到目前为止,一切都很好。问题是,dh 不希望我使用 --until 选项。它说

“dh:不推荐使用 --until 选项。改用覆盖目标。”

这让我很难过……听起来 dh 没有预料到这个用例。

所以,现在的问题:

这些事情应该在哪里讨论?

dh 是否真的以其他方式处理我的用例,而我只是错过了备忘录?

4

1 回答 1

0

这可能不是一个伟大的工作dh。通常,它实际上只是为了从debian/rulesmakefile 中使用。--until即使它没有被弃用,这种方法可能对你来说也很成问题。

但是,您可以通过执行您自己的脚本中的所有步骤来拆分构建过程dpkg-buildpackage(手册页顶部的摘要应该告诉您所需的一切)。

但即便如此,也不一定能让您拆分流程的configure各个build部分。不需要debian/rules文件来分隔这些步骤或使用户可以轻松地执行此操作。许多人会,有些人不会。

我的建议是dpkg-buildpackage在每个阶段都尽可能多地去做,以避免在构建环境、依赖检查、树准备、fakeroot 调用或其他东西上弄乱一些微妙的东西。只需-nc在第一个阶段之后传递阶段,以避免清理树并重新开始。dh足够聪明,当阶段重叠(如build*binary*)时,可以跳过您已经完成的部分。

您可以通过以下方式为大多数软件包获得正确的配置/构建分离:

set -e
# check build deps, clean tree, make source debs
dpkg-buildpackage -S -us -uc

if grep '^configure:' debian/rules; then
    debian/rules configure
elif grep '^override_dh_auto_configure:' debian/rules; then
    debian/rules override_dh_auto_configure
elif grep '^%:' debian/rules; then
    dh_auto_configure
else
    : # oh well, it'll get done during the build phase if necessary
fi

# prepare environment, perform build
dpkg-buildpackage -nc -T build

# install stuff into temp dir, tar it up, make the deb file
dpkg-buildpackage -nc -b -us -uc

# remake the changes file, if you care, since right now it only
# includes the binaries
dpkg-genchanges > ../$whatever.changes

至少,这应该总是正确的包。

于 2013-03-07T19:30:03.073 回答