【问题标题】:debhelper deprecated option --until?debhelper 已弃用选项 --until?
【发布时间】:2013-02-26 00:29:29
【问题描述】:

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

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 是否真的以其他方式处理我的用例,而我只是错过了备忘录?

【问题讨论】:

    标签: debian packaging buildbot


    【解决方案1】:

    这对dh 来说可能不是一个好工作。通常,它实际上只是从debian/rules makefile 中使用。 --until 方法可能会给您带来很大的问题,即使它没有被弃用。

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

    但即使这样也不一定能让您拆分流程的configurebuild 部分。 debian/rules 文件不是 required 来分隔这些步骤或使用户更容易这样做。很多人会,有些人不会。

    我的建议是让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
    

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

    【讨论】:

    • 对于它的价值,我可以控制所有有问题的包,并且一直在将它们转换为 dh。
    • (诅咒 stackoverflow 的 UI :-) 对于它的价值,我可以控制所有有问题的包,并将它们转换为 dh。另外,由于我使用它来执行诸如运行 Coverity 之类的事情,如果我使用 dpkg-buildpackage,我将不得不传递一个或多个环境变量。但我同意使用 dpkg-buildpackage(或者,更好的是,debuild)是构建的方式,我一起破解的任何东西都必须按照他们的做法。
    猜你喜欢
    • 2020-01-10
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多