進階 SFCB 任務

本章介紹有關 SFCB 使用的更多進階主題。為了便於理解,您需要先掌握 Linux 檔案系統的基本知識,並具備 Linux 指令行的操作經驗。本章包括以下任務︰

安裝 CMPI 提供者

若要安裝 CMPI 提供者,需要確定其共享程式庫複製到 providerDirs 組態選項指定的其中一個目錄,請參閱第 30.3.3.15 節「providerDirs」。還必須使用 sfcbstagesfcbrepos 指令正確註冊提供者。

系統通常會為 SFCB 準備提供者套件,以便安裝程序能夠正確進行註冊。此外,還為 SFCB 準備了大多數 SBLIM 提供者。

類別儲存庫

類別儲存庫是 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/ 下的目錄結構。

若要新增提供者,需要︰

  • 將提供者類別定義檔案複製到階段區域目錄 (/var/lib/sfcb/stage/mofs) 下的 ./mofs 子目錄。

  • 將包含類別名稱或提供者類型,以及可執行程式庫檔案名稱的註冊檔案複製到 ./regs 子目錄。

階段目錄中有兩個預設 mof (類別定義) 檔案︰indication.mofinterop.mof。執行 sfcbrepos 指令後,根階段目錄 /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> ...

其中,

<class-name>

CIM 類別名稱 (必要)

<provider-name>

CMPI 提供者名稱 (必要)

<location-name>

提供者程式庫名稱 (必要)

type

提供者類型 (必要)可以是 instanceassociationmethodindication 的任意組合。

<group-name>

可以將多個提供者組合在一起,在單一程序下執行,以便進一步減少對執行時期資源的佔用。在相同 <group-name> 下註冊的所有提供者會在同一程序下執行。預設情況下,每個提供者會做為獨立的程序執行。

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 主機 (預設為 localhost)。然後顯示傳回的結果。以下檔案包含標準 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。該用戶端用於向 SFCB 伺服器傳送 CIM 請求,並顯示傳回的結果。它不依賴 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=
    [..]