Linux (SLES) remote mit zypper aktualisieren

Unter SLES 11 (SuSE Linux Enterprise Server) gibt es das Werkzeug zypper, mit dem die Aktualisierungen ins System eingespielt werden. Zypper arbeitet in der Shell, benötigt also keinerlei grafische Oberfläche (GUI). In größeren Systemlandschaften kann die Aktualisierung von einem zentralen Repository-Server eingespielt werden. Dieser eignet sich auch als zentrale Anlaufstelle für Systemarbeiten und wird oft als AutoYAST-Server bezeichnet (YAST = Yet Another Setup Tool).

Grundlegend bedarf es dreier Befehle um ein System zu aktualisieren:

zypper ref Der Befehl gleicht die das lokale Repository mit dem Repository des AutoYAST (oder anderen Repositories) ab. Letztlich wird nur geprüft, welche Aktualisierungspakete vorliegen, die installiert werden sollten. Dieser Befehl aktualisiert also noch keine Anwendungen.
zypper lu Der Befehl zeigt tabellarisch an, für welche Pakete Aktualisierungen vorliegen mit alter und neuer Versionsnummer.
zypper up

Mit diesem Befehl wird die eigentliche Aktualisierung für alle Pakete durchgeführt. Abschließend muss ein Neustart des Servers erfolgen.

ACHTUNG: Zur Sicherheit sollte vor Ausführung dieses Befehls eine Datensicherung des Servers durchgeführt werden, damit man im Problemfall wieder zurück kann. Für VMs wird ein Offline-Snapshot empfohlen, damit sind dann Datenbanken auch konsistent. Datenbanken vor der Sicherung stoppen oder zumindest konsistent sichern, so dass auch ein Point-In-Time-Recovery möglich ist. Die Datensicherung sollte unbedingt zeitnah zur Aktualisierung erfolgen.

 

Da SysAdmins in der Regel ihre Arbeit gerne automatisieren, am liebsten von einem zentralen Server aus, und dennoch für alle Fälle ein Protokoll brauchen (gerade Automatisierung braucht Genauigkeit und Qualitätssicherung), wird mit ssh  (Secure Shell), sudo ("SuperUser Do", Ausführung von root-Befehlen ohne root zu sein) und tee (Bildschirmausgabe in Protokoll duplizieren) gearbeitet. Aus Sicherheitsgründen sollte auf den Servern keine root-Anmeldung per ssh möglich sein. Für jeden Admin wird ein eigener User (hier "meinuser") benötigt, der per sudo die Berechtigung hat, root-Befehle auszuführen.

Das könnte dann so aussehen:

autoyast: ~ # ssh meinuser@server1 "sudo zypper ref | tee zypper_ref.log"

autoyast: ~ # ssh meinuser@server1 "sudo zypper lu | tee zypper_lu.log"

ACHTUNG: Hier eine Datensicherung des Servers durchführen! Datenbanken vor der Sicherung stoppen oder zumindest konsistent sichern, so dass auch ein Point-In-Time-Recovery möglich ist.

autoyast: ~ # ssh meinuser@server1 "sudo zypper --non-interactive ref | tee zypper_ref.log"

Beim zypper ref ist in Dialog normalerweise eine Abfrage mit y (yes) zu beantworten, dies kann mit --non-interactive automatisiert werden. Ohne diese Option wartet zypper ref eine Weile, um sich letztlich für n (no) zu entscheiden und dann eben nichts zu aktualisieren. Dann wäre ja die ganze Aktion umsonst gewesen.

Abschließend muss der Server noch neu gestartet werden.

autoyast: ~ # ssh meinuser@server1 "sudo init 6"

So, damit ist dann die eigentliche Arbeit erledigt. Die Protokolle liefen auf dem jeweiligen Server im Home-Verzeichnis von "meinuser" und sollten unbedingt geprüft werden.