Come installare / analizzare le dipendenze di build da debian / control?


11

Supponiamo che tu abbia scaricato una cartella del codice sorgente, che contiene una /debian/cartella esistente e un /debian/controlfile.

Supponiamo che il pacchetto in questione non si trovi nel repository ufficiale Debian, quindi apt-get build-depnon può essere usato.

Come analizzare la Build-Depends:linea?

Ad esempio, se la riga leggesse Build-Depends: debhelper (>= 8), faketime, c'è qualche strumento control-parse debian/control build-dependsche farebbe eco debhelper faketime?

Soprattutto quando è multi linea?

Esistono strumenti Debian esistenti o ne ha uno per scrivere il proprio codice per analizzarlo?

Risposte:


4

Puoi usare dpkg-checkbuilddeps. La pagina man dice

Questo programma verifica i pacchetti installati nel sistema rispetto alle dipendenze di build e ai conflitti di build elencati nel file di controllo. Se qualcuno non viene soddisfatto, li visualizza ed esce con un codice di ritorno diverso da zero.

Per esempio:

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

Tuttavia, puoi anche provare a creare il pacchetto, usando (ad esempio) debuild, ad es

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

Che fornisce le stesse informazioni (dal momento che utilizza dpkg-checkbuilddeps), ma è un po 'più rumoroso.


dpkg-checkbuilddepsgenera solo dipendenze di build non soddisfatte. Vedi la mia risposta sull'analisi nel caso comune.
Evgeny Vereshchagin,

4

Analisi:

Usa i moduli dal libdpkg-perl( dpkg-checkbuilddepsusa quei moduli internamente)

Aggiungere le seguenti righe print-build-depsed eseguire print-build-depsnella radice del pacchetto di origine.

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

Guarda anche:

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

Installazione:

Puoi usare mk-build-depsda 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 dice:

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

Questa sembra una soluzione pulita perché utilizza strumenti dal contesto, quindi potrebbe essere più solida. Su Debian recente (almeno) ha bisogno di pacchetti devscripts e equivs , genera un pacchetto temporaneo myproject-build-depse lo installa. Questo è bello se non avete intenzione di mantenere le dipendenze di compilazione in tempo sulla vostra macchina: basta disinstallare devscripts, equivse myproject-build-deps.
Stéphane Gourichon,

3

Questo one-liner Perl può essere utilizzato per analizzare le dipendenze da debian-control:

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

o

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

Grazie a questo, l'installazione di dipendenze analizzate è semplice come apt-get install $(perl -ne 'next if /^#/; $p=(s/^Build-Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control)'. Basta essere consapevoli del fatto che le dipendenze verranno contrassegnate come installate manualmente, in modo che rimangano nell'ambiente di compilazione. Ciò non ha importanza in un ambiente di build usa e getta (chroot, docker), ma se si crea nel proprio ambiente normale i pacchetti di dipendenze in fase di build rimarranno. Possono essere abbastanza grandi per alcuni pacchetti.
Stéphane Gourichon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.