Substvars não funciona corretamente

2

Editar : Arquivo debian / rules atualizado e debian / control

Eu estou trabalhando em um projeto web que precisa construir dois pacotes debian para diferentes servidores de implementação. A principal diferença é a limitação de dependências no arquivo debian / control . Então escrevi abaixo:

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.

E o arquivo debian / rules :

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

Um dos alvos de implantação é o Ubuntu 14.04 (Trusty), ele deve substituir o other-depends por PRE_XENIAL_LIBS . Mas eu tenho o arquivo de controle final para o servidor assim:

Depends: apache2, openssl, rsync, imagemagick, php, php-opcache, php-apcu, mysql-client, php-gettext, php-mysql, php-gd ...

O que há de errado e como corrigi-lo?

Atualizações =================

Eu modifiquei meu arquivo debian / rules com base na resposta de Wouter, mas ainda não obtive a substituição correta. Então eu corri o comando

dpkg-buildpackage

Em seguida, encontrou um aviso da saída:

dpkg-gencontrol: warning: Depends field of package web-app: unknown substitution variable ${other-depends}

Alguma pista?

    
por thinwa 21.06.2016 / 04:11

1 resposta

2

Primeiro de tudo, sua sintaxe está errada e resultará em uma linha de comando como ...

dh_gencontrol -- -Vdist:Depends=""php7.0, php7.0-opcache, ...""

em vez de (o que você deseja):

dh_gencontrol -- -Vdist:depends="php7.0, php7.0-opcache, ..."

isso ocorre porque make não cita, e você cita os dados na variável duas vezes (uma vez na atribuição, uma vez quando você a usa). Solte um deles.

Em segundo lugar, a razão pela qual não está funcionando é porque o seu arquivo debian / rules (como escrito) não invocará dh_gencontrol com os argumentos extras desejados. Um arquivo debian/rules é um Makefile ; portanto, deveria ter regras etc., caso contrário, elas são ignoradas. Algo assim faz o que é expetado na minha máquina:

#!/usr/bin/make -f
%:
        dh $@
PKGS := abcd, efgh
override_dh_gencontrol:
        dh_gencontrol -- -Vdist:Depends="$(LIBS)"

Se isso ainda não fizer o que você está esperando, um exemplo completo (ou seja, algo em que você pode executar dpkg-buildpackage on) é absolutamente necessário.

EDITAR : você ainda tem a dupla citação. As linhas XENIAL_LIBS e PRE_XENIAL_LIBS têm aspas em torno delas. Remova eles. Além disso, você ainda não forneceu um exemplo de que dpkg-buildpackage não irá reclamar (por um lado, o arquivo de controle está incompleto). Não tem que ser o que você está trabalhando é que contém segredos da empresa, mas um exemplo mínimo que demonstra o problema é essencial. Com o que você forneceu até agora, não consigo reproduzir seu problema.

EDIT2 : seu arquivo de regras completo mostra que você está usando o CDBS, não o dh do debhelper. Dessa forma, a meta override_dh_gencontrol não está sendo chamada (essa é uma coisa dh -específica). Eu não sei como o CDBS lida com a substituição de comandos individuais de debhelper (é por isso que eu não respondi a isso antes do meu feriado, esperando que talvez alguém possa lhe dizer o que fazer), mas provavelmente é algo parecido com outro Variável CDBS_FOO_BAR que você deve definir. Felizmente, o seu arquivo debian/rules é simples o suficiente para que a porta do cdbs seja bastante simples. Aplique o seguinte patch:

--- 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

Primeiro, isso inclui a inclusão de CDBS e a variável DEB_DH_INSTALL_ARGS específica de CDBS, que dh não suporta, e adiciona o% curinga Makefile target que dh requer em seu lugar. Ele também adiciona o override_dh_install target, que substitui a variável DEB_DH_INSTALL_ARGS .

Em segundo lugar, isso elimina as segmentações configure e build , bem como as configure-stamp e build-stamp . dh não os usa (e é, na verdade, prejudicial retê-los).

Finalmente, adicionamos outro alvo de substituição que faz a coisa dpkg-parsechangelog para criar seu arquivo version.txt. Seu processo de criação real provavelmente é outra coisa, mas isso mostra como substituí-lo.

    
por 21.06.2016 / 19:03