Comment installer / analyser les dépendances de build depuis debian / control?

11

Supposons que vous ayez téléchargé un dossier de code source, qui contient un /debian/dossier existant ainsi qu'un /debian/controlfichier.

Supposons que le paquet en question ne se trouve pas dans le dépôt officiel Debian, donc apt-get build-depne peut pas être utilisé.

Comment analyser la Build-Depends:ligne?

Par exemple, si la ligne se lisait Build-Depends: debhelper (>= 8), faketime, y a-t-il un outil control-parse debian/control build-dependsqui résonnerait debhelper faketime?

Surtout quand c'est multi-lignes?

Existe-t-il des outils Debian ou en a-t-il un pour écrire son propre code pour analyser cela?

adrelanos
la source

Réponses:

4

Vous pourriez utiliser dpkg-checkbuilddeps. La page de manuel indique

Ce programme vérifie les packages installés dans le système par rapport aux dépendances de génération et aux conflits de génération répertoriés dans le fichier de contrôle. Si aucun n'est rencontré, il les affiche et se termine avec un code retour différent de zéro.

Par exemple:

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

Cependant, vous pouvez également essayer de construire le package, en utilisant (par exemple) debuild, par exemple

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

Ce qui donne la même information (car il utilise dpkg-checkbuilddeps), mais est un peu plus bruyant.

Faheem Mitha
la source
dpkg-checkbuilddepsaffiche uniquement les dépendances de construction non satisfaites. Voir ma réponse sur l'analyse syntaxique dans le cas commun.
Evgeny Vereshchagin
4

Analyse:

Utiliser des modules de libdpkg-perl( dpkg-checkbuilddepsutilise ces modules en interne)

Ajoutez les lignes suivantes à print-build-depset exécutez print-build-depsà la racine du package source.

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

Voir également:

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

Installation:

Vous pouvez utiliser à mk-build-depspartir 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 dit:

mk-build-deps - build a package satisfying a package's build-dependencies
-i, --install
       Install the generated packages and its build-dependencies
Evgeny Vereshchagin
la source
Cela semble être une solution propre car il utilise des outils du contexte, il pourrait donc être plus robuste. Sur Debian récente (au moins), il a besoin de packages devscripts et equivs , génère un package temporaire myproject-build-depset l'installe. C'est bien si vous n'avez pas l'intention de conserver les dépendances de construction sur votre machine: désinstallez simplement devscripts, equivset myproject-build-deps.
Stéphane Gourichon
3

Cette ligne unique Perl peut être utilisée pour analyser les dépendances 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 
Jakob
la source
Grâce à cette ligne unique, l'installation des dépendances analysées est aussi simple que possible apt-get install $(perl -ne 'next if /^#/; $p=(s/^Build-Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control)'. Sachez simplement que les dépendances seront marquées comme installées manuellement, de sorte qu'elles resteront dans l'environnement de génération. Cela n'a aucune importance dans un environnement de build jetable (chroot, docker), mais si vous construisez dans votre environnement normal, les packages de dépendances au moment de la construction resteront. Ils peuvent être assez gros pour certains packages.
Stéphane Gourichon