Làm thế nào để cài đặt / phân tích phụ thuộc xây dựng từ debian / control?


11

Giả sử bạn đã tải xuống một thư mục mã nguồn chứa /debian/thư mục hiện có cũng như /debian/controltệp.

Giả sử gói trong câu hỏi không có trong kho chính thức của Debian, vì vậy apt-get build-depkhông thể sử dụng được.

Làm thế nào để phân tích Build-Depends:dòng?

Ví dụ, nếu dòng sẽ đọc Build-Depends: debhelper (>= 8), faketime, có công cụ control-parse debian/control build-dependsnào đó sẽ lặp lại debhelper faketimekhông?

Đặc biệt là khi nó đa dòng?

Có các công cụ Debian hiện có hoặc có một công cụ để viết mã riêng để phân tích cú pháp này không?

Câu trả lời:


4

Bạn có thể sử dụng dpkg-checkbuilddeps. Trang đàn ông nói

Chương trình này kiểm tra các gói đã cài đặt trong hệ thống dựa trên các phụ thuộc xây dựng và xung đột xây dựng được liệt kê trong tệp điều khiển. Nếu bất kỳ không được đáp ứng, nó sẽ hiển thị chúng và thoát với mã trả lại khác không.

Ví dụ:

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

Tuy nhiên, bạn cũng có thể thử xây dựng gói, sử dụng (ví dụ) debuild, vd

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

Cung cấp thông tin tương tự (vì nó sử dụng dpkg-checkbuilddeps), nhưng ồn ào hơn một chút.


dpkg-checkbuilddepsđầu ra chỉ phụ thuộc xây dựng chưa được đáp ứng. Xem câu trả lời của tôi về phân tích cú pháp trong trường hợp phổ biến.
Evgeny Vereshchagin

4

Phân tích cú pháp:

Sử dụng các mô-đun từ libdpkg-perl( dpkg-checkbuilddepssử dụng các mô-đun bên trong)

Thêm các dòng sau print-build-depsvà chạy print-build-depsở gốc gói nguồn.

#!/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";

Xem thêm:

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

Cài đặt:

Bạn có thể sử dụng mk-build-depstừ 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 nói:

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

Đây có vẻ là một giải pháp sạch vì nó sử dụng các công cụ từ ngữ cảnh, vì vậy nó có thể mạnh mẽ hơn. Trên Debian gần đây (ít nhất), nó cần các gói devscripts equivs , tạo gói tạm thời myproject-build-depsvà cài đặt nó. Đây là tốt đẹp nếu bạn không có ý định để giữ các phụ thuộc xây dựng thời gian thực trên máy tính của bạn: chỉ cần gỡ bỏ cài đặt devscripts, equivsmyproject-build-deps.
Stéphane Gourichon

3

Perl one-liner này có thể được sử dụng để phân tích các phụ thuộc từ debian-control:

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

hoặc là

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

Nhờ có một dòng này, việc cài đặt các phụ thuộc được phân tích cú pháp dễ dàng như apt-get install $(perl -ne 'next if /^#/; $p=(s/^Build-Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control)'. Chỉ cần lưu ý rằng các phụ thuộc sẽ được đánh dấu là cài đặt thủ công, vì vậy chúng sẽ gắn bó trong môi trường xây dựng. Điều này không có tầm quan trọng trong môi trường xây dựng vứt bỏ (chroot, docker), nhưng nếu bạn xây dựng trong môi trường thường xuyên của mình, các gói phụ thuộc thời gian xây dựng sẽ vẫn còn. Chúng có thể khá lớn cho một số gói.
Stéphane Gourichon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.