In diesem Kapitel werden erweiterte Tasks in Verbindung mit SFCB behandelt. Zu deren Verständnis benötigen Sie grundlegende Kenntnisse des Linux-Dateisystems und Erfahrungen mit der Linux-Kommandozeile. In diesem Kapitel werden folgende Tasks beschrieben:
Installieren von CMPI-Anbietern
Testen von SFCB
Verwenden des CIM-Clients wbemcli
Zur Installation eines CMPI-Anbieters müssen Sie seine gemeinsam genutzte Bibliothek in eines der von der Konfigurationsoption providerDirs angegebenen Verzeichnisse kopieren (siehe Abschnitt 30.3.3.15, „providerDirs“). Außerdem muss der Anbieter korrekt mit den Kommandos sfcbstage und sfcbrepos registriert werden.
Das Anbieterpaket ist in der Regel für SFCB vorbereitet. Bei seiner Installation wird also darauf geachtet, dass der Anbieter korrekt registriert wird. Die meisten SBLIM-Anbieter sind für SFCB vorbereitet.
Das Klassenrepository ist der Ort, an dem SFCB Informationen über die CIM-Klassen speichert. Es besteht in der Regel aus einem Verzeichnisbaum mit Namespace-Komponenten. Typische CIM-Namespaces sind root/cimv2 oder root/interop, die in der Regel mit den entsprechenden Verzeichnispfaden des Klassenrepositorys im Dateisystem übereinstimmen:
/var/lib/sfcb/registration/repository/root/cimv2
und
/var/lib/sfcb/registration/repository/root/interop
Jedes Namespace-Verzeichnis enthält die Datei classSchemas. Die Datei enthält eine kompilierte binäre Darstellung aller CIM-Klassen, die unter diesem Namespace registriert sind. Außerdem enthält sie die erforderlichen Informationen über deren CIM-Unterklassen.
Darüber hinaus kann jedes Namespace-Verzeichnis eine Datei mit dem Namen qualifiers enthalten, die alle Qualifizierer des Namespace enthält. Beim Neustart von sfcbd untersucht der Klassenanbieter das Verzeichnis /var/lib/sfcb/registration/repository/ und seine Unterverzeichnisse, um festzustellen, welche Namespaces registriert sind. Danach werden die classSchemas-Dateien entschlüsselt und die Klassenhierarchien der einzelnen Namespaces erstellt.
SFCB kann CIM-Klassen nicht online ändern. Zum Hinzufügen, Ändern oder Entfernen von Klassen müssen Sie offline sein und den SFCB-Dienst anschließend mit rcsfcb restart neu starten, um die Änderungen zu registrieren.
Zum Speichern der Klassen- und Registrierungsdaten der Anbieter verwendet SFCB einen Zwischenspeicher, den so genannten Staging-Bereich. Auf SUSE® Linux Enterprise Server-Systemen ist dies die Verzeichnisstruktur unter /var/lib/sfcb/stage/.
Zum Hinzufügen eines neuen Anbieters führen Sie die folgenden Schritte aus:
Kopieren Sie die Definitionsdateien mit den Anbieterklassen in das Unterverzeichnis ./mofs des Staging-Verzeichnisses (/var/lib/sfcb/stage/mofs).
Kopieren Sie die Registrierungsdatei mit den Namen der Klassen, dem Anbietertyp und dem Namen der ausführbaren Bibliotheksdatei in das Unterverzeichnis
./regs.
Das Staging-Verzeichnis enthält zwei Standard-"mof"-Dateien (Klassendefinitionen): indication.mof und interop.mof. Die MOF-Dateien unter dem Root-Staging-Verzeichnis /var/lib/sfcb/stage/mofs müssen nach der Ausführung des Kommandos sfcbrepos in jeden Namespace kopiert werden. Die Datei interop.mof muss nur in den interop-Namespace kompiliert werden.
Das Verzeichnislayout kann dann wie folgt aussehen:
tux@mercury:~> ls /var/lib/sfcb/stage default.reg mofs regs
tux@mercury:~> ls /var/lib/sfcb/stage/mofs indication.mof root
tux@mercury:~> ls /var/lib/sfcb/stage/mofs/root cimv2 interop suse virt
tux@mercury:~> ls -1 /var/lib/sfcb/stage/mofs/root/cimv2 | less Linux_ABIParameter.mof Linux_BaseIndication.mof Linux_Base.mof Linux_DHCPElementConformsToProfile.mof Linux_DHCPEntity.mof [..] OMC_StorageSettingWithHints.mof OMC_StorageVolumeDevice.mof OMC_StorageVolume.mof OMC_StorageVolumeStorageSynchronized.mof OMC_SystemStorageCapabilities.mof
tux@mercury:~> ls -1 /var/lib/sfcb/stage/mofs/root/interop ComputerSystem.mof ElementConformsToProfile.mof HostSystem.mof interop.mof Linux_DHCPElementConformsToProfile.mof [..] OMC_SMIElementSoftwareIdentity.mof OMC_SMISubProfileRequiresProfile.mof OMC_SMIVolumeManagementSoftware.mof ReferencedProfile.mof RegisteredProfile.mof
tux@mercury:~> ls -1 /var/lib/sfcb/stage/regs AllocationCapabilities.reg Linux_ABIParameter.reg Linux_BaseIndication.reg Linux_DHCPGlobal.reg Linux_DHCPRegisteredProfile.reg [..] OMC_Base.sfcb.reg OMC_CopyServices.sfcb.reg OMC_PowerManagement.sfcb.reg OMC_Server.sfcb.reg RegisteredProfile.reg
tux@mercury:~> cat /var/lib/sfcb/stage/regs/Linux_DHCPRegisteredProfile.reg [Linux_DHCPRegisteredProfile] provider: Linux_DHCPRegisteredProfileProvider location: cmpiLinux_DHCPRegisteredProfile type: instance namespace: root/interop # [Linux_DHCPElementConformsToProfile] provider: Linux_DHCPElementConformsToProfileProvider location: cmpiLinux_DHCPElementConformsToProfile type: instance association namespace: root/cimv2 # [Linux_DHCPElementConformsToProfile] provider: Linux_DHCPElementConformsToProfileProvider location: cmpiLinux_DHCPElementConformsToProfile type: instance association namespace: root/interop #
SFCB verwendet für jeden Anbieter eine angepasste Anbieterregistrierungsdatei.
![]() | Registrierungsdateien von SBLIM-Anbietern |
|---|---|
Alle SBLIM-Anbieter der SBLIM-Website enthalten bereits eine Registrierungsdatei, die zur Generierung der für SFCB benötigten .reg-Datei verwendet wird. | |
Das Format der SFCB-Registrierungsdatei sieht wie folgt aus:
[<class-name>] provider: <provide-name> location: <library-name> type: [instance] [association] [method] [indication] group: <group-name> unload: never namespace: <namespace-for-class> ...
Dabei gilt Folgendes:
<klassenname>
Der Name der CIM-Klasse (erforderlich)
<anbietername>
Der Name des CMPI-Anbieters (erforderlich)
<standortname>
Der Name der Anbieterbibliothek (erforderlich)
type
Der Typ des Anbieters (erforderlich). Hier kann es sich um jede Kombination der folgenden Typen handeln: Instanz, Verknüpfung, Methode oder Bezeichnung.
<gruppenname>
Zur Minimierung der benötigten Laufzeitressourcen können mehrere Anbieter zu Gruppen zusammengefasst und unter einem einzigen Prozess ausgeführt werden. Alle unter dem gleichen <gruppennamen> registrierten Anbieter werden unter dem gleichen Prozess ausgeführt. Standardmäßig wird jeder Anbieter als separater Prozess ausgeführt.
unload
Legt die Richtlinie zum Entladen des Anbieters fest. Zur Zeit wird nur die Option never (nie) unterstützt. Es wird also nicht überprüft, ob der Anbieter leerläuft, er wird daher auch nicht entladen. Standardmäßig wird ein Anbieter dann entladen, wenn er das in der Konfigurationsdatei angegebene Leerlaufzeitlimit überschreitet.
namespace
Eine Liste der Namespaces, für die dieser Anbieter ausgeführt werden kann. Die Liste ist erforderlich, auch wenn hier für die meisten Anbieter root/cimv2 angegeben werden kann.
Wenn sich alle Klassendefinitionen und Anbieterregistrierungsdateien im Staging-Bereich befinden, müssen Sie das SFCB-Klassenrepository mit dem Kommando sfcbrepos -f neu erstellen.
Auf diese Weise können Sie Klassen hinzufügen, ändern oder entfernen. Nach der Neuerstellung des Klassenrepositorys müssen Sie SFCB mit dem Kommando rcsfcb restart neu starten.
Als Alternative enthält das SFCB-Paket ein Dienstprogramm, mit dem die MOF-Klassen- und Registrierungsdateien der Anbieter in die richtigen Verzeichnisse des Staging-Bereichs kopiert werden können.
sfcbstage -r [anbieter.reg] [klasse1.mof] [klasse2.mof] ...
Auch nach Ausführung dieses Kommandos müssen Sie das Klassenrepository neu erstellen und den SFCB-Dienst neu starten.
Das SFCB-Paket enthält die beiden Testskripte wbemcat und xmltest.
wbemcat sendet CIM-XML-Raw-Daten via HTTP-Protokoll an den angegebenen SFCB-Host (standardmäßig "localhost"), der Port 5988 überwacht. Danach zeigt es die zurückgegebenen Ergebnisse an. Die folgende Datei enthält die CIM-XML-Darstellung einer EnumerateClasses-Standardanforderung:
<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLEREQ>
<IMETHODCALL NAME="EnumerateClasses">
<LOCALNAMESPACEPATH>
<NAMESPACE NAME="root"/>
<NAMESPACE NAME="cimv2"/>
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="ClassName">
<CLASSNAME NAME=""/>
</IPARAMVALUE>
<IPARAMVALUE NAME="DeepInheritance">
<VALUE>TRUE</VALUE>
</IPARAMVALUE>
<IPARAMVALUE NAME="LocalOnly">
<VALUE>FALSE</VALUE>
</IPARAMVALUE>
<IPARAMVALUE NAME="IncludeQualifiers">
<VALUE>FALSE</VALUE>
</IPARAMVALUE>
<IPARAMVALUE NAME="IncludeClassOrigin">
<VALUE>TRUE</VALUE>
</IPARAMVALUE>
</IMETHODCALL>
<?xml version="1.0" encoding="utf-8"?>
1743 <CIM CIMVERSION="2.0" DTDVERSION="2.0">
1744 <MESSAGE ID="4711" PROTOCOLVERSION="1.0">
1745 <SIMPLEREQ>
1746 <IMETHODCALL NAME="EnumerateClasses">
1747 <LOCALNAMESPACEPATH>
1748 <NAMESPACE NAME="root"/>
1749 <NAMESPACE NAME="cimv2"/>
1750 </LOCALNAMESPACEPATH>
1751 <IPARAMVALUE NAME="ClassName">
1752 <CLASSNAME NAME=""/>
1753 </IPARAMVALUE>
1754 <IPARAMVALUE NAME="DeepInheritance">
1755 <VALUE>TRUE</VALUE>
1756 </IPARAMVALUE>
1757 <IPARAMVALUE NAME="LocalOnly">
1758 <VALUE>FALSE</VALUE>
1759 </IPARAMVALUE>
1760 <IPARAMVALUE NAME="IncludeQualifiers">
1761 <VALUE>FALSE</VALUE>
1762 </IPARAMVALUE>
1763 <IPARAMVALUE NAME="IncludeClassOrigin">
1764 <VALUE>TRUE</VALUE>
1765 </IPARAMVALUE>
1766 </IMETHODCALL>
1767 </SIMPLEREQ>
1768 </MESSAGE>
1769 </CIM></SIMPLEREQ>
</MESSAGE>
</CIM>
Wenn diese Anforderung an den SFCB CIMOM gesendet wird, gibt sie eine Liste aller unterstützten Klassen zurück, für die Anbieter registriert sind. Sie speichern die Datei nun zum Beispiel unter dem Dateinamen cim_xml_test.xml.
tux@mercury:~> wbemcat cim_xml_test.xml | less HTTP/1.1 200 OK Content-Type: application/xml; charset="utf-8" Content-Length: 337565 Cache-Control: no-cache CIMOperation: MethodResponse <?xml version="1.0" encoding="utf-8" ?> <CIM CIMVERSION="2.0" DTDVERSION="2.0"> <MESSAGE ID="4711" PROTOCOLVERSION="1.0"> <SIMPLERSP> <IMETHODRESPONSE NAME="EnumerateClasses"> [..] <CLASS NAME="Linux_DHCPParamsForEntity" SUPERCLASS="CIM_Component"> <PROPERTY.REFERENCE NAME="GroupComponent" REFERENCECLASS="Linux_DHCPEntity"> </PROPERTY.REFERENCE> <PROPERTY.REFERENCE NAME="PartComponent" REFERENCECLASS="Linux_DHCPParams"> </PROPERTY.REFERENCE> </CLASS> </IRETURNVALUE> </IMETHODRESPONSE> </SIMPLERSP> </MESSAGE> </CIM>
Welche Klassen aufgelistet werden, richtet sich nach den auf Ihrem System installierten Anbietern.
Auch das zweite Skript xmltest sendet eine CIM-XML-Raw-Testdatei an den SFCB CIMOM. Danach vergleicht es die zurückgegebenen Ergebnisse mit einer zuvor gespeicherten "OK"-Ergebnisdatei. Falls noch keine passende "OK"-Datei vorhanden ist, wird diese für den späteren Gebrauch erstellt:
tux@mercury:~> xmltest cim_xml_test.xml Running test cim_xml_test.xml ... OK Saving response as cim_xml_test.OK tux@mercury:~> xmltest cim_xml_test.xml Running test cim_xml_test.xml ... Passed
Neben wbemcat und xmltest enthält das SBLIM-Projekt den erweiterten CIM-Kommandozeilenclient wbemcli. Der Client sendet CIM-Anforderungen an den SFCB-Server und zeigt die zurückgegebenen Ergebnisse an. Er ist unabhängig von der CIMOM-Bibliothek und kann mit allen WBEM-konformen Implementierungen verwendet werden.
Wenn Sie zum Beispiel alle von den auf Ihrem SFCB registrierten SBLIM-Anbietern implementierten Klassen auflisten wollen, senden Sie eine "EnumerateClasses"-Anforderung (siehe Beispiel) an den SFCB:
tux@mercury:~> wbemcli -dx ec http://localhost/root/cimv2
To server: <?xml version="1.0" encoding="utf-8" ?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL \
NAME="EnumerateClasses"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"> \
</NAMESPACE><NAMESPACE NAME="cimv2"></NAMESPACE> \
</LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="DeepInheritance"><VALUE>TRUE</VALUE> \
</IPARAMVALUE>
<IPARAMVALUE NAME="LocalOnly"><VALUE>FALSE</VALUE></IPARAMVALUE>
<IPARAMVALUE NAME="IncludeQualifiers"><VALUE>FALSE</VALUE> \
</IPARAMVALUE>
<IPARAMVALUE NAME="IncludeClassOrigin"><VALUE>TRUE</VALUE> \
</IPARAMVALUE>
</IMETHODCALL></SIMPLEREQ>
</MESSAGE></CIM>
From server: Content-Type: application/xml; charset="utf-8"
From server: Content-Length: 337565
From server: Cache-Control: no-cache
From server: CIMOperation: MethodResponse
From server: <?xml version="1.0" encoding="utf-8" ?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLERSP>
<IMETHODRESPONSE NAME="EnumerateClasses">
<IRETURNVALUE>
<CLASS NAME="CIM_ResourcePool" SUPERCLASS="CIM_LogicalElement">
<PROPERTY NAME="Generation" TYPE="uint64">
</PROPERTY>
<PROPERTY NAME="ElementName" TYPE="string">
</PROPERTY>
<PROPERTY NAME="Description" TYPE="string">
</PROPERTY>
<PROPERTY NAME="Caption" TYPE="string">
</PROPERTY>
<PROPERTY NAME="InstallDate" TYPE="datetime">
</PROPERTY>
[..]
<CLASS NAME="Linux_ReiserFileSystem" SUPERCLASS="CIM_UnixLocalFileSystem">
<PROPERTY NAME="FSReservedCapacity" TYPE="uint64">
</PROPERTY>
<PROPERTY NAME="TotalInodes" TYPE="uint64">
</PROPERTY>
<PROPERTY NAME="FreeInodes" TYPE="uint64">
</PROPERTY>
<PROPERTY NAME="ResizeIncrement" TYPE="uint64">
<VALUE>0</VALUE>
</PROPERTY>
<PROPERTY NAME="IsFixedSize" TYPE="uint16">
<VALUE>0</VALUE>
</PROPERTY>
[..]
Die Option -dx zeigt den tatsächlichen XML-Text an, der von wbemcli an den SFCB gesendet wurde, wie auch den tatsächlich zurückgegebenen XML-Text. Im oben gezeigten Beispiel wurde als erste von zahlreichen Klassen CIM_ResourcePool zurückgegeben, gefolgt von Linux_ReiserFileSystem. Ähnliche Einträge werden auch für alle anderen registrierten Klassen zurückgegeben.
Ohne die Option -dx zeigt wbemcli lediglich eine kompakte Darstellung der zurückgegebenen Daten an:
tux@mercury:~> wbemcli ec http://localhost/root/cimv2
localhost:5988/root/cimv2:CIM_ResourcePool Generation=,ElementName=, \
Description=,Caption=,InstallDate=,Name=,OperationalStatus=, \
StatusDescriptions=,Status=,HealthState=,PrimaryStatus=, \
DetailedStatus=,OperatingStatus=,CommunicationStatus=,InstanceID=, \
PoolID=,Primordial=,Capacity=,Reserved=,ResourceType=, \
OtherResourceType=,ResourceSubType=, \AllocationUnits=
localhost:5988/root/cimv2:Linux_ReiserFileSystem FSReservedCapacity=, \
TotalInodes=,FreeInodes=,ResizeIncrement=,IsFixedSize=,NumberOfFiles=, \
OtherPersistenceType=,PersistenceType=,FileSystemType=,ClusterSize=, \
MaxFileNameLength=,CodeSet=,CasePreserved=,CaseSensitive=, \
CompressionMethod=,EncryptionMethod=,ReadOnly=,AvailableSpace=, \
FileSystemSize=,BlockSize=,Root=,Name=,CreationClassName=,CSName=, \
CSCreationClassName=,Generation=,ElementName=,Description=,Caption=, \
InstanceID=,InstallDate=,OperationalStatus=,StatusDescriptions=, \
Status=,HealthState=,PrimaryStatus=,DetailedStatus=,OperatingStatus= \
,CommunicationStatus=,EnabledState=,OtherEnabledState=,RequestedState= \
,EnabledDefault=,TimeOfLastStateChange=,AvailableRequestedStates=, \
TransitioningToState=,PercentageSpaceUse=
[..]