adr*_*nos 12 command-line packaging debian package-management
假设您下载了一个源代码文件夹,其中包含一个现有/debian/文件夹和/debian/control文件。
假设有问题的软件包不在 Debian 官方存储库中,因此apt-get build-dep无法使用。
如何解析Build-Depends:行?
例如,如果该行将读取Build-Depends: debhelper (>= 8), faketime,是否有一些工具control-parse debian/control build-depends可以回显debhelper faketime?
特别是当它是多线时?
是否有现有的 Debian 工具或有一个可以编写自己的代码来解析它的工具?
你可以使用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
Run Code Online (Sandbox Code Playgroud)
但是,您也可以尝试构建包,使用(例如)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
Run Code Online (Sandbox Code Playgroud)
它提供了相同的信息(因为它使用dpkg-checkbuilddeps),但噪音更大。
解析:
使用来自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";
Run Code Online (Sandbox Code Playgroud)
也可以看看:
perldoc Dpkg::Control::Info
perldoc Dpkg::Deps
Run Code Online (Sandbox Code Playgroud)
安装:
您可以使用mk-build-deps从devscripts:
apt-get install devscripts
apt-get install equivs
cd project-root # project-root contains debian/control
mk-build-deps -i
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)