하위 변수가 제대로 작동하지 않습니다.

하위 변수가 제대로 작동하지 않습니다.

편집하다: 완전히 업데이트됨데비안/규칙그리고데비안/컨트롤문서

저는 웹 프로젝트를 진행 중이고 서로 다른 배포 서버를 위한 두 개의 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.

게다가데비안/규칙문서:

#!/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

배포 대상 중 하나는 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 ...

무엇이 잘못되었고 어떻게 해결하나요?

================업데이트===================

내 것을 수정했습니다데비안/규칙파일은 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이는 인용이 수행되지 않고 변수의 데이터를 두 번 참조하기 때문입니다 (할당 시 한 번, 사용 시 한 번). 그 중 하나를 버리세요.

둘째, 작동하지 않는 이유는 debian/rules 파일(작성된 대로)이 dh_gencontrol원하는 추가 매개변수를 사용하여 호출하지 않기 때문입니다. 파일 debian/rules은 하나 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

둘째, configurebuild대상뿐만 아니라 configure-stamp및도 제거됩니다 build-stamp. dh이것을 사용하지 마십시오(보관하는 것은 정말 해롭습니다).

마지막으로 dpkg-parsechangelog 작업을 수행하여 version.txt 파일을 생성하는 또 다른 적용 범위 대상을 추가합니다. 실제 빌드 프로세스는 다를 수 있지만 이를 대체하는 방법을 보여줍니다.

관련 정보