本章介紹有關 SFCB 使用的更多進階主題。為了便於理解,您需要先掌握 Linux 檔案系統的基本知識,並具備 Linux 指令行的操作經驗。本章包括以下任務︰
安裝 CMPI 提供者
測試 SFCB
使用 wbemcli CIM 用戶端
若要安裝 CMPI 提供者,需要確定其共享程式庫複製到 providerDirs 組態選項指定的其中一個目錄,請參閱第 30.3.3.15 節「providerDirs」。還必須使用 sfcbstage 與 sfcbrepos 指令正確註冊提供者。
系統通常會為 SFCB 準備提供者套件,以便安裝程序能夠正確進行註冊。此外,還為 SFCB 準備了大多數 SBLIM 提供者。
類別儲存庫是 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/ 下的目錄結構。
若要新增提供者,需要︰
將提供者類別定義檔案複製到階段區域目錄 (/var/lib/sfcb/stage/mofs) 下的 ./mofs 子目錄。
將包含類別名稱或提供者類型,以及可執行程式庫檔案名稱的註冊檔案複製到 ./regs 子目錄。
階段目錄中有兩個預設 「mof」 (類別定義) 檔案︰indication.mof 與 interop.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 會對每個提供者使用一個自定的提供者註冊檔案。
![]() | 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
提供者類型 (必要)可以是 instance、association、method 或 indication 的任意組合。
<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 套件包含兩個測試程序檔︰wbemcat 和 xmltest。
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
除了 wbemcat 與 xmltest 外,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=
[..]