debian包装:dh build和dh binary

时间:2015-09-11 13:25:40

标签: linux debian package deb debhelper

构建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 binary运行fakeroot dh binary;反过来运行以下内容:

    dh_testroot
    dh_prep
    dh_installdirs
    dh_auto_install
    dh_install
    dh_installdocs
    ...
    dh_builddeb
    

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

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

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

1 个答案:

答案 0 :(得分:3)

首先,要回答第一个问题,Debian Policy §4.9中列出了debian/rules buildbinary规则之间的差异。简而言之,build目标应仅执行“构建”步骤,而不执行任何需要root(或fakeroot)权限的操作,例如将文件chowning为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包的步骤。