如何防止 debuild 执行清理?

如何防止 debuild 执行清理?

我正在尝试在 Debian 上编辑 Apache 模块(严格来说,我是在 Raspbian Jessie-Lite 上执行此操作),并且大致遵循Debian 构建说明

$ mkdir -p ~/src/debian; cd ~/src/debian
$ apt-get source apache2-bin
$ cd apache2-2.4.10
$ debuild -b -uc -us

在旧的原始 Pi 上,构建过程大约需要一个半小时。这很好。一次!但我相信构建过程正在执行 a make clean,因此在对单个 mod_*.c 文件进行小幅编辑后,它想要重建整个文件,这有点减慢了我的开发速度!

我尝试添加-dcdebuild命令中,但它没有构建任何东西。我什至尝试删除目标 mod_*.so 文件以“鼓励”它重建它,但仍然没有!

更新 2016-08-21:将 -nc 添加到 debuild 命令不会导致模块重新编译。这是该命令的输出:

$ debuild -b -uc -us -nc
 dpkg-buildpackage -rfakeroot -D -us -uc -b -nc
dpkg-buildpackage: source package apache2
dpkg-buildpackage: source version 2.4.10-10+deb8u5
dpkg-buildpackage: source distribution jessie-security
dpkg-buildpackage: source changed by Salvatore Bonaccorso <[email protected]>
 dpkg-source --before-build apache2-2.4.10
dpkg-buildpackage: host architecture armhf
 debian/rules build
dh build --parallel --with autotools_dev
 fakeroot debian/rules binary
dh binary --parallel --with autotools_dev
 dpkg-genchanges -b >../apache2_2.4.10-10+deb8u5_armhf.changes
dpkg-genchanges: binary-only upload (no source code included)
 dpkg-source --after-build apache2-2.4.10
dpkg-buildpackage: binary-only upload (no source included)
Now running lintian...
N: 16 tags overridden (1 error, 4 warnings, 11 info)
Finished running lintian.

答案1

将选项添加-ncdebuild命令行中。但这可能会暴露构建系统或包装中的问题,因此请做好准备。但对于小的修复,它通常工作得很好。

然而,由于apache2源包使用 debhelper(像许多其他包一样),仅此还不够,因为 debhelper 还在每个二进制包的单独日志文件中保留自己的已完成步骤日志。这些可以通过 完全删除dh_clean。但要让 debhelper 只重做必要的工作,请仅截断相关的工作

sed -i '/^dh_auto_build$/Q' debian/apache2-bin.debhelper.log

跑步前debuild -nc

答案2

debian 目录中有一个规则文件。它本质上是一个 make 文件。如果删除所有有关清洁的指令,然后添加

override_dh_clean:

并且不放入任何东西(根本)不会发生清洁。请小心,尽管这可能会导致构建问题,虽然可能性不大,但有可能。另一种选择是不更改任何内容并使用 -j 选项进行并行构建。不确定树莓派的优势。

规则文件应该看起来像

答案3

我也有类似的问题; Scite debian 软件包包含debian/rules

...
BUILD_DATE="$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" "+%b %d %Y %T")"
override CPPFLAGS += -DBUILD_DATE="\"$(BUILD_DATE)\""

%:
        dh $@

override_dh_auto_build:
        dh_auto_build --sourcedirectory=scintilla/gtk -- GTK3=1 $(BUILD_LUA)
        dh_auto_build --sourcedirectory=scite/gtk -- gnomeprefix=/usr GTK3=1 $(BUILD_LUA)
....

本质上,override_dh_auto_build调用 make,它检测更改的源文件并仅重建更改的文件。但是,即使debian/rules设置BUILD_DATE,运行:

fakeroot debian/rules -j$(nproc) override_dh_auto_build

...将在某些使用 BUILD_DATE 作为定义的 cpp 源文件中失败。解决方案是在命令行调用中显式指定此变量:

fakeroot debian/rules -j$(nproc) CPPFLAGS+=-DBUILD_DATE="" override_dh_auto_build

...然后编译通过(额外的好处是不会创建新的 .deb,因此您不必等待)。从本质上讲,这有助于重新运行更改文件的重建过程,为您提供 .so/.exe,而不打包 .deb。

相关内容