Jawaban:
Anda dapat gunakan repotrack
seperti ini:
repotrack -a x86_64 -p /repos/Packages [packages]
Sayangnya ada bug dengan -a
flag (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 repoquery
untuk 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
--recursive
opsi ke perintah repoquery untuk membuatnya bekerja secara rekursif.
yum-utils
proyek 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 noarch
arsitektur yang mungkin dibutuhkan oleh x86_64
paket. Anda dapat memeriksa sumbernya: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Untuk informasi semua orang, yumdownloader
jangan 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 yum
seperti 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 --installroot
sakelar yum
. Ini mencegah yum
dari 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.noarch
mengatakan No package yum-plugin-downloadonly.noarch available.
apa yang harus dilakukan?
yum search yumdownloader
kembaliyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
ketika saya menambahkan --installroot
bendera.
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 repotrack
akan cocok dengan semua arsitektur berikut ketika x86_64
ditentukan: x86_64
, athlon
, i686
, i586
, i486
, i386
, dan noarch
.
Untuk tujuan saya, saya hanya tertarik pada x86_64
dan noarch
paket, dan saya tahu bahwa distribusi saya tidak memiliki athlon
paket.
Perintah berikut mendapatkan daftar URL paket, memfilter i?86
arsitektur, 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 repotrack
tidak 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
--resolve
tidak bekerja secara rekursif untuk deps.