কেবলমাত্র অগভীর ক্লোন টানতে গিট উত্স ব্যবহার করে এমন কোনও পিকেজিবিআইডিডি কীভাবে সংশোধন করবেন?


18

অন্য দিন আমি আর্ক লিনাক্স দিয়ে এআরopencv-git থেকে ইনস্টল করার চেষ্টা করেছি । নামটি ইঙ্গিত করে অবশ্যই গিট সংগ্রহস্থল থেকে এটি টানতে পারে। এটি 1 জিবি টানছে। আমি উপার্জন সম্পর্কে পড়া করছি অগভীর ক্লোন সঙ্গে । আমি যখন ফাইলটি দেখছি , ব্যবহার করে দেখি:makepkggitPKGBUILDgrep git PKGBUILD

pkgname="opencv-git"
makedepends=('git' 'cmake' 'python2-numpy' 'mesa' 'eigen2')
provides=("${pkgname%-git}")
conflicts=("${pkgname%-git}")
source=("${pkgname%-git}::git+http://github.com/Itseez/opencv.git"
    cd "${srcdir}/${pkgname%-git}"
    git describe --long | sed -r 's/([^-]*-g)/r\1/;s/-/./g'
    cd "${srcdir}/${pkgname%-git}"
    cd "${srcdir}/${pkgname%-git}"
    cd "${srcdir}/${pkgname%-git}"
    install -Dm644 "LICENSE" "${pkgdir}/usr/share/licenses/${pkgname%-git}/LICENSE"

রেসিপি বা makepkgকেবলমাত্র অগভীর ক্লোনটি টানানোর আদেশটি (উত্সের সর্বশেষতম সংস্করণটি যা আমি চাই তা টানতে) পরিবর্তনের কোনও উপায় আছে এবং স্থান এবং ব্যান্ডউইদথ সংরক্ষণ করার জন্য সম্পূর্ণ সংগ্রহস্থল নয়? পড়া man 5 PKGBUILDআমি যে অন্তর্দৃষ্টি খুঁজছি তা সরবরাহ করে না। এছাড়াও makepkgএবং pacman ম্যানেজগুলির মাধ্যমে দ্রুত সন্ধান করা - কীভাবে এটি করা যায় তা খুঁজে পাওয়া যায় না।


"শেষ পর্যন্ত আমি সফলভাবে রেসিপি তৈরি করতে ব্যর্থ হয়েছি।" আপনি ঠিক কী করেছিলেন এবং কী ভুল হয়েছে? দয়া করে আরও বিশদ সরবরাহ করুন। যেমন কেউ একবার আইআরসি-তে আমাকে বলেছিল, দুর্ভাগ্যক্রমে আমরা আমাদের স্ফটিক বল বাড়িতে রেখেছি। লাইনগুলির মধ্যে পড়ে মনে হচ্ছে, গিট রেপোস সফলভাবে ক্লোন করতে ব্যর্থ হয়েছে, সম্ভবত নেটওয়ার্ক সমস্যার কারণে? তবে আমি কেবল অনুমান করছি। দয়া করে সুস্পষ্ট হন।
ফাহিম মিঠা

একটি শিক্ষিত অনুমান যে আপনি প্রক্রিয়াটি দুটি ভাগে ভাগ করতে পারেন। প্রথমে গিট রেপোগুলিকে অগভীর ক্লোন বা যা কিছু হিসাবে ক্লোন করুন। তারপরে রেসিপিটি প্রয়োগ করুন। আমি অনুমান করতে পারি যে আপনি git+http://github.com/Itseez/opencv.gitস্থানীয় পথের নাম দিয়ে আউর রেসিপিতে নেটওয়ার্ক ঠিকানাটি প্রতিস্থাপন করতে পারেন । আপনি কি চেষ্টা করেছেন? যদি এই বিল্ড সিস্টেমটি স্থানীয়ভাবে আপনার কাছে এটি উপলভ্য করে এমনকি কোনও রেপো ক্লোন করতে বাধ্য করে তবে এটি বেশ বাদামজাতীয়।
ফাহিম মিঠা

@ ফাহিমমিঠা আপনাকে ধন্যবাদ, আমি নির্মাণে ব্যর্থতার রেফারেন্সটি সরিয়ে দিয়েছি - আমার কোন চিন্তা নেই। আমি একটি ইন্টিগ্রেটেড সমাধান খুঁজছি যা আপনি বর্ণনা মত কিছু উপর ভিত্তি করে হতে পারে। আমি মনে করি স্থানীয় সামগ্রী থাকলে ডাউনলোড না করার বিকল্প থাকতে পারে ...

আপনার যদি এই প্রশ্নটি জিজ্ঞাসা করার মূল কারণটি অযথা ব্যান্ডউইথ / স্পেস ব্যবহার করা এড়ানো হয় তবে তা স্পষ্ট করে বললে ক্ষতি হবে না। যেমনটি আমি বলেছিলাম, কেবল স্থানীয় পথটি ব্যবহার করার চেষ্টা করুন - এটি সম্ভবত কমপক্ষে অবাক হওয়ার নীতি দ্বারা কাজ করবে। ম্যান পৃষ্ঠাতে অগভীর ক্লোন নির্দিষ্ট করার বিকল্পটি যদি দেওয়া না হয় তবে এটি সম্ভব হয় যে কার্যকারিতা উপলব্ধ নেই। আমি একটি উপযুক্ত আর্চ ফোরামের মধ্যে জিজ্ঞাসা করার পরামর্শ দিচ্ছি, সম্ভবত সেই বিল্ড সিস্টেমকে উত্সর্গীকৃত একটি মেলিং তালিকা। প্রথমে সেই কার্যকারিতাটি বিদ্যমান কিনা তা স্পষ্ট করুন; যদি তা না হয় তবে আপনি একটি ইচ্ছা তালিকা বাগ ফাইল করতে পারেন।
ফাহিম মিঠা

উত্তর:


13

এটি একটি কাস্টম ডিলেজেন্ট ব্যবহার করে করা যেতে পারে । আমি আর্ক প্যাকেজিং বা ডিলেজেন্টগুলি কীভাবে কাজ করে তা বুঝতে পারি না, তাই আমার কাছে কেবল একটি হ্যাক উত্তর রয়েছে তবে এটি কাজটি করে।

কাস্টম ডাউনলোড এজেন্ট ব্যবহার করার জন্য পিকেজিবিআইএলডিটি পরিবর্তন করতে হবে idea আমি উত্সটি পরিবর্তন করেছি

"${pkgname%-git}::git+http://github.com/Itseez/opencv.git"

মধ্যে

"${pkgname%-git}::mygit://opencv.git"

এবং তারপরে একটি নতুন জঞ্জাল সংজ্ঞায়িত করা হয় mygitযা অগভীর ক্লোন করে। আমি নিম্নলিখিত ডিলেজেন্টে DLAGENTSঅ্যারে যুক্ত করে এটি /etc/makepkg.confকরেছি:

'mygit::/usr/bin/git clone --depth 1 http://github.com/Itseez/opencv.git'

আমার ধারণা আপনি সম্ভবত এই ডাউনলোড এজেন্টকে অন্য কোথাও সংজ্ঞায়িত করতে পারেন তবে কীভাবে তা আমি জানি না। এছাড়াও লক্ষ্য করুন যে ক্লোন করা হচ্ছে এমন সংগ্রহস্থলটি কমান্ডের মধ্যে কঠোরভাবে কোড করা হয়েছে। আবার এটি সম্ভবত এড়ানো যায়। পরিশেষে, ডাউনলোডের অবস্থান পিকেজিবিআইএলডি যা প্রত্যাশা করে তা নয়। এটির কাজ করার জন্য, আমি এটি ডাউনলোড করার পরে কেবল সংগ্রহস্থলটি সরিয়ে নিয়েছি। আমি এটি যোগ করে

mv "${srcdir}/../mygit:/opencv.git" "${srcdir}/../${pkgname%-git}"

pkgverফাংশন শুরুতে ।

আমি মনে করি ক্লিনার সমাধানটি git+httpহ'ল ডিলেজেন্ট কী করছে এবং তা অস্থায়ীভাবে পুনরায় সংশোধন করবে। এটি সমাধানের সমস্ত হ্যাক দিকগুলি এড়ানো উচিত।


ধন্যবাদ, এই কাজ করে। হ্যাঁ এটি ব্যতীত অন্য ক্ষেত্রে এটি কাজ করার জন্য এটি বিমূর্ত করতে কিছু কাজ প্রয়োজন need তবে এটি তদন্তযোগ্য এবং আপনার উত্তরটি ধারণার একটি বৈধ প্রমাণ। আমি সেই অনুযায়ী আপনার নির্বাচিত উত্তরটি পরিবর্তন করেছি।

11

ব্যক্তিগতভাবে আমি মেকপেকজি স্ক্রিপ্টটি সংশোধন করেছি এবং এটি একটি কবজির মতো কাজ করছে:

# vim `which makepkg` +/clone
...
541         msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
542         if ! git clone --mirror "$url" "$dir"; then
543             error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
...

"গিটার ক্লোন" কমান্ডে "--মিরর --সিংল-শাখা - 1 তম" সংযুক্ত করা হচ্ছে:

541         msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
542         if ! git clone --mirror --single-branch --depth 1 "$url" "$dir"; then
543             error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"

এখানে একটি পৃথক ভিউ:

--- makepkg ...
+++ makepkg-patched ...
@@ -539,7 +539,7 @@

    if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
        msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
-       if ! git clone --mirror "$url" "$dir"; then
+       if ! git clone --mirror --single-branch --depth 1 "$url" "$dir"; then
            error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
            plain "$(gettext "Aborting...")"
            exit 1

সফটথেরভিপিএন-গিট ইনস্টল করা এখন হ্যাকের আগে 468 এম এর পরিবর্তে 100 এম ডাউনলোড করে।

উজ্জ্বল! অসংখ্য ধন্যবাদ! এটি ডিফল্ট হওয়া উচিত।
সিসিপিজা

দ্রষ্টব্য: এটি কোনও ট্যাগের উপর নির্ভর করে PKGBUILD এর সাথে ব্যর্থ হবে। এই আলোচনা দেখুন । তবে এটি সম্ভবত (সেখানে টুকরা ব্যবহার করে সংশোধন করা যেতে পারে branch, tag, commitইত্যাদি)।
বেনসি

7
দ্রষ্টব্য: এখন /usr/share/makepkg/source/git.shপরিবর্তে প্যাচ করা উচিত
nphonecop

6

মতে https://bugs.archlinux.org/task/23065 (jasonwryan কৃতিত্ব), অর PKGBUILD করার অগভীর ক্লোনিং কার্যকারিতা যোগ করার সময় একটি ইচ্ছা তালিকা আইটেম শনিবার বন্ধ ছিল, 05 মার্চ 2011 মন্তব্য সহ ছিল:

বন্ধ করার কারণ: বাস্তবায়ন হবে না

এটি পরামর্শ দেয় যে কেউ প্যাচ জমা না দিলে এটি ঘটবে না।

আমি মন্তব্যে পোস্টারকে যেমন পরামর্শ দিয়েছিলাম, তিনি যা করতে চাইছেন তা অবশ্যই প্রক্রিয়াটি দুটি ধাপে ভেঙে প্রায় সম্পাদিত হতে পারে:

  1. অগভীর ক্লোন ব্যবহার করে গিট সংগ্রহস্থলটি ক্লোন করুন
  2. পিকেজিবিআইএলডি রেসিপিটি চালান, তবে স্থানীয় ক্লোনটিতে এটি নির্দেশ করুন। আমি কোনও আর্চ ব্যবহারকারী নই, সুতরাং এটি কি না তা জানুন না তবে আমি এমন একটি প্যাকেজ বিল্ডিং সিস্টেমে খুব অবাক হব যা ব্যবহারকারীদের প্যাকেজ তৈরির জন্য দূরবর্তী থেকে সংগ্রহস্থলগুলি ক্লোন করতে বাধ্য করেছিল।

ধন্যবাদ. লিঙ্কের মন্তব্যে, এই পরিবর্তনটি কীভাবে স্ক্রিপ্ট ওয়ার্কফ্লোতে অপ্রত্যাশিত পরিণতি নিয়ে আসতে পারে তা নিয়ে এই আলোচনা রয়েছে। সমস্যাটি হ'ল গিট কীভাবে পপুলেশন করে এবং নিখোঁজ হওয়া জিনিসগুলিকে লিঙ্ক করে। - আমি সঠিকভাবে বুঝতে পারলে ডিস্ক ব্যবহারের কোনও সুবিধা হবে না। প্রকৃতপক্ষে আমি রেসিপি ডিরেক্টরিতে অগভীর ক্লোনটি করার চেষ্টা করেছি যা 1GB + সমান হ'ল তবে এটি makepkgপিকআপ করেছিল (pkgver কিছুটা অভিযোগ করলেও তবুও) এবং কাজ করে!

2

আপনি যদি একই ডিরেক্টরিতে সংগ্রহস্থলের একটি অগভীর আয়না তৈরি করেন PKGBUILD, তবে বাকী সংগ্রহস্থলগুলি আপডেট করা থেকে makepkg --holdverবিরত রাখতে আপনি ব্যবহার করতে পারেন makepkg। এই সংশোধন করার প্রয়োজন সরিয়ে ফেলা হবে PKGBUILD, makepkg.confঅথবা makepkgনিজেই; তবে, সংগ্রহস্থলটির ক্লোনিং / আপডেট করার কাজ ম্যানুয়ালি করা দরকার।

সঙ্গে একটি উদাহরণ হিসাবে cling-git, যা স্বাভাবিকভাবে সম্পূর্ণতা ক্লোন হবে llvmএবং clang:

$ git clone --mirror --depth=1 --branch=cling-patches http://root.cern.ch/git/llvm.git llvm
$ git clone --mirror --depth=1 --branch=cling-patches http://root.cern.ch/git/clang.git clang
$ git clone --mirror --depth=1 http://root.cern.ch/git/cling.git cling

$ makepkg --holdver

মেকপেকজি ম্যান পৃষ্ঠা থেকে:

--holdver
    When using VCS sources (PKGBUILD(5)) any currently checked out source
    will not be updated to the latest revision.

নোট করুন যে মেকপেকজি এখনও ইতিমধ্যে উপস্থিত নেই এমন রেপোগুলি ক্লোন করে দেবে, যার অর্থ হ'ল আমি clingউপরের উদাহরণটিতে ম্যানুয়ালি সংগ্রহস্থলটি বাদ দিতে পারতাম কারণ এটি এত বড় নয়।


1

আপনি যদি মেকপেকজি স্ক্রিপ্টগুলি সংশোধন করতে না চান।

এখানে বর্ণিত হিসাবে , কিছু অবিচ্ছিন্ন ফোল্ডারে পয়েন্ট DEVELSRCDIRইন /etc/yaourtrcবা ~/.yaourtrcফাইল করুন। তারপরে এই ফোল্ডারে সমস্ত সংগ্রহস্থল চেকআউট (গিট / এসএনএন / ...) ঘটবে। একবার সংগ্রহস্থলটি ক্লোন হয়ে গেলে, প্রতিবার সম্পূর্ণ ক্লোনের পরিবর্তে কেবলমাত্র নতুন সংশোধনগুলির সাথে দ্রুত ফ্যাচ করা হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.