มีวิธีดาวน์โหลดการอ้างอิงทั้งหมดด้วย yumdownloader แม้ว่าจะติดตั้งไปแล้วหรือไม่
ฉันกำลังพยายามสร้าง repo ในพื้นที่และต้องการรวมแพ็คเกจที่เราต้องการเท่านั้น
มีวิธีดาวน์โหลดการอ้างอิงทั้งหมดด้วย yumdownloader แม้ว่าจะติดตั้งไปแล้วหรือไม่
ฉันกำลังพยายามสร้าง repo ในพื้นที่และต้องการรวมแพ็คเกจที่เราต้องการเท่านั้น
คำตอบ:
คุณสามารถใช้repotrack
แทนเช่นนี้:
repotrack -a x86_64 -p /repos/Packages [packages]
น่าเสียดายที่มีข้อผิดพลาดกับการ-a
ตั้งค่าสถานะ (arch) มันจะดาวน์โหลด 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]
ซึ่งคุณสามารถป้อนลงใน repotrack:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursive
ตัวเลือกให้กับคำสั่ง repoquery เพื่อให้มันทำงานซ้ำ
yum-utils
โครงการต้นน้ำ เหตุผลที่ดาวน์โหลดแพคเกจมากกว่าที่คาดไว้ก็คือฟังก์ชั่นrpmUtils.arch.getArchList()
จะส่งคืนสถาปัตยกรรมที่เข้ากันได้ทั้งหมดสำหรับแพ็คเกจที่ระบุ มันรวมถึงตัวอย่างเช่นnoarch
สถาปัตยกรรมซึ่งอาจจำเป็นต้องใช้โดยx86_64
แพคเกจ คุณสามารถตรวจสอบแหล่งที่มา: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/ …
สำหรับข้อมูลของทุกคนyumdownloader
ไม่ทำงาน สำหรับทุกคนที่มีประสบการณ์ในการจัดการแพ็คเกจด้วย `yum เป็นเรื่องปกติที่จะคาดหวังว่าบรรทัดคำสั่งต่อไปนี้จะดาวน์โหลดแพ็กเกจ RPM ซ้ำและการอ้างอิงทั้งหมด:
yumdownloader --resolve <package>
แต่มันไม่ได้ อาจเป็นได้ว่าพิมพ์การอ้างอิงระดับแรกหรือรายการที่ไม่ได้ติดตั้งไว้ ฉันไม่แน่ใจ.
นี่คือวิธีหนึ่งที่ทำงานบน CentOS 6.5 ทำตามขั้นตอนเพื่อติดตั้งปลั๊กอินดาวน์โหลดyum
ตามที่Red Hatกำหนด โดยพื้นฐานบน 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>
คุณจะดาวน์โหลด RPMs ของแพ็คเกจ<package>
และการอ้างอิงทั้งหมดในไดเรกทอรี, <rpm_dir>
. ตัวอย่างด้วย Git:
$ 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
returnyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
เมื่อฉันเพิ่มการ--installroot
ตั้งค่าสถานะ
ฉันรู้ว่าเธรดเก่า แต่ในกรณีที่มีคนสะดุดคุณสามารถใช้ yum เพื่อให้ได้ตามที่ต้องการ
ขั้นแรกให้ปลั๊กอินดาวน์โหลดอย่างเดียว (คำแนะนำสำหรับ 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 โดยเฉพาะฉันคิดว่านี่จะเป็นวิธีที่ง่ายที่สุดในการบรรลุเป้าหมาย
หากคุณมาจากอนาคต (Fedora 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
ฉันพบว่าในทางปฏิบัติการสร้าง repo เช่นนี้ยากที่จะรักษา เราสร้าง repo นี้เพราะ:
ปัญหาที่เราสามารถพบได้คือ:
ในที่สุดทางออกที่ดีกว่าสำหรับปัญหาของเราก็คือการมอบ repos อย่างเป็นทางการและแคชแพ็คเกจที่เราใช้ วิธีนี้ใช้ได้ผลดีเพราะ:
เราใช้ 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
จะไม่เตือนคุณหากไม่พบแพ็คเกจที่ตรงกับการพึ่งพาใน repos ที่คุณเปิดใช้งาน มันข้ามเงียบ ๆ
ลองดูสิ
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
เช่น:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires
--resolve
ตัวเลือกrepoquery ไม่สามารถใช้ซ้ำได้สำหรับ deps