Automatisierung von Inventory Scout

Im Artikel wird beschrieben welche Schritte notwendig sind, um den Inventory Scout automatisiert auf einer Reihe von Systemen laufen zu lassen. Im Anschluß wird ein Skript gezeigt (Download verfügbar), welches diese Schritte komfortabel implementiert. Das Sammeln von Microcode-Ständen auf beliebig vielen Systemen ist dann mit einem Kommando-Aufruf möglich.

Mit Inventory Scout, im Zusammenspiel mit MDS (Microcode Discovery Service), lassen sich Firmware- und Microcode-Stände hervorragend überwachen. Etwas mühsam ist aber die Überwachung der Stände für eine komplette Umgebung, insbesondere da in der Regel auf den einzelnen Systemen keine direkte Verbindung zum Internet möglich ist. In einer größeren Umgebung bietet es sich an, die Microcode-Stände zentral über einen NIM-Server zu überwachen. Der NIM-Server benötigt dabei entweder eine direkte Verbindung zum Internet oder eine Anbindung über einen Proxy-Server. LPARs, denen physikalische Hardware zugeordnet ist, sind in der Regel nur die Virtual-I/O-Server.

Für eine automatische Ausführung von Inventory Scout müssen auf dem NIM-Server die folgenden Schritte ausgeführt werden:

Schritt 1: Download der aktuellen catalog.mic Datei von IBM auf den NIM-Server

IBM aktualisiert regelmäßig die catalog.mic Datei. Bei einem Lauf von Inventory Scout, sollte man daher sicherstellen, möglichst die aktuellste Version der catalog.mic Datei, zu verwenden. Die Datei kann z.B. per FTP über den URL ftp://ftp.software.ibm.com/software/server/firmware/catalog.mic heruntergeladen werden. Die Datei kann man z.B. mit curl herunterladen:

# curl  ftp://ftp.software.ibm.com/software/server/firmware/catalog.mic -o catalog.mic  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  307k  100  307k    0     0  90060      0  0:00:03  0:00:03 --:--:-- 90060
#

Muss ein Proxy verwendet werden, sieht der Aufruf so aus:

# curl –proxy http://10.2.1.187  ftp://ftp.software.ibm.com/software/server/firmware/catalog.mic -o catalog.mic  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  307k  100  307k    0     0  83764      0  0:00:03  0:00:03 --:--:-- 83764
#

Dabei wird die heruntergeladene Datei im aktuellen Verzeichnis unter dem Namen catalog.mic abgespeichert.

Die Datei sollte auf dem NIM-Server heruntergeladen werden, von dort kann diese per NIM-Operationen auf beliebige NIM-Clients (z.B. die Virtual-I/O-Server) kopiert werden.

Schritt 2: Kopieren (Push) des aktuellen catalog.mic auf das Ziel-System

Als nächstes muss die aktuelle catalog.mic Datei auf das Zielsystem, in der Regel ein Virtual-I/O-Server, kopiert werden. Ist das Ziel ein NIM-Client, kann das Kopieren über NIM-Mittel erfolgen. Dies geht am einfachsten mit /usr/lpp/bos.sysmgt/nim/methods/c_rcp. Wir nehmen an, dass sich die catalog.mic Datei auf dem NIM-Server im Verzeichnis /var/adm/invscout/microcode befindet und auf dem Ziel auch in dieses Verzeichnis kopiert werden soll. Der Aufruf für den NIM-Client ms01-vio1 wäre:

# /usr/lpp/bos.sysmgt/nim/methods/c_rcp /var/adm/invscout/microcode/catalog.mic ms01-vio1:/var/adm/invscout/microcode/catalog.mic
#

Das Kommando muss als root ausgeführt werden.

Damit wäre schon einmal die aktualisierte catalog.mic Datei auf dem Virtual-I/O-Server.

Schritt 3: Ausführen von Inventory Scout (invscout) auf dem Ziel-System

Nun kann Inventory Scout auf dem Zielsystem gestartet werden. Hier hilft das NIM-Kommando /usr/lpp/bos.sysmgt/nim/methods/c_rsh. Das zu startende Kommando ist /usr/sbin/invscout. Hier wieder der Aufruf für den NIM-Client ms01-vio1:

# /usr/lpp/bos.sysmgt/nim/methods/c_rsh ms01-vio1 /usr/sbin/invscout

******  Command  ----  V2.2.0.20

******  Logic Database V2.2.0.2

Initializing ...

Identifying the system ...
Working ...
Getting system microcode level(s) ...
Scanning for device microcode level(s) ...

150 devices detected; each dot (.)
represents 10 devices processed:
..............

Writing Microcode Survey upload file ...

Microcode Survey complete

The output files can be found at:
Upload file: /var/adm/invscout/ms01-vio1.mup
Report file: /var/adm/invscout/invs.mrp
Report file: /var/adm/invscout/invs.mrrup

To transfer the invscout 'Upload file' for microcode
comparison, see your service provider's web page.
#

Das für die Analyse über die IBM MDS Webseite notwendige Microcode Survey Upload File ist /var/adm/invscout/ms01-vio1.

Schritt 4: Einsammeln (Collect) des erzeugten Microcode Survey Upload Files vom Ziel-System

In diesem Schritt wird das erzeugte Microcode Survey Upload File des NIM-Clients vom NIM-Server eingesammelt und in einem Verzeichnis auf dem NIM-Server abgelegt. Das Herunterladen einer Datei kann über das Kommando /usr/lpp/bos.sysmgt/nim/methods/c_rsh erfolgen, indem als Remote-Kommando ein cat auf die zu kopierende Datei ausgeführt wird, wobei dann auf dem NIM-Server einfach die Ausgabe in eine Datei umgeleitet wird. Das sieht dann für den NIM-Client ms01-vio1 so aus:

# /usr/lpp/bos.sysmgt/nim/methods/c_rsh ms01-vio1 "/usr/bin/cat /var/adm/invscout/ms01-vio1.mup" > ms01-vio1.mup
#

Schritt 5: Hochladen (Upload) des eingesammelten Upload Files nach IBM MDS

Als letztes muss das eingesammelt Microcode Survey Upload File des NIM-Clients zur Analys durch IBM MDS nach IBM hochgeladen werden. Der URL für den Upload ist http://www14.software.ibm.com/support/customercare/mds/mds. Am einfachsten kann die Datei mit dem Kommando curl hochgeladen werden. Vom IBM Web-Server wird dann per default eine HTML-Datei mit der Analyse zurückgeschickt. Der Aufruf für die in Schritt 4 eingesammelte Upload Datei ms01-vio1.mup sieht dann wie folgt aus:

# curl -F "mdsData=@ms01-vio1.mup;type=multipart/form" -H "Expect:" http://www14.software.ibm.com/support/customercare/mds/mds -o ms01-vio1.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20894  100 10399  100 10495  12409  12523 --:--:-- --:--:-- --:--:-- 24903
#

Unter Verwendung eines Proxies sieht das so aus:

# curl --proxy http://172.26.129.46:3128 -F "mdsData=@ms01-vio1.mup;type=multipart/form" -H "Expect:" http://www14.software.ibm.com/support/customercare/mds/mds -o ms01-vio1.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 20894  100 10399  100 10495  13213  13335 --:--:-- --:--:-- --:--:-- 26515
#

In der Datei ms01-vio1.html befindet sich die Übersicht über die Microcode-Stände und Hinweise welche Versionen zu aktualisieren sind.

Eine gute Beschreibung zu Inventory Scout und MDS findet man hier: http://gibsonnet.net/blog/cgaix/html/MDS%20reports.html (Chris Gibson)

Zusammenfassen der Schritte in einem Skript

Soll Inventory Scout auf mehreren Systemen ausgeführt werden, dann muss der Schritt 1 lediglich einmal ausgeführt werden. Die Schritte 2 bis 5 können dann in einer Schleife für eine Liste von Systemen ausgeführt werden.

Für die automatisierte Ausführung von Inventory Scout auf mehreren Systemen haben wir das Shell-Skript run_invscout geschrieben. Das Skript kann in unserem Download-Bereich (https://powercampus.de) heruntergeladen werden. Zur Illustration sei kurz die Ausgabe eines Laufs für 2 NIM-Clients gezeigt:

# run_invscout ms01-vio1 ms02-vio2
create backup of catalog.mic file ... done - /var/adm/invscout/microcode/catalog.mic.202006100958
downloading catalog.mic from IBM ... ok - version 202006100958
ms01-vio1 update catalog file ... updated
ms01-vio1 execute invscout ... executed
ms01-vio1 collect microcode upload file ... downloaded
ms01-vio1 upload microcode upload file to IBM ... uploaded
ms02-vio2 update catalog file ... updated
ms02-vio2 execute invscout ... executed
ms02-vio2 collect microcode upload file ... downloaded
ms02-vio2 upload microcode upload file to IBM ... uploaded
#

Das Skript unterstützt eine Reihe von Optionen:

# run_invscout -h
ERROR: unknown option '-h'
Usage: run_invscout [-c|-C] [-d|-D] [-p|-P] [-u|-U] [-x http://<proxy>:<port>] [<nim_client>|<mac_group> ...]
   -c : collect microcode survey upload file from targets (default)
   -C : do not collect microcode survey upload file
   -d : download catalog.mic file from IBM (default)
   -D : do not download catalog.mic file from IBM
   -p : push catalog.mic file to targets (default)
   -P : do not push catalog.mic file to targets
   -u : upload microcode surevey upload files to IBM (default)
   -U : do not upload microcode surevey upload files to IBM
   -x : proxy-server and port to use for downloads and uploads
#

Per Default werden alle 5 Schritte durchlaufen. Über die Angabe von Optionen können aber auch einzelne Schritte weggelassen werden. Ist z.B. die catalog.mic Datei auf dem NIM-Server schon aktuell, kann man das erneute Downloaden mit der Option „-D“ (do not download catalog.mic) überspringen. Die bei der Analyse entstehenden Reports in Form von HTML-Dateien werden standardmäßig im Verzeichniz /export/mup abgelegt. Dies kann im Skript über die Variable MICROCODE_UPLOAD_DIR geändert werden.

Besitzt der NIM-Server keine direkte Internet-Verbindung, dann kann mit der Option „-x“ ein zu verwendender Proxy angegeben werden. Ist auf dem NIM-Server der Electronic Service Agent konfiguriert, dann wird die Proxy Konfiguration automatisch von ESA übernommen und man braucht keinen Proxy auf der Kommando-Zeile anzugeben.

Das Skript verwendet curl für Downloads und Uploads, daher muss eine funktionierende curl Version installiert sein, z.B. aus der AIX Toolbox (https://www.ibm.com/support/pages/aix-toolbox-linux-applications-downloads-alpha).

Der Usage-Meldung kann man entnehmen das auch NIM mac_groups angegeben werden können. Insbesondere wird per Default, wenn gar kein Argument angegeben wird, die NIM mac_group mit dem Namen all_vioserver verwendet. Das Default-Ziel für run_invscout kann im Skript über die Variable DEFAULT_TARGET abgeändert werden.

Die NIM mac_group all_vioserver lässt sich aber auch ganz einfach anlegen, wobei mindestens ein Mitglied angegeben werden muß:

# nim -o define -t mac_group -a add_member=ms01-vio1 all_vioserver
#

Weitere Mitglieder lassen sich über

# nim -o change -a add_member=ms01-vio2 all_vioserver
#

hinzufügen.

Ist die Standard-Eingabe des Skripts nicht mit einem TTY verbunden, z.B. weil das Skript über einen crontab-Eintrag gestartet wird, dann wird eine zusätzlich Begin- und Ende-Marke mit Zeitstempel ausgegeben, sowie eine Status-Zeile mit der Anzahl NIM-Clients, für die mindestens einer der Schritte fehlgeschlagen ist. Das ist nützlich, wenn das Skript automatisiert gestartet und die Ausgabe in eine Log-Datei umgeleitet wird. Dies sei hier durch Schließen des Standard-Eingabe-Kanals demonstriert für das Default-Ziel all_vioserver:

# run_invscout </dev/null
BEGIN: Mon Jun 22 16:03:45 CEST 2020
create backup of catalog.mic file ... done - /var/adm/invscout/microcode/catalog.mic.202006100958
downloading catalog.mic from IBM ... ok - version 202006100958
mac_group all_vioserver ... expanding
ms01-vio1 update catalog file ... updated
ms01-vio1 execute invscout ... executed
ms01-vio1 collect microcode upload file ... downloaded
ms01-vio1 upload microcode upload file to IBM ... uploaded
ms01-vio2 update catalog file ... updated
ms01-vio2 execute invscout ... executed
ms01-vio2 collect microcode upload file ... downloaded
ms01-vio2 upload microcode upload file to IBM ... uploaded
mac_group all_vioserver ... done
FAILED: 0 target(s)
END: Mon Jun 22 16:04:28 CEST 2020
#

Damit können automatisierte Läufe von Inventory Scout über beliebig viele System extrem einfach gestartet werden.