Çevrimdışı kullanım için gerekli tüm RPM'leri almak için yum nasıl kullanılır?


30

Ağ bağlantısı olan ve "yum install $ PACKAGE" komutunu kullanabileceğim bir sunucu var. Gerekli tüm RPM dosyalarının $ DIRECTORY'e indirileceği
gibi bazı yum komutları da istiyorum yum cache-rpms $PACKAGE $DIRECTORY, ki Install.shbu RPM'lerin yüklenme sırasını belirten bir dosya ( ) da var , ağ bağlantısı olmayan birçok sunucuya.
Install.shhatta yum install $PACKAGEağı kullanmayacak, ancak yalnızca kullanacak olması dışında aynı davranışa sahip bir kabuk betiği bile olabilir $DIRECTORY.

Mümkün?

Yum ve RPM'nin mevcut olduğu genel bir çözüm arıyorum, ancak spesifiklik için: Bir CENTOS 6.7 sunucusunda.


Sizin için daha iyi olan birkaç çözüm düşünebilirim? (1) Tek paket yaklaşımı. Bu daha az indirir, ancak daha fazla el işi gerektirir. Veya ... (2) Bütün repo yaklaşımı. Bu çok indirme , ancak daha fazla otomasyon ile yapılabilir.
Steve Bonds

@SteveBonds, (1) "tekli paket" istiyorum, çünkü (2) "bütün repo" indirmek ve çok fazla alan tüketmek için zaman alacaktır.
Prem,

Spacewalk'a baktın mı?
fpmurphy

Yanıtlar:


40

İşte indirmek ve yüklemek için paket olarak "httpd" kullanarak belirli bir örnek. Bu işlem hem CentOS6 hem de CentOS7'de test edildi.

İhtiyacınız olan şeyleri yükleyin ve indirilen RPM'leri koymak için bir yer açın:

# yum install yum-plugin-downloadonly yum-utils createrepo
# mkdir /var/tmp/httpd
# mkdir /var/tmp/httpd-installroot

RPM’leri indirin. Bu, o boş köke hiçbir şey yüklenmediğinden, tüm bağımlılıkların tam olarak indirilmesini zorlamak için burada önerilen installroot hilesini kullanır . Yum orada biraz meta veri yaratacaktır, ama hepsini atacağız. CentOS7 releaseveriçin "7" olacağını unutmayın .

# yum install --downloadonly --installroot=/var/tmp/httpd-installroot --releasever=6 --downloaddir=/var/tmp/httpd httpd

Evet, bu oldu küçük versiyonu. Tam repo indirmelerinin boyutunu görmeliydin!

Yeni RPM yığınımızı bir YUM deposuna dönüştürmek için gereken meta verileri oluşturun ve artık gerek duymadığımız şeyleri temizleyin:

# createrepo --database /var/tmp/httpd
# rm -rf /var/tmp/httpd-installroot

İndirme dizinini bir depo olarak yapılandırın. CentOS7 için gpgkey'in "6" yerine "7" olarak adlandırılacağını unutmayın:

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Eksik bağımlılıkları kontrol etmek için:

# repoclosure --repoid=offline-httpd

Neden CentOS7’de bu durumun (o kütüphanenin sağlayıcısı) dizinde açıkça göründüğü gibi libssl.so.10(libssl.so.10)(64bit)eksik olan şeyleri rapor ettiğini anlamadım . Yine de, belli ki eksik bir şey görürseniz, geri dönmek ve yukarıdaki aynı yöntemi kullanarak eklemek için iyi bir şans olabilir .httpd-toolsopenssl-libs-1.0.1e-51.el7_2.2.x86_64.rpmyum install --downloadonly

Çevrimdışıyken veya /var/tmp/httpdrepo dizinini diğer sunucuya kopyaladıktan sonra repoyu orada ayarlayın:

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
# yum --disablerepo=\* --enablerepo=offline-httpd install httpd

Umarım eksik bağımlılıklar yoktur!


3
Klasörü CentOS 7 üzerine inşa etmek ve Red Hat 7'ye kurmak için rehberinizi takip etmeye çalıştım, hepsi hatasız çalıştı
Piyin

1
İki işletim sistemi arasındaki uyumluluk bunun gibi şeylerin işe yarayacak kadar iyi olmasına rağmen, RedHat desteğini sağlamak için, benzer bir işlem kullanarak RedHat yazılımlarını RedHat sunucularından indirmelisiniz.
Steve

1
Evet haklısın. Fakat bu durumda, değiştiremediğim ağ kuralları olan yakın bir ortamdı. Bazıları dediği gibi: "müşteri her zaman haklıdır"
Piyin

1
Centos 7'de çok iyi çalışıyor, teşekkürler!
Carlos Vega

4

İstediğiniz yumdownloaderpaketin içerdiği gibi görünüyor yum-utils. Bu konuda zaten birkaç soru ve cevap var, bkz. Ör. Yumdownloader ile tüm bağımlılıkları indir, daha önce yüklenmiş olsa bile? veya Paket URL’leri Yum ile nasıl bulabilirim?

yumdownloaderpaketleri indirecektir, ancak Install.shsiparişin kendisi tarafından belirlenebileceği gibi bir dosya oluşturmayacak olmasına rağmen , paketleri
yum install ./*rpmindirilen paketlerinizle birlikte bir klasör üzerinden hedef kutuya yükleyebilirsiniz. temel kurulum - yukarıdaki ilk bağlantıya bakın repotrack)


+1, İstediğim gibi geliyor! İstediğim şeyle uyuşuyorsa deneme ve güncelleme yapacağım!
Prem

4

Birkaç kez ihtiyacım vardı, bu yüzden @ Steve Bonds'ın cevabını otomatikleştirdim. PKGHer iki makineye kurulacak paket olarak tanımladığınızdan emin olun (Feragat: CentOS 7 için. CentOS 6 için, --releaseverve CentOS-7noktasını değiştirin .

çevrimiçi makine

PKG=... # NAME OF THE PACKAGE TO INSTALL ON OFFLINE MACHINE
yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG
createrepo --database /tmp/$PKG
rm -rf /tmp/$PKG-installroot
rsync -arv /tmp/$PKG/ [IP of the machine]:/tmp/$PKG

çevrimdışı makinede:

PKG=... # NAME OF THE PACKAGE
echo "[offline-$PKG]
name=CentOS-\$releasever - $PKG
baseurl=file:///tmp/$PKG/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" >  /etc/yum.repos.d/offline-$PKG.repo

# install package offline:
yum --disablerepo=\* --enablerepo=offline-$PKG install --nogpgcheck $PKG

1
-yArka planda çalıştırıldığında paketlerin yüklenmesini onaylamak için son komuta eklemek isteyebilirsiniz .
ToniTornado

Bir açıklamadan otomatik bir işleme götürmeniz harika. İyi iş!
Steve Bon,
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.