जवाबों:
आप 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
--recursiveपुनरावृत्ति कमांड के विकल्प को जोड़ने के लिए इसे पुनरावर्ती रूप से काम करें।
yum-utilsप्रोजेक्ट में दर्ज किया जाना चाहिए । कारण यह है कि यह अपेक्षा से अधिक पैकेज डाउनलोड करता है, क्योंकि फ़ंक्शन rpmUtils.arch.getArchList()दिए गए एक के लिए सभी संगत आर्किटेक्चर लौटाता है। इसमें उदाहरण के लिए noarchवास्तुकला शामिल है जिसे x86_64पैकेजों की आवश्यकता हो सकती है। आप स्रोत की जाँच कर सकते हैं: yum.baseurl.org/gitweb?p=yum.git/a=blob;f=rpmUtils/…
हर किसी की जानकारी के लिए, yumdownloaderकाम नहीं करता है। `यम के साथ पैकेज प्रबंधन में कुछ अनुभव वाले किसी व्यक्ति के लिए, यह उम्मीद करना स्वाभाविक है कि निम्नलिखित कमांड-लाइन एक पैकेज RPM और उसके सभी आश्रितों को पुन: डाउनलोड करेगा।
yumdownloader --resolve <package>
लेकिन ऐसा नहीं है। हो सकता है कि यह प्रथम-स्तर की निर्भरता या पहले से स्थापित नहीं हैं। मुझे यकीन नहीं है।
यहां एक तरीका है जो CentOS 6.5 पर काम करता है। Red Hatyum द्वारा दिए गए के लिए डाउनलोड करने योग्य प्लगइन को स्थापित करने के लिए चरणों का पालन करें । मूल रूप से, 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>
आप पैकेज के RPM <package>और निर्देशिका में उसकी सभी निर्भरता डाउनलोड करेंगे <rpm_dir>। उदाहरण, गिट के साथ:
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
sudo yum install yum-plugin-downloadonly.noarchकहना है No package yum-plugin-downloadonly.noarch available.कि क्या करना है?
yum search yumdownloaderरिटर्नyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64जोड़ने पर मुझे यह त्रुटि मिलती है --installroot।
मुझे एहसास हुआ कि धागा पुराना है, लेकिन अगर कोई भी इस पार ठोकर खाता है, तो आप वांछित व्यवहार को पूरा करने के लिए यम का उपयोग कर सकते हैं।
पहली बार डाउनलोड करने वाला प्लगइन (RHEL के लिए निर्देश): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
अगला कमांड इस प्रकार है:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
यदि आप नजरअंदाज करते हैं तो --downloaddirयम अपने आप डाउनलोड हो जाएगा/var/cache/yum
इसलिए जब तक आपको विशेष रूप से yumdownloader का उपयोग करने की आवश्यकता नहीं है, मुझे लगता है कि यह लक्ष्य पूरा करने का सबसे सरल तरीका होगा।
यदि आप भविष्य (फेडोरा 23+) से हैं, जहां yum को dnf से बदल दिया जा रहा है, तो आपको यह बैश स्क्रिप्ट उपयोगी लग सकती है।
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
मैंने पाया कि अभ्यास में इस तरह के रेपो को बनाए रखना मुश्किल होता है। हमने यह रेपो बनाया क्योंकि:
हम जिन मुद्दों को पार कर सकते हैं, वे थे:
अंत में हमारी समस्या का बेहतर समाधान था कि हम आधिकारिक रिपोज को प्रॉक्सी करें और हमारे द्वारा उपयोग किए जाने वाले पैकेजों को कैश करें। यह अच्छी तरह से काम करता है क्योंकि:
हमने Nginx और अंतर्निहित प्रॉक्सी समर्थन का उपयोग किया।
ल्यूक के जवाब और टिप्पणियों पर निर्माण ...
इस लेखन के रूप में repotrackजब निम्न आर्किटेक्चर से मेल नहीं खाता होगा x86_64निर्दिष्ट किया जाता है: x86_64, athlon, i686, i586, i486, i386, और noarch।
मेरे उद्देश्यों के लिए मुझे केवल x86_64और noarchपैकेजों में दिलचस्पी है, और मुझे पता है कि मेरे वितरण में कोई athlonपैकेज नहीं है ।
निम्न आदेश में पैकेज URL की एक सूची मिलती है, 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यह आपको चेतावनी नहीं देता है यदि यह एक पैकेज नहीं ढूंढ सकता है जो आपके सक्षम प्रतिनिधि में निर्भरता को संतुष्ट करता है। यह चुपचाप इसे छोड़ देता है।
भी आज़माएं
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
उदाहरण के लिए:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires--resolveविकल्प के लिए पुनरावृत्ति का विकल्प पुनरावर्ती रूप से काम नहीं करता है।