linux - debian 包装 : what's the difference between dh build and dh binary

标签 linux debian package deb debhelper

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

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

  • debian/rules 构建运行 dh 构建;依次运行以下命令:

    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 输出运行了两次?

最佳答案

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

以下是您可能遗漏的关于 dh 的几个事实:

  1. dh 跟踪作为构建序列的一部分运行的 dh_* 命令(例如,作为 dh build< 的一部分dh 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 包的步骤。

关于linux - debian 包装 : what's the difference between dh build and dh binary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32524630/

相关文章:

linux - 进行安装,但不安装到默认目录?

svg - 是否有提供错误消息的 SVG 查看器?

java - 将抽象类放在包含其派生类的同一个包中是不是不好的编程习惯?

linux - 如何修复未在 CENTOS 上构建的 802.11 Linux STA broadcom 驱动程序?

c - 了解 read() 和 write() 的行为

linux - Dropbear - 当用户的 shell 被重定向时无法 SSH

java - 如何更改 spring-boot init.d 服务的最大打开文件限制

selenium - Watir Chrome 驱动程序 "EOFError: end of file reached"错误

java - Oracle 包和 Java 包之间的映射

r - 如何在小插图中包含 inst/REFERENCES.bib