debian / controlからビルド依存関係をインストール/解析する方法は?


11

既存の/debian/フォルダーと/debian/controlファイルを含むソースコードフォルダーをダウンロードしたとします。

問題のパッケージがDebian公式リポジトリにないため、使用apt-get build-depできないとします。

Build-Depends:行を解析する方法は?

たとえば、行がと表示される場合、エコーBuild-Depends: debhelper (>= 8), faketimeするツールはありますか?control-parse debian/control build-dependsdebhelper faketime

特にマルチラインの時は?

既存のDebianツールはありますか、またはこれを解析するための独自のコードを作成するツールがありますか?

回答:


4

使用できますdpkg-checkbuilddeps。マンページは言う

このプログラムは、システムにインストールされているパッケージを、制御ファイルにリストされているビルドの依存関係およびビルドの競合と照合します。満たされていないものがある場合は、それらを表示し、ゼロ以外の戻りコードで終了します。

例えば:

faheem@orwell:/usr/local/src/julia/julia-0.3.2$ dpkg-checkbuilddeps
dpkg-checkbuilddeps: Unmet build dependencies: libopenblas-dev (>= 0.2.10-1~) libopenlibm-dev libopenspecfun-dev (>= 0.4~) patchelf python-sphinx-rtd-theme

しかし、あなたはまた、単に(例えば)を使用して、パッケージをビルドしようとすることができdebuild、例えば

faheem@orwell:/usr/local/src/julia/julia-0.3.2$ debuild -uc -us
 dpkg-buildpackage -rfakeroot -D -us -uc
dpkg-buildpackage: source package julia
dpkg-buildpackage: source version 0.3.2-1
dpkg-buildpackage: source changed by Sébastien Villemot <sebastien@debian.org>
 dpkg-source --before-build julia-0.3.2
dpkg-buildpackage: host architecture amd64
dpkg-checkbuilddeps: Unmet build dependencies: libopenblas-dev (>= 0.2.10-1~) libopenlibm-dev libopenspecfun-dev (>= 0.4~) patchelf python-sphinx-rtd-theme
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
debuild: fatal error at line 1357:
dpkg-buildpackage -rfakeroot -D -us -uc failed

(を使用しているためdpkg-checkbuilddeps)同じ情報が得られますが、少しうるさくなります。


dpkg-checkbuilddeps満たされていないビルド依存関係のみを出力します。一般的なケースでの解析に関する私の答えを参照してください。
Evgeny Vereshchagin 2015

4

解析:

からのモジュールを使用libdpkg-perldpkg-checkbuilddeps内部でそれらのモジュールを使用)

次の行をソースパッケージのルートに追加しprint-build-depsて実行print-build-depsします。

#!/usr/bin/perl
use strict;
use warnings;

use Dpkg::Control::Info;
use Dpkg::Deps;

my $control = Dpkg::Control::Info->new();
my $fields = $control->get_source();
my $build_depends = deps_parse($fields->{'Build-Depends'});
print deps_concat($build_depends) . "\n";

以下も参照してください。

perldoc Dpkg::Control::Info
perldoc Dpkg::Deps

インストール:

mk-build-depsから使用できますdevscripts

apt-get install devscripts
apt-get install equivs
cd project-root # project-root contains debian/control
mk-build-deps -i

man mk-build-deps 言う:

mk-build-deps - build a package satisfying a package's build-dependencies
-i, --install
       Install the generated packages and its build-dependencies

これはコンテキストからのツールを使用するため、クリーンなソリューションのように見え、より堅牢になる可能性があります。最近のDebianでは(少なくとも)パッケージdevscripts が必要でequivs、一時パッケージmyproject-build-depsを生成してインストールします。ちょうどアンインストール:これは、あなたのマシンでビルド時の依存関係を維持するために意図していない場合はいいですdevscriptsequivsmyproject-build-deps
ステフェイン・グーリッホン

3

このPerlワンライナーを使用して、以下の依存関係を解析できますdebian-control

perl -ne 'next if /^#/; $p=(s/^Build-Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control 

または

perl -ne 'next if /^#/; $p=(s/^Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control 

この一行のおかげで、解析された依存関係のインストールはと同じくらい簡単apt-get install $(perl -ne 'next if /^#/; $p=(s/^Build-Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control)'です。依存関係は手動でインストールされたものとしてマークされるため、ビルド環境に固定されることに注意してください。これは使い捨てビルド環境(chroot、docker)では重要ではありませんが、通常の環境でビルドすると、ビルド時の依存関係パッケージが残ります。一部のパッケージではかなり大きくなる場合があります。
ステフェイン・グーリッホン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.