デビルドがクリーンアップを実行するのを防ぐ方法は?

デビルドがクリーンアップを実行するのを防ぐ方法は?

私は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では、ビルドプロセスに約1時間30分かかりました。これはいいですね。一度!しかし、ビルドプロセスが実行していると思うので、make clean単一のmod_*.cファイルを少し編集してからファイル全体を再構築しようとするので、開発が少し遅くなります!

コマンド-dcに追加しようとしましたが、何もビルドされませんでした。debuild再構築を促すためにターゲットmod_*.soファイルを削除しようとしましたが、まだ何もありません!

2016年8月21日更新:debuildコマンドに-ncを追加してもモジュールは再コンパイルされません。以下はコマンドの出力です。

$ 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

コマンドライン-ncにオプションを追加します。debuildただし、これによりビルドシステムやパッケージングに問題が発生する可能性があるため、準備してください。しかし、小さな修正の場合、通常はかなりうまく機能します。

しかし、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_buildmakeが呼び出され、変更されたソースファイルが検出され、変更されたファイルのみが再構築されます。ただし、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が生成されないため、待つ必要がないという追加のボーナスもあります)。デフォルトでは、これは変更されたファイルで再構築プロセスを再実行するのに役立ち、.debをパッケージ化することなく.so/.exeを提供します。

関連情報