Yanıtlar:
Bunun gibi kullanabilirsiniz repotrack
:
repotrack -a x86_64 -p /repos/Packages [packages]
Maalesef -a
bayrakla 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()
repoquery
Grup 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
--recursive
yinelemeli çalışmasını sağlamak için seçeneği repoquery komutuna ekleyin .
yum-utils
projeye 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 noarch
tarafı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, yumdownloader
iş 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.noarch
diyor No package yum-plugin-downloadonly.noarch available.
?
yum search yumdownloader
getiriyum-utils.noarch
Cannot find a valid baseurl for repo: base/$releasever/x86_64
eklediğ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 --downloaddir
yum 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 repotrack
aşağıdaki mimarileri tüm maç olacak x86_64
belirtilir: x86_64
, athlon
, i686
, i586
, i486
, i386
, ve noarch
.
Amaçlarım için sadece ilgileniyorum x86_64
ve noarch
paketler ve dağıtımımın hiçbir athlon
paketi olmadığını biliyorum .
Aşağıdaki komut paket URL'lerinin bir listesini alır, i?86
mimarileri 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 repotrack
Bir 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
--resolve
seçeneği tekrarlayan olarak deps için çalışmıyor.