Ziel
Unser Ziel ist es sicherzustellen, dass die Aktualisierung des Betriebssystems reibungslos und fehlerfrei abläuft.
Betriebssystem- und Softwareversionen
- Betriebssystem: Red Hat Enterprise Linux 6+
Anforderungen
Privilegierter Zugriff auf die Systeme
Schwierigkeit
EINFACH
Konventionen
- # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von
sudo
Befehl - $ – gegebene Linux-Befehle, die als normaler nicht-privilegierter Benutzer ausgeführt werden sollen
Einführung
Das System auf dem neuesten Stand zu halten, ist eine tägliche Aufgabe für einen Systemadministrator sowie einen Desktop-Benutzer. Durch die Anwendung der neuesten (stabilen) verfügbaren Software auf dem System können wir die neuesten Funktionen nutzen und sind besser vor Sicherheitsproblemen geschützt und leiden hoffentlich weniger unter Fehlern. Um das System zu aktualisieren, benötigen Sie konfiguriertes yum
Repositorys, die als Quelle der aktualisierten Software dienen.
Wenn Sie neben dem Computer sitzen, auf dem das zu aktualisierende Betriebssystem ausgeführt wird, können Sie leicht handeln, wenn während des Updates etwas schief geht, z. B. die Ausgabe auf dem Terminal überprüfen oder zu einem Live-System booten, wenn das aktualisierte System nicht zurückkehrt Neustart – aber das ist nicht immer der Fall. Denken Sie an ein Rechenzentrum mit Hunderten oder Tausenden von (virtuellen) Maschinen oder einfach an einen physischen PC, den Sie remote aktualisieren müssen.
Es gibt einfache Schritte, die wir ausführen können, um das System auf das Upgrade vorzubereiten und möglicherweise alle Probleme zu beseitigen, die ein erfolgreiches Update gefährden würden.
Aktualisierungsprozess
Beim Durchführen einer bedingungslosen Aktualisierung (d. h. „alle aktualisieren“), yum
holt alle Metadaten aus den verfügbaren Repositories und berechnet alle zu aktualisierenden Pakete gegen die rpm
Datenbank, die alle Metadaten zu den auf dem System installierten Paketen enthält.
Der Aktualisierungsprozess berechnet auch alle Abhängigkeiten der aktualisierten Pakete, kann alte Pakete ersetzen und alte Kernel-Images gemäß seiner Konfiguration entfernen. Die Anzahl der zu behaltenden Kernel-Images wird in /etc/yum.conf
festgelegt Konfigurationsdatei und ist standardmäßig 3:
installonly_limit=3
Nachdem alle erforderlichen Änderungen berechnet wurden, yum
bietet eine umfangreiche Liste aller Pakete, die für Abhängigkeiten aktualisiert, entfernt oder installiert werden müssen, genauso wie es beim Installieren oder Aktualisieren bestimmter Pakete der Fall ist.
In einer interaktiven Aktualisierungssitzung yum
wird eine Zusammenfassung der zu ändernden Pakete sowie eine Berechnung der Datengröße bereitstellen, die für das Upgrade heruntergeladen werden muss, wie unten gezeigt:
![](https://m.unixlinux.online/article/uploadfiles/202204/2022042507193897.png)
Nach Prüfung der Ergebnisse können wir entscheiden, ob wir das Update starten oder abbrechen. Da yum alles aktualisieren wird, wofür es Updates finden kann, möchten wir möglicherweise nicht benötigte Pakete vorher entfernen. Möglicherweise bemerken wir auch ein Paket, das für ein Update markiert ist und für das wir eine Versionssperre haben, das vom Upgrade ausgeschlossen werden muss.
Nach der Genehmigung lädt yum alle neuen Pakete herunter und installiert/aktualisiert sie nacheinander. Nach Abschluss überprüft es die Integrität der installierten/aktualisierten Pakete und bereinigt nicht benötigte Dateien. Es bietet auch Feedback während des Prozesses, indem es eine Textzeile für jeden Schritt bereitstellt, sowie einen Exit-Code, der darauf hinweist, ob das Upgrade erfolgreich war oder ob ein Problem aufgetreten ist. Außerdem wird der Update-Vorgang abgebrochen, wenn ein Problem auftritt, das aus der Perspektive des konsistenten Systems kritisch erscheint – aber es gibt Zeiten, in denen es bereits zu spät ist, daher ist es besser, das Auftreten von Update-Problemen zu verhindern.
Speicherplatz
leckerer Cache
Aus dem oben beschriebenen Prozess könnten wir erraten, dass wir etwas Speicherplatz für den Update-Vorgang benötigen:
- Die Metadaten aller konfigurierten Repositorys müssen gespeichert werden, bis die Berechnung aller zu aktualisierenden Pakete (und ihrer Abhängigkeiten) abgeschlossen ist.
rpm
Pakete, die das Update selbst darstellen, müssen lokal gespeichert werden, bis sie ordnungsgemäß installiert werden.
Diese Daten werden yum cache
genannt wird nur während des Updates benötigt, kann aber erheblichen Speicherplatz beanspruchen. Der Standardspeicherort für diesen Cache ist /var/cache/yum
Verzeichnis. Es versteht sich von selbst, dass der Aktualisierungsprozess fehlschlägt, wenn nicht genügend Speicherplatz vorhanden ist, um alle erforderlichen Daten zu speichern. Einige nicht abgeschlossene Downloads werden verworfen, aber möglicherweise wird nicht der gesamte Speicherplatz freigegeben, was dazu führt, dass ein System die Aktualisierung nicht bestanden hat und sein Volume /var/cache
enthält fast voll.
Viele Installationen speichern ihre /var
Verzeichnis auf einem Volume, das der Protokollierung gewidmet ist, da der Standardspeicherort für Protokolldateien /var/log
ist auf den meisten Distributionen und die meisten gut funktionierenden Anwendungen funktionieren nicht mehr oder stürzen sogar ab, wenn sie ihre Protokolldateien nicht schreiben können. Es ist also eine schlechte Sache, das Volumen zu füllen, in das sie schreiben .
Je mehr Pakete aktualisiert werden müssen und je mehr Repositories wir haben, desto mehr Platz belegt das Update temporär. Diesen Speicherplatz von Update zu Update zu berechnen, ist schwierig, kann aber mit der später beschriebenen Probelauflösung getestet werden, wenn wir eine Testmaschine mit dem genauen Softwareinhalt haben. Als Beispiel in Echtzeit kann die Aktualisierung von RHEL 7.1 auf 7.5 (Desktop-Installation mit Gnome) 4 GB Cache-Speicher beanspruchen, aber die Installation einiger Fixes auf einem System, das nur ein oder zwei Monate veraltet ist, wird nur in Anspruch nehmen ein paar MB.
Um zu prüfen, wie viel Platz wir haben, können wir den df
verwenden Befehl:
# df -h /var/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_sys-var 6.0G 1.7G 4.4G 28% /var
Im obigen Beispiel haben wir 4,4 GB freien Speicherplatz, was ausreichend ist, da der Server erst vor wenigen Monaten aktualisiert wurde. Um Speicherplatz freizugeben, wäre ein trivialer Schritt, den yum cache
zu leeren bereits gespeichert (vielleicht beim letzten Update). Um zu prüfen, wie viel Speicherplatz ein Cache gerade belegt, können wir du
verwenden :
# du -mcd 1 /var/cache/yum
1103 /var/cache/yum/x86_64
1103 /var/cache/yum
1103 total
Die obigen Zahlen sind in MB, also der yum cache
nimmt in diesem Beispiel etwa 1 GB Speicherplatz ein und belegt den größten Teil des Speicherplatzes auf /var
Lautstärke.
Cache löschen
Wir können den gesamten Cache mit dem folgenden Befehl leeren:
yum clean all
Aber als yum
teilt uns in der Ausgabe des obigen Befehls auf RHEL 7-Versionen mit, dass möglicherweise verwaiste Daten aus entfernten oder deaktivierten Repositories vorhanden sind, was höchstwahrscheinlich nach kleineren Release-Upgrades der Fall sein wird. In diesem Fall können wir die Daten sicher von Hand löschen:
rm -rf /var/cache/yum/*
Möglicherweise erhalten wir mehr Speicherplatz für das Update, indem wir andere auf dem Volume gespeicherte Daten löschen, z. B. alte Protokolldateien komprimieren/löschen, große Dateien auf andere Volumes verschieben oder die Volume-Größe erweitern.
Verschieben des Caches
Mit den Möglichkeiten von yum
weiterzuarbeiten , wenn wir wirklich wenig Speicherplatz haben, nichts weiter löschen und dem Volume keinen weiteren Speicherplatz hinzufügen können, können wir den Speicherort des yum cache
verschieben auf ein anderes Volume mit mehr freiem Speicherplatz. Wir können den Cache-Speicherort in der yum.conf
konfigurieren oben erwähnte Konfigurationsdatei. Beachten Sie die Standardeinstellung:
cachedir=/var/cache/yum/$basearch/$releasever
Indem Sie den Pfad vor $basearch
ändern die nächste yum-Operation funktioniert mit der gleichen Verzeichnisstruktur, aber auf einem anderen Pfad – hoffentlich mit mehr freiem Speicherplatz für das Upgrade. Wir können den Cache auch auf ein anderes Volume verschieben, indem wir das gesamte Verzeichnis verschieben:
mv /var/cache/yum /extended_data_volume/
Und am ursprünglichen Ort einen Symlink erstellen, der auf den neuen Ort verweist:
ln -s /extended_data_volume/yum /var/cache/yum
Es ist ratsam zu wissen, dass das Update bei einem trivialen Fehler wie wenig Speicherplatz nicht fehlschlägt. Auf einem großen System setzen Systemadministratoren Überwachungstools wie Nagios ein, die auf allen Computern geringen Speicherplatz melden können, wodurch dieser Schritt viel weniger zeitaufwändig und fehleranfällig wird.
Netzwerkfehler
Wenn es Probleme mit der Konnektivität zwischen den Repositories und dem Computer gibt, der das Update durchführt, kann das Update fehlschlagen. Dies kann nur bei den Metadaten oder der neuen RPM-Download-Phase passieren und wird das System nicht beschädigen. Sie können den Aktualisierungsvorgang erneut starten, wenn das Netzwerkproblem behoben ist.
Wenn andererseits das Update von einer interaktiven Sitzung aus initialisiert wird, kann die Verbindung bei einem Netzwerkausfall unterbrochen werden, sodass der Update-Rechner ohne Administrator bleibt, um die Fragen yum
zu beantworten darf fragen. Wenn die Phase der Paketinstallation/-aktualisierung bereits begonnen hat, wird sie unbeaufsichtigt fortgesetzt und kann fehlschlagen oder abgeschlossen werden, wenn dies andernfalls der Fall wäre. Nach erneuter Verbindung kann der Vorgang in der /var/log/yum.log
verfolgt werden .
Lecker Probelauf
Abgesehen von unzureichendem Speicherplatz und Netzwerkproblemen kann das Update in vielen Fällen aufgrund ungelöster Paketabhängigkeiten fehlschlagen. Diese müssen mit Tools gelöst werden, die Paketabhängigkeiten berechnen und handhaben können, aber es wäre hilfreich, vor dem eigentlichen Update zu wissen, dass es Probleme geben wird (und damit die immer zu kurze Ausfallzeit des Systems nicht zu verschwenden). Um diese wertvollen Informationen zu erhalten, können wir den Aktualisierungsprozess so ausführen, als würde er das eigentliche Update ausführen, aber anhalten, bevor das eigentliche Herunterladen, Installieren oder Aktualisieren des Pakets stattgefunden hat.
Rund um Redhat 6.6 wurde eine neue Option eingeführt, die yum
verursacht um bei jeder Frage, die während der Aktualisierung auftaucht, ein „Nein“ anzunehmen – einschließlich der Genehmigung vor der eigentlichen Paketmanipulationsphase, und als Folge davon ist keine tatsächliche Interaktion erforderlich, führen Sie einen Probelauf durch:
yum update --assumeno
Dies kann das ideale Werkzeug sein, um einen Probelauf des kommenden Updates zu erstellen, einschließlich der zu aktualisierenden Pakete und eventuell auftretender Fehler. Betrachten Sie die folgende einfache bash
Skript:
#!/bin/bash
yum update --assumeno &> $(hostname).yum.dryrun.$(date '+%Y-%m-%d').out
exit $?
Das obige Skript kann automatisch ausgeführt werden und liefert einen Textbericht über den Probelauf sowie einen allgemeinen Beendigungscode, der auf Probleme hinweist. Die Ausgabe muss nicht im lokalen Dateisystem gespeichert werden. Das Ziel der Ausgabeumleitung kann ein Netzwerkdateisystem sein, oder der Bericht kann an einen zentralen Berichtsserver gesendet oder von anderen Skripten oder Anwendungen gesammelt werden. Die Berichte können veröffentlicht und an andere IT-Abteilungen zur Genehmigung verteilt werden, auf diese Weise können alle Beteiligten genau sehen, welche Pakete aktualisiert werden und auf welche Version.
Der Probelauf kann mit cron
so geplant werden, dass er in einem bestimmten Zeitrahmen (möglicherweise nachts, um die Systemleistung weniger zu beeinträchtigen) ausgeführt wird , oder von einer zentralen Quelle mit einem Marionetten-Setup ausgeführt werden. Der Exitcode kann auch per Monitoring oder facter
gespeichert und verarbeitet werden , um die möglichen Ergebnisse des bevorstehenden Upgrades zusammenzufassen, bevor Sie fortfahren.
Schlussfolgerung
Auch bei einem oder wenigen Rechnern sollten wir uns sicherheitshalber vor einem Update des gesamten Betriebssystems informieren. Eines Tages wird es ein Problem geben, und es ist viel weniger stressig, wenn Sie es lösen können, bevor es Auswirkungen auf die eigentliche Arbeit einer bestimmten Maschine hat. In größerem Maßstab ist es einfach nicht möglich, neben jedem Server oder Desktop zu sitzen und ihn mit Ihrer Anwesenheit zu unterstützen, in der Hoffnung, dass dies dazu beiträgt, dass das Update fehlerfrei ausgeführt wird.
Die Kenntnis der Phasen des Update-Prozesses, der Fallstricke sowie der Lösung dafür ist für erfolgreiche Updates unerlässlich. Beginnen Sie die nächste Aktualisierungsphase Ihrer gesamten Infrastruktur mit der Gewissheit, dass es keine Probleme geben wird, wenn Sie dies mit Stil tun.