Daha önceden yüklenmiş olsa bile, tüm bağımlılıkları yumdownloader ile indir.


34

Daha önceden yüklenmiş olsalar bile, tüm bağımlılıkları yumdownloader ile indirmenin bir yolu var mı?

Yerel bir repo oluşturmaya çalışıyorum ve yalnızca ihtiyacımız olan paketleri eklemek istiyorum.

Yanıtlar:


29

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

Yerine repotrack kullanmak için güncellendi. repoquery'nin --requires --resolveseçeneği tekrarlayan olarak deps için çalışmıyor.
Luke

--recursiveyinelemeli çalışmasını sağlamak için seçeneği repoquery komutuna ekleyin .
ZaSter

Yukarıda belirtilen şekilde repotrack düzeltmek benim için işe yaramadı: x86_64 arch için hiçbir paket indirilmedi. Yine de iyi bir ipucu için +1: repotrack ile biri hem i386 hem de x86_64'ü indirebilir ve gereksiz kısmı filtreleyebilir.
Alexander Vasiljev

@Luke düzeltme parçasının nasıl kullanılacağı ... koşul belirtilirse nerede çalıştırılacağı anlamına gelir ... ve repoquery komutunda yalnızca belirli bir paket olup olmadığını kontrol etmem gerekirse.
AVJ

2
Kaynak kodunu değiştirmenizi tavsiye etmem. Eğer gerçekten, bu bir hatadır, ters yönde 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/…
Samuel Phan

18

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

Bu süreci nasıl tersine çevirirsiniz ve yaprak paketini yerel bağımlılıkları kullanarak kurarsınız?
önyargı

centos65 ne yapmalı sudo yum install yum-plugin-downloadonly.noarchdiyor No package yum-plugin-downloadonly.noarch available.?
Howard Lee,

@HowardLee Koşu yum search yumdownloadergetiriyum-utils.noarch
Ali

5
Bayrak Cannot find a valid baseurl for repo: base/$releasever/x86_64eklediğimde bu hatayı alıyorum --installroot.
Mike S

Bu bağlantıdakiCannot find a valid baseurl... çözüm ile Centos 7'deki problemden kurtuldum : Parametre ekleyin--releasever=/
Chirlo

2

İş 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.


4
Paket zaten kuruluysa bu hala bir sorun
Zack S

2

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

9
Gelecek mi?
kirkpatt

1

Uygulamada bunun gibi bir depo inşa etmenin zor olduğunu gördüm. Bu repoyu biz yaptık.

  • Birden çok sunucu için paketleri yerel bir kaynaktan çekmek istedik.
  • Yalnızca güvenilir paketlerin yüklenmesine izin ver.

Karşılaştığımız sorunlar şunlardı:

  • Paketleri güncel tutmak. Bağımlılıklar değişir. Bazıları eklenir, bazıları kaldırılır.
  • Kurmak istediğimiz yeni paketleri eklemek.
  • Yukarıdaki zorluklar kritik güncellemeleri zorlama sürecini uzattı.

Sonunda daha iyi bir çözüm , bizim soruna vekil resmi repolar ve biz kullanılan paketler önbelleğe. Bu iyi çalışıyor çünkü:

  • Yalnızca gerçekten kullandığımız paketler yerel olarak depolanır.
  • Eski paketler otomatik olarak sona erer.
  • Bir paket ilk kez kullanıldığında resmi depodan çıkar, ancak sonraki istekler önbellekten gelir.
  • Resmi depolara güvenmek, güven için yeterliydi. Proxy aynamız paketleri yalnızca güvenilir kaynaklardan çeker.

Nginx ve dahili proxy desteğini kullandık.


nginx proxy harika bir fikir gibi geliyor. Daha iyi uzun süreli destek ve daha fazla paket alır. Abit daha fazla ayrıntı, belki nasıl bir bağlantı veya başka bir şey eklediyseniz yararlı olur
28:30 '

0

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.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.