本章涵盖了与 SFCB 使用相关的更多高级主题。要了解这些主题,您需要有 Linux 文件系统的基础知识,并具有使用 Linux 命令行的经验。本章包括以下任务:
安装 CMPI 提供程序
测试 SFCB
使用 wbemcli CIM 客户端
要安装 CMPI 提供程序,您必须确保其共享库已复制到 providerDirs 配置选项所指定的目录之一,参见第 30.3.3.15 节 “providerDirs”。提供程序还必须用 sfcbstage 和 sfcbrepos 命令正确注册。
提供程序包通常是为 SFCB 准备的,为此其安装过程负责进行正确的注册。多数 SBLIM 提供程序是为 SFCB 准备的。
类安装源就是 SFCB 储存 CIM 类信息的位置。它通常由名称空间组件组成的目录树组成。典型的 CIM 名称空间如 root/cimv2 或 root/interop,它们分别转换为文件系统上的类安装源目录路径
/var/lib/sfcb/registration/repository/root/cimv2
和
/var/lib/sfcb/registration/repository/root/interop
每个名称空间目录都包含文件 classSchemas。该文件中有该名称空间下注册的所有 CIM 类的已编译二进制表示。它还包含有关其 CIM 超类的必要信息。
此外,每个名称空间目录都可能包含文件 qualifiers,其中包含了该名称空间的所有限定符。sfcbd 重启动时,类提供程序会扫描目录 /var/lib/sfcb/registration/repository/ 及其全部子目录,以确定注册的名称空间。然后将解码 classSchemas 文件,为每个名称空间构建类的层次结构。
SFCB 不能在线处理 CIM 类。您需要脱机添加、更改或删除类,用 rcsfcb restart 重启动 SFCB 服务来注册这些更改。
为储存提供程序类和注册信息,SFCB 使用名为分阶段区域的位置。在 SUSE® Linux Enterprise Server 系统上,它就是 /var/lib/sfcb/stage/ 下的目录结构。
为添加新的提供程序,您必须:
将提供程序类定义文件复制到分阶段区域目录的子目录 ./mofs (/var/lib/sfcb/stage/mofs)。
将包含类名、提供程序类型和可执行库文件名的注册文件复制到 ./regs 子目录。
分阶段目录中有两个默认的 “mof”(类定义)文件:indication.mof 和 interop.mof。运行 sfcbrepos 命令后,root 阶段目录 /var/lib/sfcb/stage/mofs 下的 MOF 文件将复制到每个名称空间。interop.mof 将只编译到 interop 名称空间。
目录布局看上去如下所示:
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 对每个提供程序使用自定义提供程序注册文件。
![]() | SBLIM 提供程序注册文件 |
|---|---|
SBLIM 网站上的所有 SBLIM 提供程序都已包括用于生成 SFCB 的 .reg 文件的注册文件。 | |
SFCB 注册文件的格式是:
[<class-name>] provider: <provide-name> location: <library-name> type: [instance] [association] [method] [indication] group: <group-name> unload: never namespace: <namespace-for-class> ...
其中:
<类名>
CIM 类名(必需)
<提供程序名称>
CMPI 提供程序名称(必需)
<位置名称>
提供程序库的名称(必需)
type
提供程序的类型(必需)它可以是以下的任意组合:instance、association、method 或 indication。
<组名>
可以将多个提供程序组合起来,在单一进程下运行,以进一步最小化运行时资源的占用。所有注册在同一 <组名> 下的提供程序都将在同一进程下执行。默认情况下每个提供程序作为单独的进程运行。
unload
指定提供程序的卸载策略。目前唯一支持的选项是 never,即指定不监视提供程序的空闲次数,也从不卸载。默认情况下,每个提供程序只要空闲次数超过配置文件中指定的值就卸载。
namespace
可执行本提供程序的名称空间的列表。这是必需的,尽管对于多数提供程序来说它就是 root/cimv2。
所有类定义和提供程序注册文件都储存在分阶段区域后,就需要用命令 sfcbrepos -f 重构建 SFCB 类安装源。
您可以用这种方式添加、更改或删除类。重构建类安装源后,用命令 rcsfcb restart 重启动 SFCB。
或者,SFCB 包包含一个实用程序,它会将提供程序类 mof 文件和注册文件复制到分阶段区域中正确的位置。
sfcbstage -r [provider.reg] [class1.mof] [class2.mof] ...
运行该命令后,您还需要重构建类安装源并重启动 SFCB 服务。
SFCB 包包括两个测试脚本:wbemcat 和 xmltest。
wbemcat 通过 HTTP 协议将原始 CIM-XML 数据发送到端口 5988 上正在侦听的指定 SFCB 主机(默认为本地主机)。然后它会显示返回的结果以下文件包含标准 EnumerateClasses 请求的 CIM-XML 表示:
<?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>
将该请求发送到 SFCB CIMOM 后,会返回具有已注册提供程序的所有支持类的列表。假定您将文件保存为 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>
列出的类会随您在系统上安装的提供程序的不同而不同。
第二个脚本 xmltest 也用于将原始 CIM-XML 测试文件发送到 SFCB CIMOM。它会随即比较返回的结果和以前保存的“OK”结果文件。如果还不存在对应的“OK”文件,将创建它以备后用:
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
除了 wbemcat 和 xmltest 外,SBLIM 项目包含更高级的命令行 CIM 客户端 wbemcli。该客户端用于将 CIM 请求发送到 SFCB 服务器,并显示返回的结果。它独立于 CIMOM 库,可与所有 WBEM 兼容实现一起使用。
例如,如果您需要列出注册到您的 SFCB 的 SBLIM 提供程序所实现的所有类,将“EnumerateClasses” (ec) 请求发送到 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>
[..]
-dx 选项向您显示 wbemcli 发送到 SFCB 的实际 XML,以及收到的实际 XML。在以上示例中,众多返回类中的第一个就是 CIM_ResourcePool,后面是 Linux_ReiserFileSystem。 类似的条目会对所有其他注册的类显示。
如果您省略 -dx 选项,wbemcli 会显示返回数据的简化表示:
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=
[..]