openPegasus DMTF2012. 6. 28. 10:44
pegasus source 파일을 /home에 풀어놓는다.
tar zxvf pegasus-2.5.2.tar.gz -C /home
cd /home/pegasus
pegasus 환경 설정파일을 기본 환경에 덥어 쓴다.
cp env_var_Linux.status env_var.status <==== 이것은 하지 말자!! 그냥 env_var.status 파일을 삭제후 touch로 생성하여 아래의 정보만 넣어라!! 생고생막는방법... ^^;
vi env_var.status
---------------------------------------------------------------------
PEGASUS_ROOT=/home/pegasus
PEGASUS_HOME=/usr/local/pegasus
OPENSSL_HOME=/usr/bin
OPENSSL_BIN=/usr/bin
PEGASUS_PLATFORM=LINUX_IX86_GNU
-----------------------------------------------------------------
LINUX_IX86_GNU는 i386계열의 pc이면 된다.
그리고 pegasus는 pam library를 쓰므로 pam-devel이 깔려 있어야한다.
아래 3개의 명령어를 이용하여 필요한 header파일을 생성시킨다. 이것을 실행하지 않고 make를 돌리면 header파일 에러난다.
make -f Makefile.Release create_ProductVersionFile
make -f Makefile.Release create_CommonProductDirectoriesInclude
make -f Makefile.Release create_ConfigProductDirectoriesInclude
그리고 Makefile 들에서 제일위에 다음을 추가해준다.
PEGASUS_ROOT=/home/pegasus
그리고나서 make를 실행하면 잘 실행된다.
error 문제해결법:
make[2]: Entering directory `/home/pegasus/src/Clients'
Makefile:33: /mak/config.mak: No such file or directory
Makefile:94: /mak/recurse.mak: No such file or directory
make[2]: *** No rule to make target `/mak/recurse.mak'. Stop.
make[2]: Leaving directory `/home/pegasus/src/Clients'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/pegasus/src'
make: *** [all] Error 2
이것은 PEGASUS_ROOT=/home/pegasus 란 환경이 없어서 생기는 에러다. Makefile의 제일 위에 이것을 추가해준다.
TERFACES -DPEGASUS_USE_DEPRECATED_INTERFACES -DPEGASUS_DEST_LIB_DIR=\"/usr/lib\" -DPLATFORM_COMPONENT_NAME=\"pegcommon\" -I/usr/bin/include -I/home/pegasus/src MessageLoader.cpp
In file included from MessageLoader.cpp:42:
/home/pegasus/src/Pegasus/Common/Constants.h:357:73: /home/pegasus/src/Pegasus/Common/ProductDirectoryStructure.h: No such file or directory
make[3]: *** [/home/pegasus/obj/Pegasus/Common/MessageLoader.o] Error 1
make[3]: Leaving directory `/home/pegasus/src/Pegasus/Common'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/home/pegasus/src/Pegasus'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/pegasus/src'
make: *** [all] Error 2
[root@cep pegasus]#
이 에러는 ProductDirectoryStructure.h 파일이 존재하지 않기때문에 생기는 에러다. 이것은
위에서 설명한것처럼
make -f Makefile.Release create_ProductVersionFile
make -f Makefile.Release create_CommonProductDirectoriesInclude
make -f Makefile.Release create_ConfigProductDirectoriesInclude
으로 생성시킬수 있다.
Makefile 에 일일이 집어넣기 힘든것 한번에 해결하기
(sh 쉘 사용)
find . -name Makefile > a
vi b
------------------------------
PEGASUS_ROOT=/home/pegasus
-----------------------------
for f in `cat a`; do cp -f ${f} ${f}.org; cat b ${f} > ${f}.edit; \cp -f ${f}.edit ${f}; done
==============================================Pegasus 2.5.1설치===============================================
환경설정을 다음처럼 한다.
----------.bashrc----------
PEGASUS_HOME=/usr/local/pegasus
PEGASUS_ROOT=/home/pegasus
PEGASUS_PLATFORM=LINUX_IX86_GNU
export PEGASUS_HOME PEGASUS_ROOT PEGASUS_PLATFORM
PATH=${PATH}:${PEGASUS_HOME}/bin
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PEGASUS_HOME}/lib
export PATH LD_LIBRARY_PATH
-------------------------------
환경설정이 들어가게 한후에
tar zxvf - pegasus-2.5.1.tar.gz -C /home/pegasus
cd /home/pegasus
make
(make install) <--- mak 하면 자동으로 $PEGASUS_HOME으로 들어가짐.
make repository <--- pegasus가 사용하는 repository 생성 (모드는 XML)
make testrepository <--- 테스트용 repository 생성
make tests
해서 에러가 없으면 잘설치 된것이다.
* env_var.status는 .bashrc에서 환경을 설정했으므로 따로 안해도 된다.
$PEGASUS_ROOT/mak : 컴파일할때 필요한 정보
$PEGASUS_ROOT/cgi : 웹 기반의 PEGASUS Client를 구현하기위한 소스코드
$PEGASUS_ROOT/rpm : rpm 생성할때 사용하는 정보들 (잘안됨)
$PEGASUS_ROOT/Schemas : Pegasus 설치할때 사용되는 CIM Schema
$PEGASUS_ROOT/src : Pegasus 소스들로 각 모듈별로 디렉토리로 구성됨. default : 2.9 (CIM29)
$PEGASUS_ROOT/test : pegasus 테스트 소스 (make tests)
$PEGASUS_ROOT/src/Client : pegasus client 응용프로그램 소스 (cimprovider, osinfo, ....)
- TestClient : Operation(Class, instance, namespace 등 관련) 테스트 --> TestClient
- cimprovider : 현재 등록된 provider 정보를 알려주는 cimprovider소스
- cimuser : pegasus 사용자 인증을관리하는 프로그램 소스
- osinfo : OS 정보를 알려주는 프로그램 소스
- ipinfo : ip, router등의 정보 알려주는 프로그램 소스
- CLITestClient : command line에서 client operation을 테스트 하는 프로그램들 소스 (GetInstance, CreateInstance, ...)
$PEGASUS_ROOT/src/Pegasus
- Client : pegasus client 의 응용프로그램(osinfo, ipinfo....)에대한 Class들(CIMClient, CIMClientRep, CIMClientInterface) 이 선언된곳
- Common: pegasus 응용프로그램에 공통적으로 쓰이는 클레스들 (Array, CIMClass, CIMInstance, Message, XmlWriter)이 선언된곳
$PEGASUS_ROOT/src/Provider : pegasus provider 소스
$PEGASUS_HOME/bin : command line에서 실행하는 pegasus 프로그램
$PEGASUS_HOME/lib: Pegasus Library module
$PEGASUS_HOME/repository : 각 name space별로 class, instance, qualifer들이 들어 있는 repository 디렉토리
Pegasus Server와 Client는 CIM Operation을 이용하여 통신을 한다.
1) Class 생성
- class 이름(CIMName)을 정한다. [ CIMName testClass= CIMNAME("PEG_TestSubClass"); ]
-class이름으로 CIMClass를 생성한다. 부모 클레스 정의 가능
[ CIMClass c1(testClass,CIMName("CIM_ManagedElement")); ]
- addProperty를 이용하여 (method) class의 property를 정한다.
[ c1.addProperty(CIMProperty(CIMName("count"), Uint32(99))); ]
-client에서 createClass method를 call한다. NameSpace를 정해주어야만 한다.
[ client.createClass(globalNamespace,c1); ]
2. Class 수정
- addProperty, removeProperty를 사용하여 Property를 수정
- client가 modifyClass method를 call
[ c2.removeProperty(c2.findProperty(CIMName("message")));
client.modifyClass(globalNamespace, c2); ]
3. Class 삭제
-deleteClass method를 call [ client.deleteClass(globalNamespace, testClass); ]
- instance가 존재하면 삭제가 안되므로 먼저 instance를 삭제한후에 deleteClass method를 call해야한다.
4. Class 획득
- getClass method call [ CIMClass c2 = client.getClass(globalNamespace, testClass, true); ]
5. Class 나열
- enumerateClasses method를 call해서 모든 class를 미리 나열해둘수 있다.
[ Array
- enumerateClassNames method를 call해서 모든 clas name을 나열 가능
[ classNames = client.enumerateClassNames( globalNamespace,CIMName("CIM_ManagedElement"), false);
Instance 관리할때는 CIMObjectPath class가 중요함. 여러 클레스사이에서 class를 구분해주는 class Name과 같은 역할로 Instance Name이 있다.
1) Instance 생성
- ClassName으로 CIMInstance를 생성 [ CIMInstance cimInstance(className); ]
-addProperty 로 Property value를 추가 [cimInstance.addProperty(CIMProperty(CIMName("last"),String("Smith"))); ]
- Instance Name (CIMObjectPath)를 정한다. [ CIMObjectPath instanceName = cimInstance.buildPath(cimClass); ]
-client가 createInstance method를 사용하여 instance를 생성한다.[ client.createInstance(globalNamespace,cimInstance); ]
2) Instance 수정
-Instance property를 수정하는 경우
testInstance.removeProperty(propertyPos);
testInstance.setPath(instanceName);
client.modifyInstance(globalNamespace,testInstance);
- setProperty method를 사용하여 property value 수정
client.setProperty(globalNamespace, instanceName,TESTPROPVALNAME,testPropVal);
- setPath method를 통해 Instance Name을 수정
testInstance.setPath(instanceName);
3) Instance삭제 [ client.deleteInstance(globalNamespace, instanceName); [
4) Instance 획득
- getInstance method를 통해 instance 획득
client.getInstance(__NAMESPACE_NAMESPACE, newInstanceName);
- getProperty 를 사용하여 property value 획득
CIMValue returnedPropVal = client.getProperty( globalNamespace, instanceName,TESTPROPVALNAME );
- getInstance를 사용하여 instance획득
client.getInstance(__NAMESPACE_NAMESPACE, newInstanceName);
5) Instance 나열
- instanceNames = client.enumerateInstanceNames(globalNamespace,classNames[i]);
- Array
client.enumerateInstances(NAMESPACE, className, deepInheritance,
localOnly, includeQualifiers, includeClassOrigin );
'DMTF' 카테고리의 다른 글
cimcli (0) | 2012.06.29 |
---|---|
openpegasus 관계 나타내는 클래스 (0) | 2012.06.29 |
openpegasus sdk make (0) | 2012.06.29 |
openpegasus sdk client (0) | 2012.06.29 |
diff & patch (0) | 2012.06.28 |