web-dev-qa-db-ja.com

Debianパッケージングでのルールファイルの目的と役割は何ですか

Netbeans 7.3を使用して開発したC++アプリケーションをdebianパッケージ化しようとしています。ここにMakefileのビットがあります。

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

。DEBパッケージの作成方法Debian New Maintainer's Guide をフォローしています。上記のすべての手順を正常に完了した後にdpkg-buildpackage -rfakerootを実行すると、次のエラーが発生しました

$ 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

http://www.debian.org/doc/manuals/maint-guide/dreq.en.html#defaultrulesrulesファイルの役割についての説明はありません。何をする

%:
    dh $@

平均? dpkg-buildpackage -rfakerootdh: No packages to build.と言うのはなぜですか?

7
Necktwi

rulesファイルは、実際にパッケージを作成するためのすべての作業を行うものです。これは、アプリケーションをコンパイルしてインストールし、インストールされたファイルから.debファイルを作成するためのターゲットを持つMakefileです。また、すべてのビルドファイルをクリーンアップするためのターゲットもあるため、ソースパッケージだけが再び作成されます。 Debian Policy Manual のように:

このファイルは実行可能なメイクファイルである必要があり、パッケージをコンパイルしてソースからバイナリパッケージをビルドするためのパッケージ固有のレシピが含まれています。

それは素晴らしいことですが、実際にはここで何が起こっていますか:

%:
    dh $@

dhは、他のMakeターゲットを呼び出し、一連のdebhelperコマンドを実行するヘルパーコマンドです。 As そのマンページ Manpage icon それについて説明します:

   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.

繰り返しますが、これは単純化するための単なるヘルパーファイルです。実際に使用する必要はありませんが、あなたの生活がずっと楽になります。各ターゲットで実際に実行されるコマンドを確認するには、次を実行します。

dh binary-Arch --no-act

今、あなたの特定の問題について...あなたのrulesファイルとは何の関係もないと思います。実際のソースパッケージを見ることなく、問題が何であるかを確実に言うことは困難です。 debian/controlファイルにバイナリパッケージスタンザがないと推測するのは危険ですが。次のスニペットでは、最初の「スタンザ」はソースパッケージを記述し、2番目はビルドするバイナリパッケージを記述します。

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

Makefileで犯した非常に重要な間違いは、$(DESTDIR)を使用していないことです。このよくある間違いでdebianパッケージを構築するのに苦労している人々を助けるために私はそれを投稿しています。したがって、正しいMakefileは次のようになります。

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

一部のmakeターゲットがrulesファイル内の対応するdh_makeターゲットのオーバーライドに失敗した場合、パッケージングが成功する可能性があります。

override_dh_auto_test:
%:
    dh clean
    dh binary

私のアプリケーションのtestターゲットはエラーを出しているので重要ではないので、dh_auto_testをオーバーライドしました。

また、新しい試行の前に、失敗した試行によって残されたすべてのトレースファイルをクリーンアップすることを忘れないでください。

0
Necktwi