Was ist der Zweck und die Rolle der Regeldatei in der Debian-Verpackung?

7

Ich versuche, meine mit Hilfe von Netbeans 7.3 entwickelte C ++ - Anwendung zu debianen. Hier ist ein bisschen Makefiledavon.

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

Ich folge dem Erstellen eines .DEB-Pakets und dem Debian New Maintainer-Handbuch . Wenn ich dpkg-buildpackage -rfakerootnach erfolgreichem Ausführen aller oben genannten Schritte ausgeführt werde, ist der folgende Fehler aufgetreten

$ 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

Unter http://www.debian.org/doc/manuals/maint-guide/dreq.en.html#defaultrules gibt es keine Erklärung für die Rolle der rulesDatei. Was macht

%:
    dh $@

bedeuten? Warum dpkg-buildpackage -rfakerootsagt dh: No packages to build.?

Necktwi
quelle

Antworten:

4

Die rulesDatei erledigt die gesamte Arbeit, um das Paket tatsächlich zu erstellen. Es ist ein Makefile mit Zielen zum Kompilieren und Installieren der Anwendung und zum Erstellen der .debDatei aus den installierten Dateien. Es hat auch das Ziel, alle Build-Dateien zu bereinigen, sodass Sie wieder nur ein Quellpaket erhalten. Wie das Debian Policy Manual es ausdrückt:

Diese Datei muss ein ausführbares Makefile sein und enthält die paketspezifischen Rezepte zum Kompilieren des Pakets und zum Erstellen von Binärpaketen aus der Quelle.

Das ist schön und alles, aber was ist hier eigentlich los:

%:
    dh $@

dhist ein Hilfsbefehl, der andere Make-Ziele aufruft und eine Reihe von debhelperBefehlen ausführt. Wie seine Manpage esManpage-Symbol beschreibt:

   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.

Auch hier handelt es sich nur um eine Hilfsdatei, um die Dinge zu vereinfachen. Sie brauchen es eigentlich nicht zu benutzen, aber es macht Ihr Leben viel einfacher. Führen Sie Folgendes aus, um zu sehen, welche Befehle in den einzelnen Zielen tatsächlich ausgeführt werden:

dh binary-arch --no-act

Nun zu Ihrem spezifischen Problem ... Ich glaube, es hat nichts mit Ihrer rulesDatei zu tun . Ohne das eigentliche Quellpaket zu sehen, ist es schwer mit Sicherheit zu sagen, um welches Problem es sich handelt. Ich würde allerdings vermuten, dass Ihre debian/controlDatei keine Zeilengruppe für Binärpakete enthält. Im folgenden Snippet beschreibt die erste 'Zeilengruppe' das Quellpaket, während die zweite das Binärpaket beschreibt, das erstellt wird:

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).
andrewsomething
quelle
$ dh binary-arch --no-actsagtdh: No packages to build.
Necktwi
@neckTwi Ist die Verpackung irgendwo ein VCS?
Andrews etwas
sry ich habe einen fehler gemacht. Ich habe den origin der vorherigen Testversion erstellten Tarball nicht entfernt . Aber ich bin auf ein anderes Problem
gestoßen,
0

Der sehr wichtige Fehler, den ich in der gemacht habe, Makefileist nicht zu verwenden $(DESTDIR). Ich poste es, um denjenigen zu helfen, die Schwierigkeiten haben, ein Debian-Paket mit diesem häufigen Fehler zu erstellen. Das Richtige Makefilesollte also sein:

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

Wenn einige makeZiele nicht überschrieben werden können, kann das Überschreiben des entsprechenden dh_make-Ziels in der rulesDatei zum erfolgreichen Packen beitragen.

override_dh_auto_test:
%:
    dh clean
    dh binary

Das testZiel in meiner Anwendung gibt einen Fehler aus und es ist nicht wichtig, daher habe ich ihn überschrieben dh_auto_test.

Denken Sie auch daran, alle Trace-Dateien zu bereinigen, die Ihre fehlgeschlagenen Versuche vor einem neuen Versuch hinterlassen haben.

Necktwi
quelle