web-dev-qa-db-ja.com

dh_installでcpを使用してdebuildが失敗しました: `debian / tmp // path / to / install / bin / 'を統計できません:そのようなファイルまたはディレクトリはありません

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.

以下の手順は次のとおりです。

  1. gpg --gen-keyを使用してgpgキーを作成します
  2. パッケージ化に必要なディレクトリ(名前バージョンのパッケージのフォルダ、debianサブフォルダ)を作成し、コンソールでdh_make --createorigを実行します。この手順により、debianフォルダー内のパッケージに必要なファイルが生成されました
  3. ./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

誰か助けてください。 -ありがとう。

3
Dig The Code

dh_install のmanページにあるように、dh_installの目的とそれが読み取るファイルは通常、次の2つの目的のいずれかに使用されます。

  • 単一のソースから複数のバイナリパッケージに入るファイルを指定します。または
  • パッケージビルドシステムで処理されないファイルをインストールするか、ファイルを別のディレクトリに移動します

バイナリパッケージに必要なすべてのファイルを適切なディレクトリに既にビルドおよびインストールできるビルドシステムがあり、ソースから1つのバイナリパッケージのみをビルドする場合、debian/installファイルは不要です。まったく。

あなたはMakefileベースのプロジェクトで作業していると言いました。 make allmake installなどの標準ターゲットをサポートし、インストール時に$DESTDIR変数を尊重する限り、debian/installはまったく必要ありません。

実際、投稿した出力では、dh_installの直前に実行されるfindで始まる2行が表示されています。私はそれがあなたのプロジェクトのmake installターゲットを実行していると仮定し、それはすでに正しいパス、つまりdebian/cscore/opt/Motorola-scanner/binにファイルをインストールしているように見えます。したがって、あなたのビルドはdebian/installなしでも動作する可能性があると思います。

3
Mike Miller

さて、私は問題を理解しています。

ケース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_installdebian/tmpの下にあるファイルのみをピックアップし、パッケージが1つしかない場合は完全に失敗します。したがって、dh_installの実行はおそらく必要ありません...しかし、pdebuilder-distを使用する場合、デフォルトで実行されます。

ソリューション

dh_installのオーバーライドがあるため、問題が発生します。

override_dh_install:
    @echo "skip dh_install"
0
Alexis Wilke