Jawaban:
Anda dapat gunakan repotrack seperti ini:
repotrack -a x86_64 -p /repos/Packages [packages]
Sayangnya ada bug dengan -aflag (lengkungan). Ini akan mengunduh i686 dan x86_64.
Berikut cara memperbaikinya:
if opts.arch:
#archlist = []
#archlist.extend(rpmUtils.arch.getArchList(opts.arch))
archlist = opts.arch.split(',') # Change to this
else:
archlist = rpmUtils.arch.getArchList()
Anda dapat menggunakan repoqueryuntuk mendapatkan daftar paket grup:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
Yang bisa Anda masukkan ke mereprack:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursiveopsi ke perintah repoquery untuk membuatnya bekerja secara rekursif.
yum-utilsproyek hulu . Alasan mengapa ia mengunduh lebih banyak paket dari yang diharapkan adalah karena fungsi rpmUtils.arch.getArchList()mengembalikan semua arsitektur yang kompatibel untuk yang diberikan. Ini termasuk misalnya noarcharsitektur yang mungkin dibutuhkan oleh x86_64paket. Anda dapat memeriksa sumbernya: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Untuk informasi semua orang, yumdownloaderjangan lakukan pekerjaan itu. Bagi siapa pun yang memiliki pengalaman dalam manajemen paket dengan `yum, adalah wajar untuk mengharapkan bahwa perintah-baris berikut akan mengunduh RPM paket dan semua ketergantungannya secara rekursif:
yumdownloader --resolve <package>
Tapi ternyata tidak. Mungkin itu mencetak dependensi tingkat pertama atau yang belum diinstal. Saya tidak yakin.
Berikut adalah salah satu metode yang bekerja pada CentOS 6.5. Ikuti langkah-langkah untuk menginstal plugin unduh hanya yumseperti yang diberikan oleh Red Hat . Pada dasarnya, pada CentOS 6.x, lakukan:
$ sudo yum install yum-plugin-downloadonly.noarch
Kemudian gunakan plugin dalam kombinasi dengan --installrootsakelar yum. Ini mencegah yumdari menyelesaikan dan kemudian melewatkan dependensi yang sudah diinstal pada sistem.
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
Anda akan mengunduh RPM paket, <package>dan semua dependensinya di direktori <rpm_dir>,. Contoh, dengan Git:
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
sudo yum install yum-plugin-downloadonly.noarchmengatakan No package yum-plugin-downloadonly.noarch available.apa yang harus dilakukan?
yum search yumdownloaderkembaliyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64ketika saya menambahkan --installrootbendera.
Cannot find a valid baseurl...masalah pada Centos 7 dengan solusi pada tautan ini : Tambahkan --releasever=/parameter
Saya menyadari utasnya sudah tua, tetapi jika ada orang yang menemukan ini, Anda dapat menggunakan yum untuk menyelesaikan perilaku yang diinginkan.
Pertama instal plugin unduh saja (instruksi untuk RHEL): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
Selanjutnya jalankan perintah sebagai berikut:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
Jika Anda mengabaikan --downloaddir yum akan secara otomatis diunduh ke/var/cache/yum
Jadi kecuali Anda perlu menggunakan yumdownloader secara khusus, saya pikir ini akan menjadi cara paling sederhana untuk mencapai tujuan.
Jika Anda dari masa depan (Fedora 23+), di mana yum diganti dengan dnf, Anda mungkin menemukan skrip bash ini bermanfaat.
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
Saya menemukan bahwa dalam praktek membangun repo seperti ini sulit untuk dipertahankan. Kami membangun repo ini karena:
Masalah yang bisa kami temui adalah:
Pada akhirnya solusi yang lebih baik untuk masalah kami adalah dengan mem-proxy repo resmi dan menyimpan paket yang kami gunakan. Ini bekerja dengan baik karena:
Kami menggunakan Nginx dan dukungan proxy bawaan.
Membangun jawaban Luke dan komentarnya ...
Pada tulisan ini repotrackakan cocok dengan semua arsitektur berikut ketika x86_64ditentukan: x86_64, athlon, i686, i586, i486, i386, dan noarch.
Untuk tujuan saya, saya hanya tertarik pada x86_64dan noarchpaket, dan saya tahu bahwa distribusi saya tidak memiliki athlonpaket.
Perintah berikut mendapatkan daftar URL paket, memfilter i?86arsitektur, dan mencetak nama paket saat diunduh:
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'
Catatan yang repotracktidak memperingatkan Anda jika tidak dapat menemukan paket yang memenuhi ketergantungan pada repo Anda yang diaktifkan. Diam-diam melewatkannya.
Juga coba
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
misalnya:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires--resolvetidak bekerja secara rekursif untuk deps.