Bagaimana cara menggunakan yum untuk mendapatkan semua RPM yang diperlukan, untuk penggunaan offline?

30

Saya memiliki satu server dengan konektivitas bersih, di mana saya dapat menggunakan "yum install $ PACKAGE".
Saya ingin beberapa perintah yum, yum cache-rpms $PACKAGE $DIRECTORYseperti agar semua file RPM yang diperlukan akan diunduh ke $ DIRECTORY, yang juga akan memiliki file ( Install.sh) yang menyatakan urutan untuk menginstal RPM ini, pada banyak server lain tanpa konektivitas bersih.
Install.shbahkan mungkin skrip shell, yang memiliki perilaku yang sama seperti yum install $PACKAGE, kecuali bahwa itu tidak akan menggunakan jaringan, tetapi hanya akan digunakan $DIRECTORY.

Mungkin?

Saya mencari solusi umum di mana yum dan RPM tersedia, tetapi untuk spesifisitas: Ada pada set server CENTOS 6.7.

Prem
sumber
Saya dapat memikirkan beberapa solusi - yang bekerja lebih baik untuk Anda? (1) Pendekatan paket tunggal. Pengunduhan ini lebih sedikit, tetapi membutuhkan lebih banyak pekerjaan manual. Atau ... (2) Seluruh pendekatan repo. Unduhan ini banyak , tetapi dapat dilakukan dengan lebih banyak otomatisasi.
Steve Bonds
@SteveBonds, saya ingin (1) "paket tunggal", karena (2) "seluruh repo" akan membutuhkan waktu untuk mengunduh dan menghabiskan terlalu banyak ruang.
Prem
Sudahkah Anda melihat Spacewalk?
fpmurphy

Jawaban:

40

Berikut adalah contoh spesifik menggunakan "httpd" sebagai paket untuk mengunduh dan menginstal. Proses ini diuji pada CentOS6 dan CentOS7.

Instal barang-barang yang Anda butuhkan dan buat tempat untuk meletakkan RPM yang diunduh:

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

Unduh RPM. Ini menggunakan trik installroot yang disarankan di sini untuk memaksa unduhan penuh semua dependensi karena tidak ada yang diinstal di root kosong itu. Yum akan membuat beberapa metadata di sana, tetapi kita akan membuang semuanya. Perhatikan bahwa untuk CentOS7 releaseverakan menjadi "7".

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

Ya, itu versi kecilnya. Anda seharusnya melihat ukuran unduhan repo penuh!

Hasilkan metadata yang diperlukan untuk mengubah tumpukan RPM baru kami menjadi repo YUM dan membersihkan hal-hal yang tidak lagi kami butuhkan:

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

Konfigurasikan direktori unduhan sebagai repo. Perhatikan bahwa untuk CentOS7, gpgkey akan dinamai "7" bukan "6":

# 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

Untuk memeriksa dependensi yang hilang:

# repoclosure --repoid=offline-httpd

Saya belum tahu mengapa pada CentOS7 ini melaporkan hal-hal seperti libssl.so.10(libssl.so.10)(64bit)hilang dari httpd-toolskapan openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(penyedia perpustakaan itu) jelas ada di direktori. Namun, jika Anda melihat sesuatu yang jelas hilang, ini mungkin kesempatan baik untuk kembali dan menambahkannya menggunakan yum install --downloadonlymetode yang sama di atas.

Saat offline atau setelah menyalin /var/tmp/httpddirektori repo ke server lain atur repo di sana:

# 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

Semoga tidak ada dependensi yang hilang!

Steve Bonds
sumber
3
Saya mencoba mengikuti panduan Anda untuk membangun folder pada CentOS 7 dan menginstalnya di Red Hat 7, semuanya bekerja tanpa kesalahan
Piyin
1
Sementara kompatibilitas antara kedua OS cukup baik sehingga hal-hal seperti itu berfungsi, untuk memastikan dukungan RedHat, Anda harus mengunduh perangkat lunak RedHat dari server RedHat menggunakan proses yang serupa.
Steve Bonds
1
Ya kau benar. Tetapi dalam hal ini lingkungan yang dekat dengan aturan jaringan saya tidak bisa mengubah. Seperti beberapa orang mengatakan: "pelanggan selalu benar"
Piyin
1
bekerja sangat baik di Centos 7, terima kasih!
Carlos Vega
4

Sepertinya Anda menanyakan yumdownloaderyang termuat dalam paket yum-utils. Sudah ada beberapa pertanyaan dan jawaban tentang ini, lihat mis. Unduh semua dependensi dengan yumdownloader, bahkan jika sudah diinstal? atau Bagaimana cara menemukan paket URL dengan Yum?

yumdownloaderakan mengunduh paket, meskipun tidak akan menghasilkan file Install.shkarena pesanan dapat ditentukan oleh yum sendiri, sehingga Anda dapat menginstal paket pada kotak target melalui
yum install ./*rpmfolder dengan paket yang Anda unduh (yang perlu menyertakan semua dependensi dibandingkan dengan instalasi dasar - lihat tautan pertama di atas mengenai repotrack)

doktor5000
sumber
+1, Terdengar seperti yang saya inginkan! Saya akan bereksperimen dan memperbarui jika cocok dengan yang saya inginkan!
Prem
4

Saya membutuhkannya beberapa kali, jadi saya otomatis menjawab @Steve Bonds. Pastikan Anda mendefinisikan PKGsebagai paket untuk menginstal pada kedua mesin (Penafian: untuk CentOS 7. Untuk CentOS 6, ubah --releaseverdan CentOS-7tempatkan.

mesin online

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

di mesin offline:

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
shosaco
sumber
1
Anda mungkin ingin menambahkan -yperintah terakhir untuk mengonfirmasi pemasangan paket ketika dijalankan di latar belakang.
ToniTornado
Sangat bagus bahwa Anda mengambilnya dari deskripsi ke proses otomatis. Kerja bagus!
Steve Bonds