Debian / control'ten yapı bağımlılıkları nasıl kurulur / ayrıştırılır?


11

Varsayalım ki varolan bir /debian/klasörü ve /debian/controldosyayı içeren bir kaynak kodu klasörü indirdiniz.

Diyelim ki söz konusu paket Debian resmi deposunda apt-get build-depdeğil , bu yüzden kullanılamaz.

Build-Depends:Çizgi nasıl ayrıştırılır ?

Örneğin, çizgi okursa yankılanacak bir Build-Depends: debhelper (>= 8), faketimearaç control-parse debian/control build-dependsvar debhelper faketimemı?

Özellikle çok hatlı olduğunda?

Mevcut Debian araçları var mı veya bunu ayrıştırmak için kendi kodunu yazacak araç var mı?

Yanıtlar:


4

Kullanabilirsin dpkg-checkbuilddeps. Man sayfası diyor

Bu program, sistemde yüklü paketleri derleme bağımlılıklarına ve denetim dosyasında listelenen derleme çakışmalarına karşı denetler. Herhangi biri karşılanmazsa, bunları görüntüler ve sıfır olmayan bir dönüş koduyla çıkar.

Örneğin:

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

Ancak, paketi (örneğin) kullanarak da oluşturmayı deneyebilirsiniz debuild, örn.

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

Hangi aynı bilgiyi verir (kullandığından beri dpkg-checkbuilddeps), ama biraz gürültülü.


dpkg-checkbuilddepsyalnızca karşılanmamış derleme bağımlılıkları çıktılar. Genel durumda ayrıştırma ile ilgili cevabımı görün .
Evgeny Vereshchagin

4

Ayrıştırma:

İçindeki modülleri kullan libdpkg-perl( dpkg-checkbuilddepsbu modülleri dahili olarak kullanır)

Aşağıdaki satırları ekleyin ve kaynak paket kök dizininde print-build-depsçalıştırın 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";

Ayrıca bakınız:

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

Kurulum:

Sen kullanabilirsiniz mk-build-depsden 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 diyor:

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

Bu temiz bir çözüm gibi görünüyor çünkü bağlamdaki araçları kullanıyor, bu yüzden daha sağlam olabilir. Son Debian'da (en azından) paketlere ihtiyacı vardır devscripts ve equivs geçici bir paket oluşturur myproject-build-depsve kurar. Sadece kaldırma: Bu, makinede inşa zamanı bağımlılıkları tutmak niyetinde değilsen güzel devscripts, equivsve myproject-build-deps.
Stéphane Gourichon

3

Bu Perl tek astar aşağıdakilerden gelen bağımlılıkları ayrıştırmak için kullanılabilir debian-control:

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

veya

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

Bu tek astarlı, ayrıştırılmış bağımlılıkları yüklemek kadar kolaydır apt-get install $(perl -ne 'next if /^#/; $p=(s/^Build-Depends:\s*/ / or (/^ / and $p)); s/,|\n|\([^)]+\)//mg; print if $p' < debian/control)'. Bağımlılıkların manuel olarak yüklenmiş olarak işaretleneceğini unutmayın, böylece yapı ortamına yapışırlar. Bunun ıskarta bir inşa ortamında (chroot, docker) önemi yoktur, ancak normal ortamınızda inşa ederseniz, inşa süresi bağımlılıkları paketleri kalır. Bazı paketler için oldukça büyük olabilirler.
Stéphane Gourichon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.