Come usare yum per ottenere tutti gli RPM richiesti, per l'uso offline?


30

Ho un server con connettività di rete, dove posso usare "yum install $ PACKAGE".
Voglio un comando yum, in modo yum cache-rpms $PACKAGE $DIRECTORYtale che tutti i file RPM richiesti vengano scaricati su $ DIRECTORY, che avrà anche un file ( Install.sh) che indica l'ordine in cui installare questi RPM, su molti altri server senza connettività di rete.
Install.shpuò anche essere uno script di shell, che ha lo stesso comportamento di yum install $PACKAGE, tranne che non utilizzerà la rete, ma utilizzerà solo $DIRECTORY.

Possibile?

Sto cercando una soluzione generale in cui sono disponibili yum e RPM, ma per specificità: è su un set di server CENTOS 6.7.


Mi viene in mente un paio di soluzioni ... quale funziona meglio per te? (1) L'approccio a pacchetto unico. Questo scarica meno, ma richiede più lavoro manuale. Oppure ... (2) L'intero approccio repo. Questo scarica molto , ma può essere fatto con più automazione.
Steve Bonds,

@SteveBonds, vorrei (1) "pacchetto singolo", perché (2) "intero repository" richiederà tempo per scaricare e consumare troppo spazio.
Prem

Hai visto Spacewalk?
fpmurphy,

Risposte:


40

Ecco un esempio specifico usando "httpd" come pacchetto da scaricare e installare. Questo processo è stato testato su CentOS6 e CentOS7.

Installa le cose che ti servono e crea un posto dove mettere gli RPM scaricati:

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

Scarica gli RPM. Questo utilizza il trucco di installazione suggerito qui per forzare un download completo di tutte le dipendenze poiché non è installato nulla in quella radice vuota. Yum creerà alcuni metadati lì dentro, ma butteremo via tutto. Si noti che per CentOS7 releaseversarebbe "7".

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

Sì, quella era la versione piccola. Avresti dovuto vedere la dimensione dei download full-repo!

Genera i metadati necessari per trasformare la nostra nuova pila di RPM in un repository YUM e ripulire le cose di cui non abbiamo più bisogno:

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

Configurare la directory di download come repository. Nota che per CentOS7 il gpgkey sarebbe chiamato "7" invece di "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

Per verificare le dipendenze mancanti:

# repoclosure --repoid=offline-httpd

Non ho capito perché su CentOS7 questo riporti cose come libssl.so.10(libssl.so.10)(64bit)mancare da httpd-toolsquando openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(il fornitore di quella libreria) è chiaramente presente nella directory. Tuttavia, se vedi qualcosa che ovviamente manca, questa potrebbe essere una buona possibilità per tornare indietro e aggiungerlo usando lo stesso yum install --downloadonlymetodo sopra.

Quando si è offline o dopo aver copiato la /var/tmp/httpddirectory repo sull'altro server, impostare il repository lì:

# 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

Eventualmente nessuna dipendenza mancante!


3
Ho provato a seguire la tua guida per creare la cartella su CentOS 7 e installarla su Red Hat 7, tutto ha funzionato senza errori
Piyin,

1
Sebbene la compatibilità tra i due sistemi operativi sia abbastanza buona da funzionare in modo simile, per garantire il supporto di RedHat, è necessario scaricare il software RedHat dai server di RedHat usando un processo simile.
Steve Bonds,

1
Sì hai ragione. Ma in questo caso era un ambiente vicino con regole di rete che non potevo modificare. Come alcuni dicono: "il cliente ha sempre ragione"
Piyin,

1
funziona molto bene in Centos 7, grazie!
Carlos Vega,

4

Sembra che tu stia chiedendo yumdownloaderquale sia contenuto nel pacchetto yum-utils. Ci sono già alcune domande e risposte a riguardo, vedi ad esempio Scarica tutte le dipendenze con yumdownloader, anche se già installate? o Come posso trovare gli URL dei pacchetti con Yum?

yumdownloaderscaricherà i pacchetti, anche se non genererà un file Install.shpoiché l'ordine può essere determinato da yum stesso, quindi è possibile installare i pacchetti sulla casella di destinazione tramite
yum install ./*rpmnella cartella con i pacchetti scaricati (che deve includere tutte le dipendenze rispetto a un installazione di base - vedere il primo link sopra per quanto riguarda repotrack)


+1, sembra quello che voglio! Sperimenterò e aggiornerò se corrisponde a quello che voglio!
Prem

4

Ne avevo bisogno più volte, quindi ho automatizzato la risposta di @Steve Bonds. Basta essere sicuri di definire PKGil pacchetto da installare su entrambe le macchine (Dichiarazione di non responsabilità: per CentOS 7. Per CentOS 6, modificare --releasevere CentOS-7spot.

macchina 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

sulla macchina 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

1
Potresti voler aggiungere -yl'ultimo comando per confermare l'installazione di pacchetti quando eseguito in background.
ToniTornado,

È fantastico che tu l'abbia portato da una descrizione a un processo automatizzato. Bel lavoro!
Steve Bonds,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.