http://chat.stackexchange.com/transcript/message/1313226#1313226 chat sessionを読んで、ローカルで使用するバイナリパッケージを作成しています。リストに記載されている手順に従いました。
My environment:
ubuntu 12.04
Project: MakeFile based C++ project which contains several sub directories and creating several shared libraries.
以下の手順は次のとおりです。
dh_make --createorig
を実行します。この手順により、debianフォルダー内のパッケージに必要なファイルが生成されました./debianフォルダー内のファイルのリスト
source //folder
compat
rules
copyright
changelog
control
install
以下は重要なファイルの内容です。
$猫コントロール
Source: cscore
Section: misc
Priority: extra
Maintainer: dwft78 <[email protected]>
Build-Depends: debhelper (>= 8.0.0), autotools-dev
Standards-Version: 3.9.2
Homepage: <insert the upstream URL, if relevant>
Package: cscore
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: CoreScanner
CoreScanner for Ubuntu-12.04
$猫のインストール
/opt/installation-dir/bin/
バイナリファイルをインストールする場所です。
猫の変更ログ
cscore (1.0-1) precise; urgency=low
* Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP>
-- name <[email protected]> Wed, 28 May 2014 14:16:29 +0530
$猫のルール
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@
最後にdebuild
コマンドを実行しましたが、以下のエラーが発生しました。
find /home/dwft78/project/cscore/cscore-1.0/lib -name "libcs*" -type f -exec cp -f {} /home/dwft78/project/cscore/cscore-1.0/debian/cscore/opt/Motorola-scanner//bin \;
find /home/dwft78/project/cscore/cscore-1.0/lib -name "libcs*" -type l -exec cp -Rf {} /home/dwft78/project/cscore/cscore-1.0/debian/cscore/opt/Motorola-scanner//bin \;
make[1]: Leaving directory `/home/dwft78/project/cscore/cscore-1.0'
dh_install
cp: cannot stat `debian/tmp//opt/Motorola-scanner/bin/': No such file or directory
dh_install: cp -a debian/tmp//opt/Motorola-scanner/bin/ debian/cscore///opt/Motorola-scanner/ returned exit code 1
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2
実際には、tmpというフォルダーが作成されていませんdebianフォルダー内debhelperは、debuildコマンドの実行ステータスがdh_installレベルまで続いていることに注目しました。上記のファイルセットを除き、出力ファイルも作成されます。
$ cat cscore.debhelper.log
dh_auto_configure
dh_auto_build
dh_auto_test
dh_prep
dh_installdirs
dh_auto_install
誰か助けてください。 -ありがとう。
dh_install のmanページにあるように、dh_install
の目的とそれが読み取るファイルは通常、次の2つの目的のいずれかに使用されます。
バイナリパッケージに必要なすべてのファイルを適切なディレクトリに既にビルドおよびインストールできるビルドシステムがあり、ソースから1つのバイナリパッケージのみをビルドする場合、debian/install
ファイルは不要です。まったく。
あなたはMakefile
ベースのプロジェクトで作業していると言いました。 make all
やmake install
などの標準ターゲットをサポートし、インストール時に$DESTDIR
変数を尊重する限り、debian/install
はまったく必要ありません。
実際、投稿した出力では、dh_install
の直前に実行されるfind
で始まる2行が表示されています。私はそれがあなたのプロジェクトのmake install
ターゲットを実行していると仮定し、それはすでに正しいパス、つまりdebian/cscore/opt/Motorola-scanner/bin
にファイルをインストールしているように見えます。したがって、あなたのビルドはdebian/install
なしでも動作する可能性があると思います。
さて、私は問題を理解しています。
ケースA
パッケージが1つしかない場合、dh_auto_installはdebian/<project-name>
の下にパッケージを配置します。
ケースB
ただし、複数のパッケージ(つまり、複数のdebian/tmp
ファイルとcontrol
ファイル内の複数のパッケージ宣言がある場合)はblah.install
の下に配置されます。
こちらの情報をご覧ください:
http://manpages.ubuntu.com/manpages/trusty/en/man1/dh_auto_install.1.html
どういうわけか、dh_install
はdebian/tmp
の下にあるファイルのみをピックアップし、パッケージが1つしかない場合は完全に失敗します。したがって、dh_install
の実行はおそらく必要ありません...しかし、pdebuilder-dist
を使用する場合、デフォルトで実行されます。
ソリューション
dh_install
のオーバーライドがあるため、問題が発生します。
override_dh_install:
@echo "skip dh_install"