डेबियन / नियंत्रण से निर्भरता का निर्माण / पार्स कैसे करें?


11

मान लीजिए कि आपने एक स्रोत कोड फ़ोल्डर डाउनलोड किया है, जिसमें एक मौजूदा /debian/फ़ोल्डर के साथ-साथ /debian/controlफ़ाइल भी है।

मान लीजिए कि प्रश्न में पैकेज डेबियन आधिकारिक भंडार में नहीं है, इसलिए apt-get build-depइसका उपयोग नहीं किया जा सकता है।

Build-Depends:लाइन को पार्स कैसे करें ?

उदाहरण के लिए, यदि रेखा पढ़ेगी Build-Depends: debhelper (>= 8), faketime, तो क्या कुछ उपकरण है control-parse debian/control build-dependsजो गूंजेंगे debhelper faketime?

खासकर जब यह मल्टी लाइन है?

क्या डेबियन के मौजूदा उपकरण हैं या इसे पार्स करने के लिए अपना कोड लिखना है?

जवाबों:


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आउटपुट केवल अवलंबित निर्भरता का निर्माण करते हैं। सामान्य मामले में पार्स करने के बारे में मेरा जवाब देखें ।
एवगेनी वीरशैगिन

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

यह एक साफ समाधान की तरह लगता है क्योंकि यह संदर्भ से उपकरण का उपयोग करता है, इसलिए यह अधिक मजबूत हो सकता है। हाल ही में डेबियन (कम से कम) पर इसे पैकेज की आवश्यकता होती है devscripts और equivs , एक अस्थायी पैकेज उत्पन्न myproject-build-depsकरता है और इसे स्थापित करता है। यह अच्छा है अगर आप अपनी मशीन पर बिल्ड-टाइम निर्भरता रखने का इरादा नहीं कर रहे हैं: बस स्थापना रद्द करें devscripts, equivsऔर myproject-build-deps
स्टीफन गौरिचोन

3

यह पर्ल वन-लाइनर निर्भरता को पार्स करने के लिए इस्तेमाल किया जा सकता है 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)'। बस ध्यान रखें कि निर्भरता को मैन्युअल रूप से स्थापित के रूप में चिह्नित किया जाएगा, इसलिए वे बिल्ड वातावरण में चिपक जाएंगे। एक फेंकने वाले बिल्ड पर्यावरण (चेरोट, डूकर) में इसका कोई महत्व नहीं है, लेकिन यदि आप अपने नियमित वातावरण में निर्माण करते हैं तो बिल्ड-टाइम निर्भरता पैकेज बने रहेंगे। वे कुछ पैकेजों के लिए काफी बड़े हो सकते हैं।
स्टीफन गौरिचोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.