編集する:完全に更新されましたDebian/ルールそしてDebian/コントロール文書
私はWebプロジェクトを進めており、異なる配布サーバー用に2つのDebianパッケージを構築する必要があります。主な違いは依存関係の制限です。Debian/コントロール文書。だから私は以下のように書きました。
Source: web-app
Section: non-free/web
Priority: optional
Maintainer: Me
Build-Depends: debhelper (>= 4.0.0), build-essential
Standards-Version: 3.8.0
Homepage: http://abc.com
Package: web-app
Architecture: all
Depends: apache2, libapache2-mod-rpaf, openssl, rsync, imagemagick, mysql-client, ${other-depends}, libjs-cropper, libjs-jquery (>= 1.3.3-1), libjs-prototype, libjs-scriptaculous, libphp-phpmailer (>= 1.73-4), libphp-snoopy, tinymce (>= 3.2.6-0.1)
Description: Short description
Long description here.
しかもDebian/ルール文書:
#!/usr/bin/make -f
DEB_DH_INSTALL_ARGS=-X .svn
include /usr/share/cdbs/1/rules/debhelper.mk
# Add here any variable or target overrides you need.
# platform related package dependencies
XENIAL_LIBS = php7.0, php7.0-opcache, php-apcu, php7.0-mysql, php7.0-gd
PRE_XENIAL_LIBS = apache2-mpm-prefork, apache2-prefork-dev, php5.5, php-apc, php-gettext, php5-mysql, php5-gd
ifeq ($(shell lsb_release -cd | awk '/^Codename:/ { print $2}'), xenial)
PLATFORM_LIBS := $(XENIAL_LIBS)
else
PLATFORM_LIBS := $(PRE_XENIAL_LIBS)
endif
override_dh_gencontrol:
dh_gencontrol -- -Vother-depends="$(PLATFORM_LIBS)"
configure: configure-stamp
configure-stamp:
touch configure-stamp
build: build-stamp
build-stamp: configure-stamp
dh_testdir
dpkg-parsechangelog | awk '$$0 ~ /^Version:/ {print $$2}' > version.txt
touch build-stamp
デプロイ対象の1つはUbuntu 14.04(Trusty)です。他の人は頼るそしてPRE_XENIAL_LIBS。しかし、次のようなサーバーの最終制御ファイルを取得しました。
Depends: apache2, openssl, rsync, imagemagick, php, php-opcache, php-apcu, mysql-client, php-gettext, php-mysql, php-gd ...
何が間違っていて、どのように解決しますか?
================更新===================
私のものを修正しましたDebian/ルールファイルはWouterの回答に基づいていますが、それでも代替項目が正しくありません。その後、コマンドを実行します。
dpkg-buildpackage
その後、出力で警告が見つかりました。
dpkg-gencontrol: warning: Depends field of package web-app: unknown substitution variable ${other-depends}
どんな手がかりがありますか?
答え1
まず、構文が正しくないため、次のコマンドラインが生成されます。
dh_gencontrol -- -Vdist:Depends=""php7.0, php7.0-opcache, ...""
(必要なもの)代わりに:
dh_gencontrol -- -Vdist:depends="php7.0, php7.0-opcache, ..."
make
これは、引用符が実行されず、変数のデータを2回参照するためです(割り当て時には1回、使用時には1回)。そのうちの一つを捨ててください。
第二に、うまくいかないのは、作成されたようにdebian / rulesファイルが必要なdh_gencontrol
追加パラメータを使用して呼び出さないためです。ファイルdebian/rules
は1つMakefile
なので、ルールが設定されている必要があります。それ以外の場合は無視されます。次のタスクは、マイコンピュータで期待されるタスクを実行します。
#!/usr/bin/make -f
%:
dh $@
PKGS := abcd, efgh
override_dh_gencontrol:
dh_gencontrol -- -Vdist:Depends="$(LIBS)"
それでも期待どおりに機能しない場合は、dpkg-buildpackage
完全な例(つまり、実行できるもの)が必ず必要です。
編集する:まだ二重引用符があります。とXENIAL_LIBS
行PRE_XENIAL_LIBS
の周りに引用符があります。削除してください。また、dpkg-buildpackage
文句を言わない例(例えば、制御ファイルが不完全であること)を提供していません。作業中の作業に必ずしも会社の秘密が含まれているわけではありませんが、問題を示す最小限の例が重要です。これまで提供していただいた情報では問題を再現できません。
編集2:フルルールファイルには、debhelperではなくCDBSを使用していることが表示されますdh
。したがって、override_dh_gencontrol
ターゲットは呼び出されません(これはdh
特定のものです)。 CDBSが単一のdebhelperコマンドのオーバーライドをどのように処理するのかわかりません(したがって、他の人が方法を教えてくれることを願って、休日前にこの質問に答えませんでした)。しかし、おそらく次のような別のものかもしれません。 CDBS_FOO_BAR変数を設定する必要があります。幸いなことに、debian/rules
ファイルは十分に単純なので、cdbsのポートは非常に簡単です。次のパッチを適用します。
--- rules.old 2016-07-12 16:57:05.350385288 +0200
+++ rules 2016-07-12 16:58:54.456536432 +0200
@@ -1,8 +1,7 @@
#!/usr/bin/make -f
-DEB_DH_INSTALL_ARGS=-X .svn
-
-include /usr/share/cdbs/1/rules/debhelper.mk
+%:
+ dh $@
# Add here any variable or target overrides you need.
@@ -16,15 +15,10 @@
PLATFORM_LIBS := $(PRE_XENIAL_LIBS)
endif
+override_dh_install:
+ dh_install -X .svn
override_dh_gencontrol:
dh_gencontrol -- -Vother-depends="$(PLATFORM_LIBS)"
-
-configure: configure-stamp
-configure-stamp:
- touch configure-stamp
-
-build: build-stamp
-build-stamp: configure-stamp
- dh_testdir
+override_dh_auto_build:
dpkg-parsechangelog | awk '$$0 ~ /^Version:/ {print $$2}' > version.txt
- touch build-stamp
+ dh_auto_build
まず、サポートされていないCDBSを含む変数とCDBS関連DEB_DH_INSTALL_ARGS
変数を削除し、その場所にdhに必要なdh
ワイルドカードターゲットを追加します。また、変数を置き換えるターゲットをMakefile
追加します。override_dh_install
DEB_DH_INSTALL_ARGS
第二に、configure
そしてbuild
ターゲットだけでなく、configure-stamp
削除されますbuild-stamp
。dh
これを使用しないでください(保管するのは本当に有害です)。
最後に、dpkg-parsechangelog操作を実行してversion.txtファイルを生成する別のカバレッジターゲットを追加します。実際のビルドプロセスは異なる場合がありますが、それを置き換える方法を示します。