Como instalar / analisar dependências de construção do debian / control?

8

Suponhamos que você fez o download de uma pasta de código-fonte, que contém uma pasta /debian/ existente e também /debian/control .

Vamos supor que o pacote em questão não esteja no repositório oficial do Debian, então apt-get build-dep não pode ser usado.

Como analisar a linha Build-Depends: ?

Por exemplo, se a linha for ler Build-Depends: debhelper (>= 8), faketime , existe alguma ferramenta control-parse debian/control build-depends que seria echo debhelper faketime ?

Especialmente quando é multi-line?

Existem ferramentas Debian ou tem uma para escrever seu próprio código para analisar isso?

    
por adrelanos 05.01.2015 / 11:10

3 respostas

3

Você pode usar dpkg-checkbuilddeps . A página man diz

This program checks the installed packages in the system against the build dependencies and build conflicts listed in the control file. If any are not met, it displays them and exits with a nonzero return code.

Por exemplo:

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

No entanto, você também pode tentar criar o pacote usando (por exemplo) debuild , por exemplo

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

O que dá a mesma informação (já que usa dpkg-checkbuilddeps ), mas é um pouco mais ruidoso.

    
por 05.01.2015 / 11:26
2

Este one-liner Perl pode ser usado para analisar dependências de debian-control :

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

ou

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

Análise:

Use módulos do libdpkg-perl ( dpkg-checkbuilddeps usa esses módulos internamente)

Adicione as seguintes linhas a print-build-deps e execute print-build-deps na raiz do pacote de origem.

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

Veja também:

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

Instalação:

Você pode usar mk-build-deps de 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 diz:

mk-build-deps - build a package satisfying a package's build-dependencies
-i, --install
       Install the generated packages and its build-dependencies
    
por 22.06.2015 / 13:27