it-swarm.com.de

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

Ich versuche, meine mit Hilfe von Netbeans 7.3 entwickelte C++ - Anwendung zu debianisieren. Hier ist etwas von Makefile davon.

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 WIE ERSTELLE ICH EIN DEB-PAKET und Debian New Maintainer's Guide . Wenn ich dpkg-buildpackage -rfakeroot nach erfolgreichem Abschluss aller obigen Schritte ausführe, ist folgender 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 was Die Rolle der rules -Datei ist. Was macht

%:
    dh [email protected]

bedeuten? Warum sagt dpkg-buildpackage -rfakerootdh: No packages to build.?

7
Necktwi

Die rules -Datei erledigt die gesamte Arbeit für die eigentliche Erstellung des Pakets. Es ist ein Makefile mit Zielen zum Kompilieren und Installieren der Anwendung und zum Erstellen der .deb -Datei aus den installierten Dateien. Es hat auch ein Ziel, um alle Build-Dateien zu bereinigen, so dass Sie wieder nur ein Quellpaket haben. Wie das Debian-Richtlinienhandbuch 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 [email protected]

dh ist ein Hilfsbefehl, der andere Make-Ziele aufruft und eine Reihe von debhelper Befehlen ausführt. As seine Manpage Manpage icon beschreibt es:

   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 zur Vereinfachung. Sie brauchen es nicht wirklich zu benutzen, aber es macht Ihr Leben viel einfacher. Um zu sehen, welche Befehle tatsächlich in jedem Ziel ausgeführt werden, führen Sie Folgendes aus:

dh binary-Arch --no-act

Nun zu Ihrem speziellen Problem ... Ich glaube, es hat nichts mit Ihrer rules -Datei zu tun. Ohne das eigentliche Quellpaket zu sehen, ist es schwer mit Sicherheit zu sagen, worum es geht. Obwohl ich vermuten könnte, dass Ihre debian/control -Datei keine Zeilengruppe für Binärpakete enthält. Im folgenden Snippet beschreibt die erste Zeilengruppe das Quellpaket, während die zweite das zu erstellende Binärpaket beschreibt:

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

Der sehr wichtige Fehler, den ich bei Makefile gemacht habe, ist, $(DESTDIR) nicht zu verwenden. Ich poste es, um denjenigen zu helfen, die Schwierigkeiten haben, ein Debian-Paket mit diesem häufigen Fehler zu erstellen. Das richtige Makefile sollte 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 make Ziele fehlschlagen, kann das Überschreiben des entsprechenden dh_make-Ziels in der rules Datei zu einem erfolgreichen Packen beitragen.

override_dh_auto_test:
%:
    dh clean
    dh binary

das test -Ziel in meiner Anwendung gibt einen Fehler aus und ist nicht wichtig. Daher habe ich dh_auto_test überschrieben.

Und denken Sie daran, vor einem erneuten Versuch alle von Ihren fehlgeschlagenen Versuchen zurückgelassenen Trace-Dateien zu bereinigen.

0
Necktwi