Wie verwende ich yum, um alle erforderlichen RPMs für die Offline-Verwendung zu erhalten?

30

Ich habe einen Server mit Netzkonnektivität, auf dem ich "yum install $ PACKAGE" verwenden kann.
Ich möchte einen yum-Befehl, yum cache-rpms $PACKAGE $DIRECTORYso dass alle erforderlichen RPM-Dateien in $ DIRECTORY heruntergeladen werden, das auch eine Datei ( Install.sh) enthält, in der die Reihenfolge angegeben ist, in der diese RPMs auf vielen anderen Servern ohne Netzverbindung installiert werden.
Install.shMöglicherweise handelt es sich sogar um ein Shell-Skript, das das gleiche Verhalten aufweist wie yum install $PACKAGE, außer dass es das Netzwerk nicht verwendet, sondern nur verwendet $DIRECTORY.

Möglich?

Ich bin auf der Suche nach einer allgemeinen Lösung, bei der YUM und RPM verfügbar sind, aber aus Gründen der Spezifität: Es ist auf einer Reihe von CENTOS 6.7-Servern.

Prem
quelle
Ich kann mir ein paar Lösungen vorstellen - welche funktionieren für Sie besser? (1) Der Einzelpaketansatz. Dies wird weniger heruntergeladen, erfordert jedoch mehr manuelle Arbeit. Oder ... (2) Der gesamte Repo-Ansatz. Dies lädt viele herunter , kann aber mit mehr Automatisierung durchgeführt werden.
Steve Bonds
@SteveBonds, ich möchte (1) "einzelnes Paket", weil (2) "ganze Repo" Zeit zum Herunterladen und zu viel Platz verbrauchen wird.
Prem
Haben Sie sich Spacewalk angesehen?
fpmurphy

Antworten:

40

Hier ist ein spezielles Beispiel, in dem "httpd" als Paket zum Herunterladen und Installieren verwendet wird. Dieser Prozess wurde sowohl auf CentOS6 als auch auf CentOS7 getestet.

Installieren Sie das benötigte Material und erstellen Sie einen Speicherort für die heruntergeladenen RPMs:

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

Laden Sie die RPMs herunter. Hierbei wird der hier vorgeschlagene Trick installroot verwendet , um einen vollständigen Download aller Abhängigkeiten zu erzwingen, da in diesem leeren Stammverzeichnis nichts installiert ist. Yum wird dort einige Metadaten erstellen, aber wir werden alles wegwerfen. Beachten Sie, dass für CentOS7 releasever"7" wäre.

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

Ja, das war die kleine Version. Sie sollten die Größe der Full-Repo-Downloads gesehen haben!

Generieren Sie die Metadaten, die erforderlich sind, um unseren neuen Stapel von RPMs in ein YUM-Repo zu verwandeln, und bereinigen Sie die Dinge, die wir nicht mehr benötigen:

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

Konfigurieren Sie das Download-Verzeichnis als Repo. Beachten Sie, dass für CentOS7 der gpgkey "7" anstelle von "6" heißt:

# 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

So überprüfen Sie die fehlenden Abhängigkeiten:

# repoclosure --repoid=offline-httpd

Ich habe nicht herausgefunden, warum auf CentOS7 Dinge gemeldet werden, die libssl.so.10(libssl.so.10)(64bit)fehlen, httpd-toolswenn openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(der Anbieter dieser Bibliothek) eindeutig im Verzeichnis vorhanden ist. Wenn Sie dennoch feststellen, dass etwas offensichtlich fehlt, ist dies möglicherweise eine gute Gelegenheit, es mit der yum install --downloadonlyoben beschriebenen Methode wieder hinzuzufügen .

Wenn Sie offline sind oder das /var/tmp/httpdRepo-Verzeichnis auf den anderen Server kopiert haben, richten Sie das Repo dort ein:

# 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

Hoffentlich keine fehlenden Abhängigkeiten!

Steve Bonds
quelle
3
Ich habe versucht, Ihrem Leitfaden zu folgen, um den Ordner unter CentOS 7 zu erstellen und ihn unter Red Hat 7 zu installieren. Alles hat ohne Fehler
funktioniert
1
Obwohl die Kompatibilität zwischen den beiden Betriebssystemen gut genug ist, um die RedHat-Unterstützung zu gewährleisten, sollten Sie die RedHat-Software mit einem ähnlichen Verfahren von den RedHat-Servern herunterladen.
Steve Bonds
1
Ja, du hast Recht. Aber in diesem Fall war es eine enge Umgebung mit Netzwerkregeln, die ich nicht ändern konnte. Wie manche sagen: "Der Kunde hat immer Recht"
Piyin
1
funktioniert sehr gut in Centos 7, danke!
Carlos Vega
4

Scheint, Sie fragen, yumdownloaderwelche im Paket enthalten ist yum-utils. Hierzu gibt es bereits einige Fragen und Antworten, siehe zB Alle Abhängigkeiten mit yumdownloader herunterladen, auch wenn bereits installiert? oder Wie finde ich mit Yum Paket-URLs?

yumdownloaderDie Pakete werden heruntergeladen, es wird jedoch keine Datei generiert, Install.shda die Reihenfolge von yum selbst bestimmt werden kann. Sie können die Pakete also auf der Zielbox über
yum install ./*rpmden Ordner mit den heruntergeladenen Paketen installieren (der alle Abhängigkeiten im Vergleich zu a enthalten muss Basisinstallation - siehe den ersten Link oben bezüglich repotrack)

doktor5000
quelle
+1, Hört sich an wie was ich will! Ich werde experimentieren und aktualisieren, wenn es passt, was ich will!
Prem
4

Ich brauchte es mehrmals, also habe ich die Antwort von @Steve Bonds automatisiert. Stellen Sie nur sicher, dass Sie PKGdas Paket definieren , das auf beiden Computern installiert werden soll (Haftungsausschluss: für CentOS 7. Ändern Sie für CentOS 6 das --releaseverund CentOS-7spot.

Online-Maschine

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

auf Offline-Maschine:

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
quelle
1
Möglicherweise möchten Sie -yden letzten Befehl ergänzen , um die Installation von Paketen zu bestätigen, wenn diese im Hintergrund ausgeführt werden.
ToniTornado
Es ist großartig, dass Sie es von einer Beschreibung zu einem automatisierten Prozess gebracht haben. Gute Arbeit!
Steve Bonds