ডেবিয়ান / নিয়ন্ত্রণ থেকে বিল্ড নির্ভরতা কীভাবে ইনস্টল / পার্স করবেন?


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

এটি একটি পরিষ্কার সমাধানের মতো বলে মনে হচ্ছে কারণ এটি প্রসঙ্গ থেকে সরঞ্জামগুলি ব্যবহার করে, তাই এটি আরও দৃ be় হতে পারে। সাম্প্রতিক ডেবিয়ানে (কমপক্ষে) এর জন্য প্যাকেজগুলির প্রয়োজন 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)'। কেবল সচেতন হন যে নির্ভরতাগুলি ম্যানুয়ালি ইনস্টল হিসাবে চিহ্নিত করা হবে, সুতরাং তারা বিল্ড পরিবেশে আটকে থাকবে। নিক্ষিপ্ত বিল্ড এনভায়রনমেন্টে (ক্রুট, ডকার) এটির কোনও গুরুত্ব নেই তবে আপনি যদি আপনার নিয়মিত পরিবেশে তৈরি করেন তবে বিল্ড-টাইম নির্ভরতা প্যাকেজগুলি থেকে যাবে। কিছু প্যাকেজগুলির জন্য এগুলি বেশ বড় হতে পারে।
স্টাফেন গ্যারিচন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.