web-dev-qa-db-fra.com

Quel est le but et le rôle du fichier de règles dans les paquets Debian?

J'essaie de mettre au paquet Debian mon application C++ développée à l'aide de Netbeans 7.3. Voici un peu de Makefile de celui-ci.

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

Je suis COMMENT CRÉER UN PAQUET .DEB et Guide du nouveau responsable Debian . Quand j’exécute dpkg-buildpackage -rfakeroot après avoir suivi toutes les étapes ci-dessus, j’ai rencontré l’erreur suivante

$ 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

at http://www.debian.org/doc/manuals/maint-guide/dreq.en.html#defaultrules il n'y a pas d'explication sur le rôle du fichier rules. Qu'est-ce que

%:
    dh $@

signifier? Pourquoi dpkg-buildpackage -rfakeroot dit-il dh: No packages to build.?

7
Necktwi

Le fichier rules est ce qui fait tout le travail pour créer le paquet. C'est un Makefile avec des cibles pour compiler et installer l'application, puis créez le fichier .deb à partir des fichiers installés. Il a également pour objectif de nettoyer tous les fichiers de construction de sorte que vous ne vous retrouviez qu'avec un paquet source. Comme le manuel de politique Debian le dit:

Ce fichier doit être un fichier makefile exécutable et contient les recettes spécifiques au package pour la compilation du package et la création du ou des packages binaires à partir de la source.

C'est gentil et tout, mais ce qui se passe réellement ici:

%:
    dh $@

dh est une commande d'assistance qui appelle d'autres cibles Make et exécute une série de commandes debhelper. As sa page de manuel Manpage icon le décrit:

   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.

Encore une fois, c’est juste un fichier d’aide pour simplifier les choses. Vous n'avez pas réellement besoin de l'utiliser, mais cela vous simplifie la vie. Pour voir quelles commandes sont réellement exécutées dans chaque cible, exécutez:

dh binary-Arch --no-act

Passons maintenant à votre problème spécifique ... Je ne pense pas que cela ait quelque chose à voir avec votre fichier rules. Sans voir le paquet source, il est difficile de dire avec certitude quel est le problème. Bien que je risque de deviner qu'il n'y a pas de strophe de paquetage binaire dans votre fichier debian/control. Dans l'extrait suivant, la première section décrit le paquet source, tandis que la seconde décrit le paquet binaire qu'il va créer:

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).
4
andrewsomething

L’erreur très importante que j’ai commise dans la Makefile n’utilise pas $(DESTDIR). Je le publie pour aider ceux qui ont du mal à construire le paquet Debian avec cette erreur commune. Donc, la bonne Makefile devrait être:

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

Si certaines cibles make échouent, il peut être utile de remplacer la cible dh_make correspondante dans le fichier rules pour réussir la mise en package.

override_dh_auto_test:
%:
    dh clean
    dh binary

la cible test dans mon application génère une erreur et ce n'est pas important, j'ai donc remplacé dh_auto_test.

Et n'oubliez pas de nettoyer tous les fichiers de trace laissés par vos essais ayant échoué avant un nouvel essai.

0
Necktwi