จะติดตั้ง / แยกวิเคราะห์ build build จาก debian / control ได้อย่างไร?


11

สมมติว่าคุณดาวน์โหลดโฟลเดอร์ซอร์สโค้ดซึ่งมีโฟลเดอร์ที่มีอยู่/debian/รวมทั้ง/debian/controlไฟล์

ลองสมมติว่าแพคเกจที่มีปัญหาไม่ได้อยู่ในที่เก็บอย่างเป็นทางการของเดเบียนดังนั้นจึงapt-get build-depไม่สามารถใช้

วิธีการแยกBuild-Depends:บรรทัด?

ตัวอย่างเช่นหากบรรทัดที่อ่านBuild-Depends: debhelper (>= 8), faketimeมีเครื่องมือบางอย่างcontrol-parse debian/control build-dependsที่จะสะท้อนdebhelper faketime?

โดยเฉพาะเมื่อมีหลายสาย?

มีเครื่องมือ Debian ที่มีอยู่หรือมีหนึ่งตัวที่จะเขียนโค้ดของตัวเองเพื่อแจงส่วนนี้?

คำตอบ:


4

dpkg-checkbuilddepsคุณสามารถใช้ หน้าคนบอกว่า

โปรแกรมนี้ตรวจสอบแพ็กเกจที่ติดตั้งในระบบกับการขึ้นต่อกันของการสร้างและการสร้างข้อขัดแย้งที่ปรากฏในไฟล์ควบคุม หากไม่พบจะมีการแสดงและออกด้วยรหัสส่งคืนที่ไม่ใช่ศูนย์

ตัวอย่างเช่น:

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

ดูเหมือนว่าจะเป็นโซลูชันที่สะอาดเพราะใช้เครื่องมือจากบริบทดังนั้นจึงอาจมีประสิทธิภาพมากกว่า ใน Debian ล่าสุด (อย่างน้อย) มันต้องการแพ็คเกจ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) แต่ถ้าคุณสร้างในสภาพแวดล้อมปกติของคุณแพ็คเกจการพึ่งพาเวลา build จะยังคงอยู่ พวกเขาอาจจะค่อนข้างใหญ่สำหรับแพคเกจบางอย่าง
Stéphane Gourichon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.