在buildbot上构建软件包时,我目前只有一个构建步骤
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调用这些,所以它可以在包使用any时进行覆盖。我不希望buildbot必须知道有问题的包是否使用覆盖。)
到目前为止,这么好。问题是,dh不希望我使用--until选项。它说
“dh:不推荐使用--until选项。请改用覆盖目标。”
这让我感到难过......听起来像dh并不期待这个用例。
所以,现在问题:
这些事情应该在哪里讨论?
dh是否实际上以其他方式处理我的用例,我只是错过了备忘录?
答案 0 :(得分:0)
dh
这可能不是一个好工作。它通常只是意味着从debian/rules
makefile中使用。 --until
方法可能对您来说很成问题,即使它没有被弃用。
但是,通过采用dpkg-buildpackage
在您自己的脚本中执行的所有步骤来拆分构建过程(联机帮助页顶部的摘要应该告诉您所有内容)需要)。
但即便如此,也不一定会让您拆分流程的configure
和build
部分。 debian/rules
个dpkg-buildpackage
个文件不是required来分隔这些步骤,也不是让用户这么简单。很多人都这样做,有些则没有。
我的建议是让-nc
在每个阶段尽可能地做,以避免弄乱构建环境,依赖性检查,树准备,fakeroot调用等某些细微的东西。只需在第一阶段之后通过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
),跳过您已经完成的部分。
您可以使用以下内容获得大多数软件包的正确配置/构建分离:
{{1}}
至少,应该总是制作正确的包裹。