qual é o propósito e função do arquivo de regras no pacote debian

6

Estou tentando o pacote debian meu aplicativo C ++ desenvolvido com o auxílio do NetBeans 7.3. Aqui está um pouco de Makefile disso.

APPNAME=remotedevicecontroller
install:
    install config.xml /etc/${APPNAME}.conf.xml
    install devices.rules /etc/udev/rules.d/${APPNAME}.rules
    install error.log /var/log/${APPNAME}.log
    install init.conf /etc/init/${APPNAME}.conf
    install init.d /etc/init.d/${APPNAME}
    install ${CND_ARTIFACT_NAME_${CONF}} /usr/local/bin/${APPNAME}
    chmod u+x ${CND_ARTIFACT_NAME_${CONF}}
    ./${CND_ARTIFACT_NAME_${CONF}} -i

Estou seguindo COMO CRIAR UM PACOTE .DEB e Guia do Novo Mantenedor Debian . Quando executo dpkg-buildpackage -rfakeroot após concluir com êxito todas as etapas acima que encontrei após o erro

$ dpkg-buildpackage -rfakeroot
dpkg-buildpackage: source package remotedevicecontroller
dpkg-buildpackage: source version 1.0-1
dpkg-buildpackage: source changed by satya gowtham kudupudi (gowtham) <[email protected]>
dpkg-buildpackage: host architecture i386
 dpkg-source --before-build remotedevicecontroller-1.0
 fakeroot debian/rules clean
dh clean
dh: No packages to build.
 dpkg-source -b remotedevicecontroller-1.0
dpkg-source: info: using source format '3.0 (quilt)'
dpkg-source: info: building remotedevicecontroller using existing ./remotedevicecontroller_1.0.orig.tar.gz
dpkg-source: info: building remotedevicecontroller in remotedevicecontroller_1.0-1.debian.tar.gz
dpkg-source: info: building remotedevicecontroller in remotedevicecontroller_1.0-1.dsc
 debian/rules build
dh build
dh: No packages to build.
 fakeroot debian/rules binary
dh binary
dh: No packages to build.
 signfile remotedevicecontroller_1.0-1.dsc

You need a passphrase to unlock the secret key for
user: "satya gowtham kudupudi (gowtham) <[email protected]>"
2048-bit RSA key, ID 9A2853A0, created 2013-08-22

gpg: gpg-agent is not available in this session

 dpkg-genchanges  >../remotedevicecontroller_1.0-1_i386.changes
dpkg-genchanges: error: cannot read files list file: No such file or directory
dpkg-buildpackage: error: dpkg-genchanges gave error exit status 2

em link não há explicação para qual o papel do rules arquivo é. O que faz

%:
    dh $@

significa? Por que dpkg-buildpackage -rfakeroot diz dh: No packages to build. ?

    
por neckTwi 23.08.2013 / 15:22

2 respostas

4

O arquivo rules é o que faz todo o trabalho para realmente criar o pacote. É um Makefile com os destinos para compilar e instalar o aplicativo e, em seguida, criar o arquivo .deb dos arquivos instalados. Ele também tem um destino para limpar todos os arquivos de compilação, para que você acabe com apenas um pacote de origem novamente. Como o Manual de Políticas Debian diz:

  

Este arquivo deve ser um makefile executável e contém o   receitas específicas do pacote para compilar o pacote e construir o binário   pacote (s) da fonte.

Isso é bom e tudo mais, mas o que realmente está acontecendo aqui:

%:
    dh $@

dh é um comando auxiliar que chama outros destinos do Make e executa uma série de comandos debhelper . Como sua página de manual descreve:

   dh runs a sequence of debhelper commands. The supported sequences
   correspond to the targets of a debian/rules file: build-arch, build-
   indep, build, clean, install-indep, install-arch, install, binary-arch,
   binary-indep, and binary.

Novamente, é apenas um arquivo auxiliar para simplificar as coisas. Você não precisa usá-lo, mas torna sua vida muito mais fácil. Para ver quais comandos são realmente executados em cada destino, execute:

dh binary-arch --no-act

Agora, para o seu problema específico ... não acho que tenha algo a ver com o seu arquivo rules . Sem ver o pacote fonte real, é difícil dizer com certeza qual é o problema. Embora eu arrisque adivinhar que não há uma sub-rotina de pacotes binários no seu arquivo debian/control . No trecho a seguir, a primeira 'sub-rotina' descreve o pacote de origem, enquanto a segunda descreve o pacote binário que será criado:

Source: hello
Section: devel
Priority: optional
Maintainer: Ubuntu Developers <[email protected]>
XSBC-Original-Maintainer: Jane Doe <[email protected]>
Standards-Version: 3.9.1
Build-Depends: debhelper (>= 7)
Homepage: http://www.gnu.org/software/hello/

Package: hello
Architecture: any
Depends: ${shlibs:Depends}
Description: The classic greeting, and a good example
 The GNU hello program produces a familiar, friendly greeting. It
 allows non-programmers to use a classic computer science tool which
 would otherwise be unavailable to them. Seriously, though: this is
 an example of how to do a Debian package. It is the Debian version of
 the GNU Project's 'hello world' program (which is itself an example
 for the GNU Project).
    
por andrewsomething 23.08.2013 / 18:04
0

O erro muito importante que cometi no Makefile não está usando $(DESTDIR) . Eu estou postando para ajudar aqueles que lutam para construir o pacote debian com este erro comum. Portanto, o Makefile correto deve ser:

APPNAME=remotedevicecontroller
install:
    install config.xml ${DESTDIR}/etc/${APPNAME}.conf.xml
    install devices.rules ${DESTDIR}/etc/udev/rules.d/${APPNAME}.rules
    install error.log ${DESTDIR}/var/log/${APPNAME}.log
    install init.conf ${DESTDIR}/etc/init/${APPNAME}.conf
    install init.d ${DESTDIR}/etc/init.d/${APPNAME}
    install ${CND_ARTIFACT_NAME_${CONF}} ${DESTDIR}/usr/local/bin/${APPNAME}
    chmod u+x ${CND_ARTIFACT_NAME_${CONF}}
    ./${CND_ARTIFACT_NAME_${CONF}} -i

Se alguns destinos make falharem ao substituir o destino dh_make correspondente no arquivo rules , isso poderá ajudar no empacotamento bem-sucedido.

override_dh_auto_test:
%:
    dh clean
    dh binary

o test target no meu aplicativo está dando erro e não é importante, então eu substituí o dh_auto_test .

E lembre-se de limpar todos os arquivos de rastreamento deixados pelos testes que falharam antes de uma nova tentativa.

    
por neckTwi 05.09.2013 / 13:24