高级 SFCB 任务

本章涵盖了与 SFCB 使用相关的更多高级主题。要了解这些主题,您需要有 Linux 文件系统的基础知识,并具有使用 Linux 命令行的经验。本章包括以下任务:

安装 CMPI 提供程序

要安装 CMPI 提供程序,您必须确保其共享库已复制到 providerDirs 配置选项所指定的目录之一,参见第 30.3.3.15 节 “providerDirs”。提供程序还必须用 sfcbstagesfcbrepos 命令正确注册。

提供程序包通常是为 SFCB 准备的,为此其安装过程负责进行正确的注册。多数 SBLIM 提供程序是为 SFCB 准备的。

类安装源

类安装源就是 SFCB 储存 CIM 类信息的位置。它通常由名称空间组件组成的目录树组成。典型的 CIM 名称空间如 root/cimv2root/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.mofinterop.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 对每个提供程序使用自定义提供程序注册文件。

[Note]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

提供程序的类型(必需)它可以是以下的任意组合:instanceassociationmethodindication

<组名>

可以将多个提供程序组合起来,在单一进程下运行,以进一步最小化运行时资源的占用。所有注册在同一 <组名> 下的提供程序都将在同一进程下执行。默认情况下每个提供程序作为单独的进程运行。

unload

指定提供程序的卸载策略。目前唯一支持的选项是 never,即指定不监视提供程序的空闲次数,也从不卸载。默认情况下,每个提供程序只要空闲次数超过配置文件中指定的值就卸载。

namespace

可执行本提供程序的名称空间的列表。这是必需的,尽管对于多数提供程序来说它就是 root/cimv2

所有类定义和提供程序注册文件都储存在分阶段区域后,就需要用命令 sfcbrepos -f 重构建 SFCB 类安装源。

您可以用这种方式添加、更改或删除类。重构建类安装源后,用命令 rcsfcb restart 重启动 SFCB。

或者,SFCB 包包含一个实用程序,它会将提供程序类 mof 文件和注册文件复制到分阶段区域中正确的位置。

sfcbstage -r [provider.reg] [class1.mof] [class2.mof] ...

运行该命令后,您还需要重构建类安装源并重启动 SFCB 服务。

测试 SFCB

SFCB 包包括两个测试脚本:wbemcatxmltest

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

命令行 CIM 客户端:wbemcli

除了 wbemcatxmltest 外,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=
    [..]