ইতোমধ্যে ইনস্টল থাকা সত্ত্বেও, ইউমডাউনডার দিয়ে সমস্ত নির্ভরতা ডাউনলোড করুন?


34

ইতোমধ্যে ইনস্টল থাকা সত্ত্বেও, কি ইউমডাউনডার সহ সমস্ত নির্ভরতা ডাউনলোড করার কোনও উপায় আছে?

আমি একটি স্থানীয় রেপো তৈরি করার চেষ্টা করছি এবং কেবল আমাদের প্রয়োজনীয় প্যাকেজগুলি অন্তর্ভুক্ত করতে চাই।

উত্তর:


29

আপনি এর repotrackপরিবর্তে এটি ব্যবহার করতে পারেন :

repotrack -a x86_64 -p /repos/Packages [packages]

দুর্ভাগ্যক্রমে -aপতাকা (খিলান) সহ একটি ত্রুটি রয়েছে । এটি i686 এবং x86_64 ডাউনলোড করবে।

এটি ঠিক করার উপায় এখানে:

if opts.arch:
    #archlist = []
    #archlist.extend(rpmUtils.arch.getArchList(opts.arch))
    archlist = opts.arch.split(',') # Change to this
else:
    archlist = rpmUtils.arch.getArchList()

আপনি repoqueryগ্রুপ প্যাকেজগুলির তালিকা পেতে ব্যবহার করতে পারেন :

repoquery --qf=%{name} -g --list --grouppkgs=all [groups]

যা আপনি রেপট্র্যাকে খাওয়াতে পারেন:

repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages

পরিবর্তে রেপট্র্যাক ব্যবহার করার জন্য আপডেট করা হয়েছে। পুনর্বিবেচনার --requires --resolveবিকল্পটি ডিপ্সের জন্য পুনরাবৃত্তভাবে কাজ করে না।
লুক

--recursiveপুনরাবৃত্তির সাথে কাজ করার জন্য পুনরায় জিজ্ঞাসা কমান্ডটিতে বিকল্প যুক্ত করুন ।
জায়েস্টার

উপরে প্রস্তাবিত পদ্ধতিটি পুনরায় ঠিক করা আমার পক্ষে কাজ করে না: x86_64 খিলানের জন্য কোনও প্যাকেজ ডাউনলোড করা হয়নি। যাইহোক ভাল টিপের জন্য +1: রেপট্র্যাক দিয়ে কেউ i386 এবং x86_64 উভয়ই ডাউনলোড করতে পারে এবং অপ্রয়োজনীয় অংশ ফিল্টার করে ফেলতে পারে।
আলেকজান্ডার ভাসিলজেভ

@ লুক অংশ কীভাবে ব্যবহার করবেন ... এর অর্থ শর্তের উল্লেখ থাকলে কোথায় কার্যকর করতে হবে ... এবং যদি আমাকে রেপোয়ারি কমান্ডের মধ্যে কেবলমাত্র কিছু নির্দিষ্ট প্যাকেজ পরীক্ষা করার প্রয়োজন হয়।
এভিজে

2
আমি উত্স কোড পরিবর্তন করার পরামর্শ দেব না। যদি সত্যিই, এটি একটি ত্রুটি, এটি আপ স্ট্রিম yum-utilsপ্রকল্পে ফাইল করা উচিত । এটি প্রত্যাশার চেয়ে বেশি প্যাকেজ ডাউনলোড করার কারণ হ'ল ফাংশন rpmUtils.arch.getArchList()প্রদত্তটির জন্য সমস্ত সামঞ্জস্যপূর্ণ আর্কিটেকচার ফিরিয়ে দেয়। এটি উদাহরণস্বরূপ noarchআর্কিটেকচারের অন্তর্ভুক্ত যা x86_64প্যাকেজগুলির দ্বারা প্রয়োজন হতে পারে । আপনি উত্সটি পরীক্ষা করতে পারেন: yum.baseurl.org/gitweb?p=yum.git
স্যামুয়েল ফ্যান

18

প্রত্যেকের তথ্যের জন্য, yumdownloaderকাজটি করবেন না। Anyone yum এর সাথে প্যাকেজ পরিচালনার কিছু অভিজ্ঞতা আছে এমন ব্যক্তির পক্ষে প্রত্যাশা করা স্বাভাবিক যে নিম্নলিখিত কমান্ড-লাইনটি পুনরায় প্যাকেজ আরপিএম এবং তার সমস্ত নির্ভরতা ডাউনলোড করবে:

yumdownloader --resolve <package>

তবে তা হয় না। এটি প্রথম স্তরের নির্ভরতা বা ইতিমধ্যে ইনস্টল না থাকাগুলি মুদ্রণ করতে পারে। আমি নিশ্চিত না.

এখানে একটি পদ্ধতি যা CentOS 6.5 এ কাজ করে। জন্য downloadonly প্ল্যাগইন ইনস্টল করতে ধাপগুলি অনুসরণ করুন yumযেমন কর্তৃক প্রদত্ত রেড হ্যাট । মূলত, CentOS 6.x এ, করুন:

$ sudo yum install yum-plugin-downloadonly.noarch

তারপরে --installrootস্যুইচটির সাথে মিলিয়ে প্লাগইনটি ব্যবহার করুন yum। এটি yumসমাধান করতে এবং তারপরে সিস্টেমে ইতিমধ্যে ইনস্টল করা নির্ভরতাগুলি এড়িয়ে যাওয়া থেকে বাধা দেয় ।

sudo yum install \
  --installroot=</path/to/tmp_dir> \
  --downloadonly --downloaddir <rpm_dir> <package>

আপনি প্যাকেজটির আরপিএম <package>এবং ডিরেক্টরিতে এর সমস্ত নির্ভরতা ডাউনলোড করবেন <rpm_dir>। গিট সহ উদাহরণ:

$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
  --downloadonly --downloaddir rpms/ git

স্থানীয় নির্ভরতা ব্যবহার করে আপনি কীভাবে এই প্রক্রিয়াটি উল্টান এবং পাতার প্যাকেজ ইনস্টল করবেন?
পক্ষপাত

Centos65 sudo yum install yum-plugin-downloadonly.noarchবলে No package yum-plugin-downloadonly.noarch available.কি করবে?
হাওয়ার্ড লি

@ হাওয়ার্ডলি চলমান yum search yumdownloaderফিরছেনyum-utils.noarch
আলী

5
আমি পতাকা Cannot find a valid baseurl for repo: base/$releasever/x86_64যুক্ত করার সময় আমি এই ত্রুটিটি পেয়েছি --installroot
মাইক এস

এই লিঙ্কটিরCannot find a valid baseurl... সমাধান সহ সেন্টোস 7-তে সমস্যা থেকে মুক্তি পেয়েছেন : প্যারামিটারটি যুক্ত করুন--releasever=/
চিরলো

2

আমি বুঝতে পারি যে থ্রেডটি পুরানো, তবে যদি কেউ এর মধ্যে থেকে হোঁচট খায় তবে আপনি পছন্দসই আচরণটি সম্পাদন করতে yum ব্যবহার করতে পারেন।

প্রথমে তাত্ক্ষণিকভাবে ডাউনলোডনিয় প্লাগইন (আরএইচইএল-র জন্য নির্দেশাবলী): (আরএইচইল 5)

$ yum install yum-downloadonly

(RHEL6)

$ yum install yum-plugin-downloadonly

এরপরে নিম্নলিখিত কমান্ডটি চালান:

$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]

আপনি যদি ইয়ম উপেক্ষা করেন --downloaddirতবে স্বয়ংক্রিয়ভাবে ডাউনলোড হয়ে যাবে/var/cache/yum

সুতরাং আপনার বিশেষত yumdownloader ব্যবহার করার প্রয়োজন না হলে আমি মনে করি লক্ষ্যটি অর্জনের এটি সহজতম উপায়।


4
প্যাকেজ ইতিমধ্যে ইনস্টল করা থাকলে এটি এখনও একটি সমস্যা
জ্যাক এস

2

যদি আপনি ভবিষ্যত (ফেডোরা 23+) থেকে থাকেন তবে যেখানে ইউন ডিএনএফ দ্বারা প্রতিস্থাপন হচ্ছে, আপনি সম্ভবত এই বাশ স্ক্রিপ্টটিকে দরকারী মনে করতে পারেন।

rpmDownloader:

#!/bin/sh
set -xev
rm -fr packages
#dnf download $1 --destdir packages
export PATH=.:$PATH
echo $PWD
DEPS=$(rpmResolver $1)
dnf download $DEPS --destdir packages
rm -fr ${1}-dependencies
mv packages ${1}-dependencies

rpmResolver:

#!/bin/sh
goal=$1
deps=$(rpm -q --qf '[%{REQUIRENAME}\n]'  $goal | egrep -v '^(rpmlib|rtld|config|/)')
goals=
while true; do
  subs=$(rpm -q --qf '%{NAME}\n' --whatprovides $deps | sort -u | tr '\n' ' ')
  if [ ."$subs" = ."$goals" ]; then
    echo -n "$goals "
    exit 0
  fi
  goals=$(echo $goals $subs | tr ' ' '\n' | sort -u | tr '\n' ' ')
  for sub in $subs; do
    subdeps=$(rpm -q --qf '[%{REQUIRENAME}\n]' $sub | egrep -v '^(rpmlib|rtld|config|/)')
    deps=$(echo $deps $subdeps | sort -u)
  done
done

9
এটা কি এখনও ভবিষ্যত?
কিরকপ্যাট

1

আমি দেখতে পেয়েছি যে অনুশীলনে এই জাতীয় রক্ষণাবেক্ষণ করা কঠিন। আমরা এই রেপো তৈরি করেছি কারণ:

  • আমরা একাধিক সার্ভারের জন্য স্থানীয় উত্স থেকে প্যাকেজগুলি টানতে চেয়েছিলাম।
  • শুধুমাত্র বিশ্বস্ত প্যাকেজগুলি ইনস্টল করার অনুমতি দিন।

আমরা যে বিষয়গুলি পেরেছি তা হ'ল:

  • প্যাকেজ আপ টু ডেট রাখছে। নির্ভরতা পরিবর্তিত হয়। কিছু যোগ করা হয়, অন্যদের সরানো হয়।
  • আমরা ইনস্টল করতে চাইলে নতুন প্যাকেজ যুক্ত করা হচ্ছে।
  • উপরের চ্যালেঞ্জগুলি সমালোচনামূলক আপডেটগুলি ঠেকানোর প্রক্রিয়াটি দীর্ঘায়িত করেছিল।

শেষ পর্যন্ত আমাদের সমস্যার আরও ভাল সমাধানটি ছিল অফিসিয়াল রেপো এবং আমাদের ব্যবহৃত প্যাকেজগুলি ক্যাশে করা। এটি ভাল কাজ করে কারণ:

  • আমরা কেবলমাত্র প্যাকেজগুলি স্থানীয়ভাবে সংরক্ষণ করি।
  • পুরানো প্যাকেজগুলির স্বয়ংক্রিয়ভাবে মেয়াদ শেষ হয়ে যায়।
  • যখন কোনও প্যাকেজ প্রথম ব্যবহৃত হয় তখন এটি সরকারী রেপো থেকে টান দেয় তবে পরবর্তী অনুরোধগুলি ক্যাশে থেকে আসে।
  • অফিশিয়াল রেপো (গুলি) বিশ্বাসের পক্ষে যথেষ্ট ছিল। আমাদের প্রক্সি আয়নাটি কেবল বিশ্বস্ত উত্স থেকে প্যাকেজগুলি টান।

আমরা এনগিনেক্স এবং অন্তর্নির্মিত প্রক্সি সমর্থন ব্যবহার করেছি।


nginx প্রক্সি দুর্দান্ত ধারণা মত শোনাচ্ছে। আরও দীর্ঘমেয়াদী সমর্থন এবং আরও প্যাকেজ সংগ্রহ করে। আপনি যদি আরও কিছু বিবরণ যোগ করেন তবে সহায়ক হতে পারে, সম্ভবত কীভাবে লিঙ্ক করতে হবে বা
কোনও

0

লুক এর উত্তর এবং মন্তব্য উপর ভিত্তি করে ...

এই লেখার হিসাবে repotrackনিম্নলিখিত আর্কিটেকচারের সব ম্যাচ হবে x86_64নিদিষ্ট হয়: x86_64, athlon, i686, i586, i486, i386, এবং noarch

আমার উদ্দেশ্যে আমি কেবল আগ্রহী x86_64এবং noarchপ্যাকেজগুলিতে আগ্রহী এবং আমি জানি যে আমার বিতরণে কোনও athlonপ্যাকেজ নেই।

নিম্নলিখিত কমান্ডটি প্যাকেজ ইউআরএলগুলির একটি তালিকা পেয়েছে, i?86আর্কিটেকচার ফিল্টার আউট করে এবং প্যাকেজগুলি ডাউনলোড করার সাথে সাথে এর নামগুলি ছাপিয়ে দেয়:

repotrack --arch=x86_64 --urls gs1000-server \
    | sed '/\.i[3-6]86\.rpm$/d' \
    | xargs -I {} sh -c 'curl -s -O {}; echo {} | rev | cut -d '/' -f 1 | rev'

মনে রাখবেন যে repotrackএটি আপনাকে সক্ষম করে না যদি এমন কোনও প্যাকেজ খুঁজে না পায় যা আপনার সক্ষম পোষাগুলির মধ্যে নির্ভরতা সন্তুষ্ট করে। এটি নিঃশব্দে এড়িয়ে যায়।


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