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 -rfakeroot
がdh: No packages to build.
と言うのはなぜですか?
rules
ファイルは、実際にパッケージを作成するためのすべての作業を行うものです。これは、アプリケーションをコンパイルしてインストールし、インストールされたファイルから.deb
ファイルを作成するためのターゲットを持つMakefileです。また、すべてのビルドファイルをクリーンアップするためのターゲットもあるため、ソースパッケージだけが再び作成されます。 Debian Policy Manual のように:
このファイルは実行可能なメイクファイルである必要があり、パッケージをコンパイルしてソースからバイナリパッケージをビルドするためのパッケージ固有のレシピが含まれています。
それは素晴らしいことですが、実際にはここで何が起こっていますか:
%:
dh $@
dh
は、他のMakeターゲットを呼び出し、一連のdebhelper
コマンドを実行するヘルパーコマンドです。 As そのマンページ それについて説明します:
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).
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
をオーバーライドしました。
また、新しい試行の前に、失敗した試行によって残されたすべてのトレースファイルをクリーンアップすることを忘れないでください。