달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'DMTF'에 해당되는 글 8

  1. 2012.06.28 openPegasus
2012. 6. 28. 10:44

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 classDecls = client.enumerateClasses(globalNamespace,CIMName(),false,false,true,true); ]


  - 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 cimNInstances =


                                      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
:
Posted by НooпeУ


Code Start Code End