サブ変数が正しく機能しません。

サブ変数が正しく機能しません。

編集する:完全に更新されました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_LIBSPRE_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_installDEB_DH_INSTALL_ARGS

第二に、configureそしてbuildターゲットだけでなく、configure-stamp削除されますbuild-stampdhこれを使用しないでください(保管するのは本当に有害です)。

最後に、dpkg-parsechangelog操作を実行してversion.txtファイルを生成する別のカバレッジターゲットを追加します。実際のビルドプロセスは異なる場合がありますが、それを置き換える方法を示します。

おすすめ記事