如何从debian / control安装/解析构建依赖关系?


11

假设您下载了一个源代码文件夹,其中包含一个现有的/debian/文件夹以及/debian/control文件。

假设有问题的软件包不在Debian官方存储库中,因此apt-get build-dep无法使用。

如何解析Build-Depends:线?

例如,如果该行显示为Build-Depends: debhelper (>= 8), faketime,是否有某些工具control-parse debian/control build-depends会回显debhelper faketime

特别是多线时?

是否有现有的Debian工具或有一个编写自己的代码来对此进行解析的工具?

Answers:


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

4

解析:

使用中的模块libdpkg-perldpkg-checkbuilddeps内部使用这些模块)

将以下行添加到源程序包根目录print-build-depsprint-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-depsdevscripts

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
54StéphaneGourichon

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)中并不重要,但是如果您在常规环境中进行构建,则将保留构建时依赖项软件包。对于某些软件包,它们可能很大。
01StéphaneGourichon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.