Yanıtlar:
Bunun gibi kullanabilirsiniz repotrack:
repotrack -a x86_64 -p /repos/Packages [packages]
Maalesef -abayrakla ilgili bir hata var (kemer). İ686 ve x86_64'ü indirecek.
İşte bunu düzeltmek için nasıl:
if opts.arch:
#archlist = []
#archlist.extend(rpmUtils.arch.getArchList(opts.arch))
archlist = opts.arch.split(',') # Change to this
else:
archlist = rpmUtils.arch.getArchList()
repoqueryGrup paketlerinin bir listesini almak için kullanabilirsiniz :
repoquery --qf=%{name} -g --list --grouppkgs=all [groups]
Hangi repotrack içine besleyebilirsiniz:
repoquery --qf=%{name} -g --list --grouppkgs=all [groups] | xargs repotrack -a x86_64 -p /repos/Packages
--recursiveyinelemeli çalışmasını sağlamak için seçeneği repoquery komutuna ekleyin .
yum-utilsprojeye dosyalanmalıdır . Beklenenden daha fazla paket indirmesinin nedeni, işlevin rpmUtils.arch.getArchList()verilen için tüm uyumlu mimarileri döndürmesidir. Örneğin, paketler noarchtarafından ihtiyaç duyulabilecek mimariyi içerir x86_64. Kaynağı kontrol edebilirsiniz: yum.baseurl.org/gitweb?p=yum.git;a=blob;f=rpmUtils/…
Herkesin bilgisi için, yumdownloaderiş yapmaz. `Yum 'un paket yönetiminde biraz deneyime sahip olan herkes için, aşağıdaki komut satırının tekrar tekrar paket RPM ve tüm bağımlılıklarını indirmesini beklemek doğaldır:
yumdownloader --resolve <package>
Ama öyle değil. Birinci düzey bağımlılıkları veya henüz kurulmamış olanları basıyor olabilir. Emin değilim.
İşte CentOS 6.5 üzerinde çalışan bir yöntem. Red Hatyum tarafından verilen downloadonly eklentisini yüklemek için adımları takip edin . Temel olarak, CentOS 6.x’te şunları yapın:
$ sudo yum install yum-plugin-downloadonly.noarch
Ardından, --installrootşalter ile birlikte eklentiyi kullanın yum. Bu yum, sistemde zaten yüklü olan bağımlılıkları çözüp atlamayı engeller .
sudo yum install \
--installroot=</path/to/tmp_dir> \
--downloadonly --downloaddir <rpm_dir> <package>
Paketin RPM'lerini <package>ve dizindeki tüm bağımlılıklarını indirirsiniz <rpm_dir>. Git ile Örnek:
$ mkdir root rpms
$ sudo yum install --installroot=/home/roy/root \
--downloadonly --downloaddir rpms/ git
sudo yum install yum-plugin-downloadonly.noarchdiyor No package yum-plugin-downloadonly.noarch available.?
yum search yumdownloadergetiriyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64eklediğimde bu hatayı alıyorum --installroot.
Cannot find a valid baseurl... çözüm ile Centos 7'deki problemden kurtuldum : Parametre ekleyin--releasever=/
İş parçacığının eski olduğunu anlıyorum, ancak herhangi birinin bu konuda tökezlemesi durumunda, istediğiniz davranışı gerçekleştirmek için yum kullanabilirsiniz.
İlk önce downloadonly eklentisini kurun (RHEL için talimatlar): (RHEL5)
$ yum install yum-downloadonly
(RHEL6)
$ yum install yum-plugin-downloadonly
Daha sonra komutu aşağıdaki gibi çalıştırın:
$ yum install --downloadonly --downloaddir=/some/arbitrary/path [package]
Eğer göz ardı ederse --downloaddiryum otomatik indirir/var/cache/yum
Bu yüzden özellikle yumdownloader kullanmanız gerekmiyorsa, bunun hedefe ulaşmak için en basit yol olacağını düşünüyorum.
Gelecekten geliyorsanız (Fedora 23+), yum'ın dnf ile değiştirildiği yerde, bu bash betiğini yararlı bulabilirsiniz .
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
Uygulamada bunun gibi bir depo inşa etmenin zor olduğunu gördüm. Bu repoyu biz yaptık.
Karşılaştığımız sorunlar şunlardı:
Sonunda daha iyi bir çözüm , bizim soruna vekil resmi repolar ve biz kullanılan paketler önbelleğe. Bu iyi çalışıyor çünkü:
Nginx ve dahili proxy desteğini kullandık.
Luke'un cevabı ve yorumları üzerine inşa etmek ...
Bu yazı olarak repotrackaşağıdaki mimarileri tüm maç olacak x86_64belirtilir: x86_64, athlon, i686, i586, i486, i386, ve noarch.
Amaçlarım için sadece ilgileniyorum x86_64ve noarchpaketler ve dağıtımımın hiçbir athlonpaketi olmadığını biliyorum .
Aşağıdaki komut paket URL'lerinin bir listesini alır, i?86mimarileri filtreler ve paketlerin indirilirken adlarını yazdırır:
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'
Not repotrackBir paket bulamazsa uyarmaz tatmin senin etkin depolarındakii bir bağımlılık. Sessizce atlar.
Ayrıca denemek
repoquery -R --resolve --recursive <name> | xargs -r yumdownloader
Örneğin:
repoquery -R --resolve --recursive firefox | xargs -r yumdownloader
--requires--resolveseçeneği tekrarlayan olarak deps için çalışmıyor.