데비안 / 컨트롤에서 빌드 종속성을 설치 / 구문 분석하는 방법은 무엇입니까?


11

기존 /debian/폴더와 /debian/control파일 이 포함 된 소스 코드 폴더를 다운로드했다고 가정 해 봅시다 .

문제의 패키지가 데비안 공식 저장소에 있지 않다고 가정 해 봅시다 apt-get build-dep.

Build-Depends:줄 을 파싱하는 방법 ?

예를 들어, 행이 이면 에코 할 수 Build-Depends: debhelper (>= 8), faketime있는 도구 control-parse debian/control build-dependsdebhelper faketime있습니까?

특히 멀티 라인 일 때?

기존 데비안 도구가 있습니까, 아니면 이것을 파싱하기 위해 자체 코드를 작성하는 도구가 있습니까?

답변:


4

사용할 수 있습니다 dpkg-checkbuilddeps. 맨 페이지는 말합니다

이 프로그램은 시스템에 설치된 패키지를 제어 파일에 나열된 빌드 종속성 및 빌드 충돌과 비교하여 검사합니다. 충족되지 않으면이를 표시하고 0이 아닌 리턴 코드로 종료합니다.

예를 들면 다음과 같습니다.

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-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

설치:

다음 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

상황에 맞는 도구를 사용하기 때문에보다 확실한 솔루션처럼 보입니다. 최근 데비안에 (적어도)이 패키지를 필요로 devscripts 하고 equivs , 임시 패키지를 생성 myproject-build-deps하고 설치합니다. 바로 제거 : 이것은 당신이 당신의 컴퓨터에 빌드 타임 종속성을 유지하기 위해 의도하지 않는 경우 좋은 devscripts, equivs그리고 myproject-build-deps.
Stéphane Gourichon

3

이 Perl one-liner는 다음에서 종속성을 구문 분석하는 데 사용할 수 있습니다 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)에서 중요하지 않지만, 일반 환경에서 빌드하는 경우 빌드 시간 종속성 패키지가 유지됩니다. 일부 패키지의 경우 상당히 클 수 있습니다.
Stéphane Gourichon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.