Im Folgenden wird beschrieben, wie Sie mit dem Softwareverwaltungssystem (SMS, Software Maintenance System) CMS von einem AIX-Verwaltungsserver aus Pakete des RPM Package Manager aktualisieren, installieren, abfragen und löschen.
RPM-Pakete enthalten Software und Aktualisierungen für das Betriebssystem Red Hat Linux, die mit dem Befehl rpm auf einem einzelnen System installiert werden. Der Befehl smsupdatenode ist die SMS-Schnittstelle für das Aktualisieren, Installieren, Abfragen und Löschen von RPM-Paketen auf Linux-Knoten. Der Befehl besitzt einen Testmodus, in dem Befehlsergebnisse zurückgegeben werden, ohne Knoten zu aktualisieren. Der Befehl smsupdatenode kann manuell von einem Systemadministrator ausgeführt werden. Er kann aber auch so konfiguriert werden, dass er automatisch in bestimmten Intervallen mit Hilfe eines cron-Jobs ausgeführt wird.
Es gibt zwei Modi für die Verteilung von SMS-RPM-Paketen: Installationsmodus und Aktualisierungsmodus. Im Installationsmodus werden neue RPM-Pakete auf einem Knoten installiert. Im Aktualisierungsmodus kann ein RPM-Paket nur dann installiert werden, wenn bereits eine frühere Version des Pakets auf dem Knoten installiert ist. Der Befehl smsupdatenode kann auch zur Aktualisierung von Software auf einem Verwaltungsserver verwendet werden, falls auf der Maschine das Paket csm.client installiert ist. Ausführliche Informationen zur Verwendung des Befehls finden Sie auf der Man-Page zum Befehl smsupdatenode.
Wenn Sie RPM-Pakete für SMS bereitstellen möchten, müssen Sie sie auf einem Verwaltungsserver in einer Verzeichnisstruktur speichern, die den CSM-Attributen der Zielknoten entspricht. Für jeden Knotentyp benötigen Sie zwei Verzeichnisse: /RPMS und /updates. Das Verzeichnis /RPMS enthält die RPM-Pakete für die Verteilung, die kopiert wurden, falls Sie eine vollständige Installation des Betriebssystems durchgeführt oder den Befehl smsupdatenode --copy auf den Knoten ausgeführt haben. Diese RPM-Pakete für die Verteilung werden verwendet, um Abhängigkeiten, die von Softwareaktualisierungen benötigt werden, zu erfüllen. Aktualisierungen der RPM-Pakete für die Verteilung oder der RPM-Pakete, die neue Software enthalten, müssen im Verzeichnis /updates gespeichert werden.
Die Verzeichnisse /RPMS und /updates sind Unterverzeichnisse der folgenden Verzeichnisstruktur: /csminstall/InstallOSName/InstallDistributionName/InstallDistributionVersion/InstallPkgArchitecture. Nachdem Sie die aktualisierte oder neue Software im Verzeichnis /updates gespeichert haben, können Sie den Befehl smsupdatenode ausführen.
Bevor Sie die Softwareverwaltung auf Knoten durchführen, kopieren Sie die RPM-Pakete von den CDs mit dem Betriebssystem der Knoten. Diese RPM-Pakete enthalten die Abhängigkeiten für RPM-Aktualisierungen. Speichern Sie sie im entsprechenden Verzeichnis /csminstall/.../RPMS. Dieser Vorgang erfolgt automatisch über die Befehle csmsetupks und csmsetupsis, die für die Installation des Betriebssystems auf den Knoten verwendet werden. Falls Sie jedoch Nur-CSM-Knoten installieren, können Sie den Befehl smsupdatenode mit den Befehls-Flags --copy (und optional --path) zum Kopieren dieser RPMs verwenden.
Damit SMS die RPM-Pakete ordnungsgemäß aktualisieren und installieren kann, muss der RPM-Name mit dem Kennsatz des RPM-Pakets beginnen, gefolgt vom Architekturtyp und der Erweiterung .rpm. Der Kennsatz des RPM-Pakets wird vom Befehl rpm -qa zurückgegeben. Die meisten RPM-Pakete werden auf diese Weise benannt. Es ist auch möglich, dass einige Bezeichnungen von RPM-Paketen Datumsangaben anstelle der Versionsangabe aufweisen. Geben Sie Folgendes ein, um den richtigen RPM-Paketnamen zu bestimmen:
rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm\n' -p rpm-DateinameBenennen Sie anschließend das RPM-Paket entsprechend der Ausgabe des Befehls um. Wenn Sie beispielsweise den richtigen Namen des RPM-Pakets mit der Bezeichnung k_deflt-20020903.rpm feststellen möchten, geben Sie Folgendes ein:
rpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm\n' \
-p k_deflt-20020903.rpmDer Befehl gibt in diesem Beispiel den richtigen RPM-Paketnamen wie folgt zurück: k_deflt-2.4.18-243.i386.rpm.
Wenn Sie vorhandene RPM-Software auf den Knoten aktualisieren möchten, speichern Sie die aktualisierten RPM-Pakete im Verzeichnis /csminstall/.../updates entsprechend den Attributen der Zielknoten. Führen Sie den Befehl smsupdatenode mit Flags aus, um die Knoten anzugeben. Auf diese Weise werden alle RPM-Pakete im Verzeichnis /updates der Knoten aktualisiert, auf denen bereits frühere Versionen installiert sind. Falls diese RPM-Pakete noch nicht installierte Abhängigkeiten besitzen, versucht der Befehl smsupdatenode , diese Abhängigkeiten über die im entsprechenden /RPMS-Verzeichnis gespeicherten RPM-Pakete für die Verteilung zu erfüllen. Die folgenden Beispiele erläutern die Verwendung des Befehls smsupdatenode:
smsupdatenode -a
smsupdatenode -N RedHat73Nodes
Falls Sie RPM-Software nur auf bestimmten Knotengruppen installieren möchten, speichern Sie die dafür vorgesehenen RPM-Pakete in den Unterverzeichnissen der Knotengruppe unterhalb des Verzeichnisses /csminstall/.../updates. Wenn Sie beispielsweise RPM-Pakete nur auf den Knoten in der Knotengruppe RedHat73Nodes installieren möchten, erstellen Sie das Verzeichnis /csminstall/.../updates/RedHat73Nodes. Es werden nur Unterverzeichnisse erkannt, die zu definierten CSM-Knotengruppen gehören. Das Open-Source-Tool "AutoUpdate" sucht jedoch auch in den Unterverzeichnissen, die zur Architektur des Knotens gehören. Sie sollten daher keine Architekturunterverzeichnisse erstellen. Wenn Sie das nächste Mal den Befehl smsupdatenode für die Knotengruppe ausführen, die dem Unterverzeichnis entspricht, wird die Software aktualisiert.
SMS verwendet das Open-Source-Tool AutoUpdate, um RPM-Pakete zu aktualisieren. Auf Knoten, auf denen das Betriebssystem Red Hat ausgeführt wird, aktualisiert AutoUpdate standardmäßig nicht den Kernel. Auf Knoten mit SuSE/SLES jedoch werden Kernel-RPM-Pakete wie reguläre RPM-Pakete behandelt. Gehen Sie daher bei der Verwendung von SMS zur Aktualisierung von RPM-Paketen (Namen, die mit k_ beginnen) auf SuSE/SLES-Knoten sorgfältig vor. Bei der Standardeinstellung für die Aktualisierung von RPM-Paketen werden die Pakete vollständig ersetzt. Falls Sie den Kernel auf einem SuSE/SLES-Knoten aktualisieren, wird der vorhandene Kernel vollständig ersetzt. Es ist anschließend nicht mehr möglich, den Originalzustand wiederherzustellen. Prüfen Sie nach der Aktualisierung eines Kernel auf einem SuSE/SLES-Knoten die Datei /etc/lilo.conf auf Richtigkeit und führen Sie den Befehl lilo zum Aktualisieren des Boot-Satzes aus.
Auf Knoten, auf denen das Betriebssystem Red Hat ausgeführt wird, werden Kernel-Aktualisierungen von AutoUpdate besonders gehandhabt. Sie müssen diese Aktualisierungen in der Konfigurationsdatei aktivieren. Kernel-Aktualisierungen können durch Änderung der von SMS verwendeten Datei autoupdate.conf aktiviert werden. Eine Kopie dieser Datei wird auf dem Verwaltungsserver unter /var/opt/csm/autoupdate.conf gespeichert. Sie wird beim ersten Ausführen des Befehls smsupdatenode generiert. Gehen Sie wie folgt vor, um Kernel-Aktualisierungen auf Knoten mit dem Betriebssystem Red Hat zu aktivieren:
DoKernel=1 DoBoot=0 DoInitRD=0
Sie können mit dem Befehl smsupdatenode auch einen angepassten Kernel installieren, der als RPM-Paket vorliegen muss. Mit der folgenden Prozedur wird ein RPM-Paket mit angepasstem Kernel auf einer Maschine mit dem Betriebssystem Red Hat erstellt. Anweisungen zum Erstellen eine Kernel-RPM-Pakets auf anderen Betriebssystemen finden Sie in der Dokumentation zum Betriebssystem.
echo "%post" echo "cd /boot" echo "ln -sf vmlinuz-$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION vmlinuz" echo "ln -sf System.map-$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION System.map" echo "ln -sf module-info-$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION \ module-info" echo "[ -x /usr/sbin/module_upgrade ] && /usr/sbin/module_upgrade" echo "[ -x /sbin/mkkerneldoth ] && /sbin/mkkerneldoth" echo "if [ -x /sbin/new-kernel-pkg ] ; then" echo " /sbin/new-kernel-pkg --mkinitrd --depmod --install \ $VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION" echo "fi" echo "%postun" echo "/sbin/modprobe loop 2> /dev/null > /dev/null || :" echo "if [-x /sbin/new-kernel-pkg ] ; then" echo " /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove \ $VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION" echo "fi"
Speichern Sie RPM-Pakete mit neuer Software im Verzeichnis /csminstall/.../updates. Falls keine früheren Versionen dieser RPM-Pakete auf den Knoten vorhanden sind, müssen Sie die Software mit dem Befehl smsupdatenode installieren. Geben Sie das Flag -i und das RPM-Paket ohne Pfadnamen an. RPM-Pakete für die Verteilung aus dem Verzeichnis /RPMS werden verwendet, um eventuelle Abhängigkeiten zu erfüllen. Beispiel:
Das Paket emacs-21.2-2.i386.rpm wird auf allen Knoten mit Red Hat 7.3 und der Architektur i386 ausgeführt.
Sie können den Befehl smsupdatenode verwenden, um RPM-Pakete von Knoten in Ihrem Cluster zu löschen. Pakete werden gelöscht, wenn die Flags -e --deps Paketname bzw. -e --nodeps Paketname angegeben werden. Das Flag --deps gibt an, dass das Paket Paketname und alle davon abhängigen Pakete gelöscht werden. Das Flag --nodeps gibt an, dass nur das Paket Paketname gelöscht werden soll. Geben Sie beispielsweise zum Löschen des Pakets gnome-games-1.4.0.1-5 und allen davon abhängigen Paketen Folgendes ein:
smsupdatenode -av -e --deps gnome-games-1.4.0.1-5
Es gibt kein spezielles SMS-Dienstprogramm zur Wiederherstellung früherer Versionen von RPM-Paketen. Falls Sie eine frühere Version eines RPM-Pakets wiederherstellen möchten, gehen Sie wie folgt vor:
smsupdatenode -e --nodeps -p Paketname Hostname,...smsupdatenode -i Paketname Hostname,...Alternativ können Sie auch folgendermaßen vorgehen:
Das Flag -q des Befehls smsupdatenode kann zum Abfragen von RPM-Paketen verwendet werden, die auf Cluster-Knoten installiert sind. Führen Sie den Befehl smsupdatenode -aq aus, um eine Liste mit eindeutigen RPM-Paketen abzurufen, die auf jedem Knoten installiert sind. Mit dem Befehl smsupdatenode -aqc wird eine Liste der allgemeinen RPM-Pakete auf jedem Knoten zurückgegeben.
Sie können einen cron-Job definieren, um den Befehl smsupdatenode automatisch in bestimmten Intervallen auszuführen. Führen Sie hierfür die folgenden Schritte aus:
Minute Stunde Tag-des-Monats Monat Wochentag BefehlWenn der Befehl smsupdatenode über den cron-Job täglich um 1 Uhr morgens ausgeführt werden soll, fügen Sie die folgende Zeile hinzu:
0 1 * * * /opt/csm/bin/smsupdatenode -a