web-dev-qa-db-ja.com

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

既存の_/debian/_フォルダーと_/debian/control_ファイルが含まれているソースコードフォルダーをダウンロードしたとします。

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

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

たとえば、行がBuild-Depends: debhelper (>= 8), faketimeを読み取る場合、_control-parse debian/control build-depends_をエコーするツール_debhelper faketime_はありますか?

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

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

11
adrelanos

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 <[email protected]>
 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)ですが、少しうるさいです。

4
Faheem Mitha

解析:

libdpkg-Perlのモジュールを使用します(dpkg-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

インストール:

devscriptsmk-build-depsを使用できます。

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
4

この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 
3
Jakob