web-dev-qa-db-ja.com

ライブラリパッケージの作成に関する問題

共有ライブラリのパッケージを作成するのに問題があります。

dh_makeを実行し、ファイルを編集しました。ただし、パッケージをビルドすると、次の結果が得られます。

 ****** @ ******-laptop:〜/ Documents/temp/jsoncpp/jsoncpp-0.5.0 $ debuild 
 dpkg-buildpackage -rfakeroot -D -us -uc 
 dpkg-buildpackage:CFLAGSをデフォルト値に設定:-g -O2 
 dpkg-buildpackage:CPPFLAGSをデフォルト値に設定:
 dpkg-buildpackage:LDFLAGSをデフォルト値に設定:-Wl、-Bsymbolic-functions 
 dpkg-buildpackage:FFLAGSをデフォルト値に設定:-g -O2 
 dpkg-buildpackage:CXXFLAGSをデフォルト値に設定:-g -O2 
 dpkg-buildpackage:ソースパッケージjsoncpp 
 dpkg-buildpackage:ソースバージョン0.5.0-1 
 dpkg-buildpackage:ソースは****** 
 dpkg-buildpackageによって変更されました:ホストアーキテクチャAMD64 
 fakeroot debian/rules clean 
 dh clean 
 dh_testdir 
 dh_auto_clean 
 dh_clean 
 dpkg-source -b jsoncpp -0.5.0 
 dpkg-source:info:ソースフォーマット「1.0」を使用
 dpkg-source:info:既存のjsoncpp_0.5.0.orig.tar.gz 
を使用してjsoncppを構築dpkg-source:info:jsoncpp_0.5でjsoncppを構築しています。 0-1.diff.gz 
 dpkg-source:情報:jsoncpp_0.5.0-1.dsc 
でjsoncppを構築するdebian/rules build 
 dh build 
 dh_testdir 
 dh_auto_configure 
 dh_auto_build 
 make [1]:ディレクトリ `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'[.____に入る。] test -d obj || mkdir obj 
 g ++ -I ./include -c -o obj/json_reader.o src/lib_json/json_reader.cpp 
 g ++ -I ./include -c -o obj/json_writer.o src /lib_json/json_writer.cpp
g++ -I ./include -c -o obj/json_value.o src/lib_json/json_value.cpp 
 ar -r libjsoncpp.a obj/json_reader.o obj /json_writer.o obj/json_value.o 
 ar:libjsoncpp.a 
 make [1]の作成:ディレクトリ `/ home/******/Documents/temp/jsoncpp/jsoncppを離れる-0.5.0 '
 dh_auto_test 
 fakeroot debian/rules binary 
 dh binary 
 dh_testroot 
 dh_prep 
 dh_installdirs 
 dh_auto_install 
 make [1]:ディレクトリ `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
Sudo cp -r include/jsonに入る- -target-directory =/usr/include 
エラー:ld.so:LD_PRELOADのオブジェクト 'libfakeroot-sysv.so'をプリロードできません:無視されます。
 cp libjsoncpp.a/usr/lib/libjsoncpp.a 
 cp:通常のファイル `/usr/lib/libjsoncpp.a 'を作成できません:許可が拒否されました
 make [1]:*** [i nstall]エラー1 
 make [1]:ディレクトリ `/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0'
dh_auto_installを終了:make -j1 install DESTDIR =/home/******/Documents/temp/jsoncpp/jsoncpp-0.5.0/debian/tmpが終了コード2 
 makeを返しました:*** [バイナリ]エラー29 
 dpkg-buildpackage:エラー:fakeroot debian/rulesバイナリはエラー終了ステータス2 
 debuildを与えました:1340行で致命的なエラー:
 dpkg-buildpackage -rfakeroot -D -us -uc failed 

問題はここにあるようです:

エラー:ld.so:LD_PRELOADのオブジェクト 'libfakeroot-sysv.so'をプリロードできません:無視されました。
cp libjsoncpp.a /usr/lib/libjsoncpp.a
cp:通常のファイル `/usr/lib/libjsoncpp.a 'を作成できません:許可が拒否されました

...しかし、私は問題が何であるか微妙な考えを持っていません。

必要に応じて、メイクファイルは here です。

7
Nathan Osman

使用しているMakefileはDESTDIR変数を考慮していません-ビルド時にパッケージを/ usrに直接インストールするのではなく、一時ツリーにファイルを配置する必要があります。 Makefileを自分で追加したことは既に述べましたが、通常は、すべてのインストールパスのプレフィックスとしてDESTDIR変数を使用する必要があります。パッケージのビルド手順を確認すると、パッケージはビルドシステムとしてsconsを使用します。これは、makeのソートの代わりになります。 dh_makeにはおそらくこれでパッケージをビルドするためのテンプレートがないので、yafrayなどのビルドに使用するパッケージを探し、debian/rulesを見てください

パッケージのビルドは決してrootとして行われないため、疑いを持たない開発者のシステムでパッケージをビルドする際に、パッケージで重要なファイルを上書きするよりも、このエラーを表示して修正する方が適切です。

4
ajmitch

問題を理解したように、ここにあります:

cp libjsoncpp.a /usr/lib/libjsoncpp.a

debbuildを通常のユーザーとして呼び出していますが、そのユーザーはそのディレクトリに書き込む権限がありません。 Sudo debbuildを試せばうまくいくはずです。

0
qbi