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.
?
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 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).
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.