クリーンを実行せずに(Debian)Apacheをデビルドする方法


4

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時間半かかります。大丈夫です。一度!しかし、ビルドプロセスはa make cleanを実行しているため、1つのmod _ *。cファイルを少し編集した後、全体を再構築したいので、開発が少し遅くなります。

コマンドに追加しようとし-dcましたdebuildが、何も作成されませんでした。ターゲットのmod _ *。soファイルを削除して、再構築するよう「奨励」しましたが、それでもできませんでした。

更新2016-08-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 <carnil@debian.org>
 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.

回答:


7

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

ただし、apache2ソースパッケージは(他の多くのパッケージと同様に)debhelperを使用するため、debhelperは各バイナリパッケージの個別のログファイルに完了したステップの独自のジャーナルも保持するため、これだけでは不十分です。これらはによって完全に削除できますdh_clean。しかし、debhelperを必要な作業だけやり直すには、関連するものだけを切り捨てます。

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

実行する前にdebuild -nc


返信ありがとうございます!うまくいきませんでした!:D実際、出力と所要時間は、debian / rulesからクリーンビットを削除するのと同じでした。役立つ場合に備えて、-ncを使用したdebuildの出力で質問を更新しました。
ピーターライアン

makeコードを変更した後、トップレベルのソースディレクトリでプレーンを呼び出すとどうなりますか?必要なものが再構築される場合は、debuild -ncその後で試してください。
フェレンクワグナー

make何かをする; ビットをコンパイルします[top-level-source]/modules/mappers/.libs/が、そこにある.soファイルはインストールされている.soファイルよりも大きくなります(9.4Kと35K)。ただし、debuildフルビルドのファイルはになります[top-level-source]/debian/apache2-bin/usr/lib/apache2/modules/。したがって、makeその後に続けて実行しても、debuild -ncインストールできるファイルにはなりませんでした。
ピーターライアン

私はあなたがすでに知っていることを言っているかもしれませんが、Apacheディストリビューションがあり、すべてのmakeファイルがあり、Debianパッチとその makeファイルがあります...そして2つは別々ですか?また、Debianのものはすべてを再コンパイルするだけではないのかと思っています。多分?!
ピーターライアン

サイズの違いはおそらくストリッピングの結果です。とにかく、これは励みになります。次に、実行sed -i '/^dh_auto_build$/Q' debian/apache2-bin.debhelper.logします(変更がapache2-binバイナリパッケージに関係すると仮定します)。次にを実行しdebuild -ncます。
フェレンクワーグナー

4

debianディレクトリ内には、ルールファイルがあります。本質的にはメイクファイルです。クリーニングに関するすべてのディレクティブを削除してから追加する場合

override_dh_clean:

そして、何も入れないと、クリーニングは(まったく)起こりません。これはビルドの問題を引き起こす可能性がありますが、そうではないかもしれませんが、注意してください。別の方法は、何も変更せずに-jオプションを使用して並列ビルドを実行することです。ラズベリーパイに与える利点がわからない。

ルールファイルは次のようになります。これ


お返事をありがとうございます!debian / rulesを編集しようとしましたが、はるかに高速(7分未満)ですが、編集したモジュールは再コンパイルされません。
ピーターライアン

周りを見てみると、そこにも多くの.mkファイルがありますが、何がいつ何を呼び出すのかについては完全に失われています!
ピーターライアン

0

同様の問題がありました。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/rulessets 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を提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.