【问题标题】:debian packaging: what's the difference between dh build and dh binarydebian 打包:dh build 和 dh binary 有什么区别
【发布时间】:2015-10-29 01:10:11
【问题描述】:

我在构建 debian 包时遇到了问题。

规则文件的文档:https://www.debian.org/doc/manuals/maint-guide/dreq.en.html#rules

  • debian/rules build 运行 dh build;依次运行以下内容:

    dh_testdir
    dh_auto_configure
    dh_auto_build
    dh_auto_test
    
  • fakeroot debian/rules 二进制运行 fakeroot dh 二进制;依次运行以下内容:

    dh_testroot
    dh_prep
    dh_installdirs
    dh_auto_install
    dh_install
    dh_installdocs
    ...
    dh_builddeb
    

但是当我运行dh binary --no-act 命令时,输出包括dh build --no-act。这意味着./configuremake 命令在构建debian 包期间运行两次。这很奇怪。

我使用dpkg-buildpackage -us -uc 构建了debian包。

更新:我看到它实际上没有运行两次,但为什么 --no-act 显示 dh build 输出运行两次?

【问题讨论】:

    标签: linux debian package deb debhelper


    【解决方案1】:

    首先,回答第一个问题,Debian Policy §4.9 中概述了debian/rules buildbinary 规则之间的区别。简而言之,build 目标应该只执行“构建”步骤,而不执行任何需要 root(或 fakeroot)权限的操作,例如将文件更改为 uid 0 或“安装”东西。另一方面,binary 应该采取所有必要的步骤来构建适当的二进制 deb。 binary 应包含build 的所有步骤(如果尚未完成)。

    以下是关于dh 的一些您可能会遗漏的事实:

    1. dh 跟踪作为构建序列的一部分运行的dh_* 命令(例如,作为dh builddh binary 的一部分),即使在调用之间也是如此。通过查看debian/$package.debhelper.log 的内容,您可以看到它认为已经运行了哪些命令。如果其中列出了一个命令,dh 将认为它已经运行以用于命令排序。

    2. dh $sequence --no-act 也将 debian/$package.debhelper.log 文件考虑在内。因此,当您在新的、干净的构建目录上运行dh binary --no-act 时,您会看到一长串命令,包括需要为build 目标执行的命令。但如果您实际上运行 dh build 然后然后 尝试dh binary --no-act,它将不再显示构建步骤。它只会显示准备和创建实际 .deb 包的步骤。

    【讨论】:

    • 感谢您的回答,我认为文档应该指出这一点,以免混淆新用户。
    猜你喜欢
    • 2023-01-31
    • 1970-01-01
    • 2021-08-26
    • 2018-10-18
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 2017-06-24
    相关资源
    最近更新 更多