Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
sblim-cmpi-pec
provider-register.sh
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File provider-register.sh of Package sblim-cmpi-pec
#!/bin/sh # $Id: provider-register.sh,v 1.1 2007/05/16 07:03:48 tyreld Exp $ # ================================================================== # (C) Copyright IBM Corp. 2005 # # THIS FILE IS PROVIDED UNDER THE TERMS OF THE COMMON PUBLIC LICENSE # ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE # CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT. # # You can obtain a current copy of the Common Public License from # http://www.opensource.org/licenses/cpl1.0.php # # Author: Viktor Mihajlovski <mihajlov@de.ibm.com> # Contributors: # Description: Script to install class definitions (MOFs) and # registration data for a variety of supported CIMOMs # ================================================================== pegasus_repository() { for p in $PEGASUS_HOME /var/lib/Pegasus /var/lib/pegasus \ /usr/local/var/lib/pegasus /var/local/lib/pegasus /var/opt/tog-pegasus do if test -d $p/repository then echo $p/$1 return 0 fi done return 1 } pegasus_path() { for p in $PEGASUS_HOME/bin /usr/bin /usr/sbin /usr/local/bin \ /usr/local/sbin /opt/tog-pegasus/bin /opt/tog-pegasus/sbin do if test -x $p/$1 then echo $p/$1 return 0 fi done return 1 } pegasus_transform() { OUTFILE=$1 shift regfiles=$* PROVIDERMODULES=`cat $regfiles 2> /dev/null | grep -v '^[[:space:]]*#.*' | cut -d ' ' -f 4 | sort | uniq` if test x"$PROVIDERMODULES" = x then echo Failed to read registration files >&2 return 1 fi PROVIDERS=`cat $regfiles 2> /dev/null | grep -v '^[[:space:]]*#.*' | cut -d ' ' -f 3-4 | sort | uniq` # produce ProviderModules echo > $OUTFILE chatter "Processing provider modules:" $PROVIDERMODULES for pm in $PROVIDERMODULES do cat >> $OUTFILE <<EOFPM instance of PG_ProviderModule { Name = "$pm"; Location = "$pm"; Vendor = "SBLIM"; Version = "2.0.0"; InterfaceType = "CMPI"; InterfaceVersion = "2.0.0"; }; EOFPM done # produce Providers set -- $PROVIDERS while test x$1 != x do cat >> $OUTFILE <<EOFP instance of PG_Provider { Name = "$1"; ProviderModuleName = "$2"; }; EOFP shift 2 done #produce Capabilities let serial=0 for rf in $regfiles do cat $rf | grep -v '^[[:space:]]*#.*' | while read CLASSNAME NAMESPACE PROVIDERNAME PROVIDERMODULE CAPS do let serial=serial+1 numcap= for cap in $CAPS do case $cap in instance) if test x$numcap = x then numcap=2 else numcap="$numcap, 2" fi;; association) if test x$numcap = x then numcap=3 else numcap="$numcap, 3" fi;; indication) if test x$numcap = x then numcap=4 else numcap="$numcap, 4" fi;; method) if test x$numcap = x then numcap=5 else numcap="$numcap, 5" fi;; **) echo unknown provider type $cap >&2 return 1;; esac done cat >> $OUTFILE <<EOFC instance of PG_ProviderCapabilities { ProviderModuleName = "$PROVIDERMODULE"; ProviderName = "$PROVIDERNAME"; ClassName = "$CLASSNAME"; ProviderType = { $numcap }; Namespaces = {"$NAMESPACE"}; SupportedProperties = NULL; SupportedMethods = NULL; CapabilityID = "$CLASSNAME-$serial"; }; EOFC done done } pegasus_install() { if ps -C cimserver > /dev/null 2>&1 then CIMMOF=`pegasus_path cimmof` if test $? != 0 then echo "Error: cimmof not found" >&2 return 1 fi state=active else CIMMOF=`pegasus_path cimmofl` if test $? != 0 then echo "Error: cimmofl not found" >&2 return 1 fi PEGASUSREPOSITORY=`pegasus_repository` if test $? != 0 then echo "Error: pegasus repository not found" >&2 return 1 fi CIMMOF="$CIMMOF -R $PEGASUSREPOSITORY" state=inactive fi mofpath= mymofs= myregs= mofmode=1 namespace=$1 shift while test x$1 != x do if test $1 = ":" then mofmode=0 shift continue fi if test $mofmode = 1 then if test x$mofpath = x then mofpath=`dirname $1` fi mymofs="$mymofs $1" else myregs="$myregs $1" fi shift done for _TEMPDIR in /var/tmp /tmp do if test -w $_TEMPDIR then _REGFILENAME=$_TEMPDIR/$$.mof break fi done trap "rm -f $_REGFILENAME" EXIT if pegasus_transform $_REGFILENAME $myregs then chatter Registering providers with $state cimserver $CIMMOF -uc -I $mofpath -n $namespace $mymofs && $CIMMOF -uc -n root/PG_Interop $_REGFILENAME else echo "Failed to build pegasus registration MOF." >&2 return 1 fi } pegasus_uninstall() { mymofs= myregs= mofmode=1 namespace=$1 shift while test x$1 != x do if test $1 = ":" then mofmode=0 shift continue fi if test $mofmode = 1 then mymofs="$mymofs $1" else myregs="$myregs $1" fi shift done if ps -C cimserver > /dev/null 2>&1 then PROVIDERMODULES=`cat $myregs 2> /dev/null | grep -v '^[[:space:]]*#.*' | cut -d ' ' -f 4 | sort | uniq` if test x"$PROVIDERMODULES" = x then echo Failed to read registration files >&2 return 1 fi CIMPROVIDER=`pegasus_path cimprovider` if test $? != 0 then echo "Error: cimprovider not found" >&2 return 1 fi for pm in $PROVIDERMODULES do chatter "Remove provider module" $pm $CIMPROVIDER -d -m $pm > /dev/null && $CIMPROVIDER -r -m $pm > /dev/null done WBEMEXEC=`pegasus_path wbemexec` if test $? != 0 then echo "Error: wbemexec not found" >&2 return 1 fi CLASSES=`cat $myregs 2> /dev/null | grep -v '^[[:space:]]*#.*' | cut -d ' ' -f 1 | grep -v '^CIM_'` for _TEMPDIR in /var/tmp /tmp do if test -w $_TEMPDIR then _DELETE_NAME=$TEMPDIR/delete-class.mof break fi done trap "rm -f $_DELETE_NAME" EXIT for cls in $CLASSES do chatter Delete CIM Class $cls cat > $_DELETE_NAME <<EOFA <?xml version="1.0" encoding="utf-8" ?> <CIM CIMVERSION="2.0" DTDVERSION="2.0"> <MESSAGE ID="4711" PROTOCOLVERSION="1.0"> <SIMPLEREQ> <IMETHODCALL NAME="DeleteClass"> <LOCALNAMESPACEPATH> EOFA for ns in `echo $namespace | sed 's?/? ?'g` do cat >> $_DELETE_NAME <<EOFX <NAMESPACE NAME="$ns"></NAMESPACE> EOFX done cat >> $_DELETE_NAME <<EOFE </LOCALNAMESPACEPATH> <IPARAMVALUE NAME="ClassName"> <CLASSNAME NAME="$cls"/> </IPARAMVALUE> </IMETHODCALL> </SIMPLEREQ> </MESSAGE> </CIM> EOFE $WBEMEXEC > /dev/null $_DELETE_NAME done else echo "Sorry, cimserver must be running to deregister the providers." >&2 return 1 fi } sfcb_transform() { OUTFILE=$1 shift regfiles=$* #produce sfcb registraion for rf in $regfiles do cat $rf | grep -v '^[[:space:]]*#.*' | while read CLASSNAME NAMESPACE PROVIDERNAME PROVIDERMODULE CAPS do chatter "Registering class" $CLASSNAME cat >> $OUTFILE <<EOFC [$CLASSNAME] provider: $PROVIDERNAME location: $PROVIDERMODULE type: $CAPS namespace: $NAMESPACE # EOFC done done } sfcb_rebuild() { if ps -C sfcbd > /dev/null 2>&1 then # sfcb is running -- need to restart for INITSCRIPT in /etc/init.d/sfcb /usr/local/etc/init.d/sfcb none do if test -x $INITSCRIPT then break; fi done chatter "Shutting down sfcb." if test $INITSCRIPT = none then killall sfcbd else $INITSCRIPT stop fi t=0 while ps -C sfcbd > /dev/null 2>&1 do sleep 1 t=`expr $t + 1` if test $t -gt 10 then echo "Timed out waiting for sfcb shutdown..." >&2 echo "Please stop sfcb manually and rebuild the repository using sfcbrepos." >&2 return 1 fi done chatter "Rebuilding repository." sfcbrepos -f $endian if test $? != 0 then echo "Repository rebuild failed." >&2 return 1 fi if test $INITSCRIPT = none then echo "No init script found - you need to start sfcbd manually." >&2 return 1 else chatter "Restarting sfcb." $INITSCRIPT start fi else # Not running - rebuild repository chatter "Rebuilding repository." sfcbrepos -f $endian fi } sfcb_install() { mymofs= myregs= mofmode=1 namespace=$1 shift while test x$1 != x do if test $1 = ":" then mofmode=0 shift baseregname=`basename $1 .registration` continue fi if test $mofmode = 1 then mymofs="$mymofs $1" else myregs="$myregs $1" fi shift done for _TEMPDIR in /var/tmp /tmp do if test -w $_TEMPDIR then _REGFILENAME=$_TEMPDIR/$baseregname.reg break fi done trap "rm -f $_REGFILENAME" EXIT if sfcb_transform $_REGFILENAME $myregs then chatter "Staging provider registration." sfcbstage -n $namespace -r $_REGFILENAME $mymofs if test $? != 0 then echo "Failed to stage provider registration." >&2 return 1 fi sfcb_rebuild else echo "Failed to build sfcb registration file." >&2 return 1 fi } sfcb_uninstall() { mymofs= namespace=$1 shift while test x$1 != x do if test $1 = ":" then shift baseregname=`basename $1 .registration` break fi mymofs="$mymofs `basename $1`" shift done # "Unstage" MOFs and the registration file chatter "Unstaging provider registrations." sfcbunstage -n $namespace -r $baseregname.reg $mymofs # Rebuild repository sfcb_rebuild } openwbem_transform() { OUTFILE=$1 shift moffiles=$* if rm -f $OUTFILE then for _f in $moffiles do sed "s/Provider *( *\"cmpi:/Provider(\"cmpi::/g" < $_f >> $OUTFILE done fi } openwbem_repository() { for p in /var/lib/openwbem /usr/local/var/openwbem do if test -f $p/schema.dat then echo $p return 0 fi done return 1 } openwbem_install() { CIMMOF=`which owmofc 2> /dev/null` if test $? != 0 then echo "Error: cimmof not found" >&2 return 1 fi if ps -C owcimomd > /dev/null 2>&1 then state=active else CIMMOF="$CIMMOF -d `openwbem_repository`" if test $? != 0 then echo "Error: OpenWBEM repository not found" >&2 return 1 fi state=inactive fi for _TEMPDIR in /var/tmp /tmp do if test -w $_TEMPDIR then _REGFILENAME=$_TEMPDIR/$$.mof break fi done trap "rm -f $_REGFILENAME" EXIT if openwbem_transform $_REGFILENAME $* then chatter Registering providers with $state owcimomd $CIMMOF $_REGFILENAME > /dev/null else echo "Failed to build OpenWBEM registration MOF." >&2 return 1 fi } openwbem_uninstall() { CIMMOF=`which owmofc 2> /dev/null` if test $? != 0 then echo "Error: cimmof not found" >&2 return 1 fi if ps -C owcimomd > /dev/null 2>&1 then state=active else CIMMOF="$CIMMOF -d `openwbem_repository`" if test $? != 0 then echo "Error: OpenWBEM repository not found" >&2 return 1 fi state=inactive fi for _TEMPDIR in /var/tmp /tmp do if test -w $_TEMPDIR then _REGFILENAME=$_TEMPDIR/$$.mof break fi done trap "rm -f $_REGFILENAME" EXIT if openwbem_transform $_REGFILENAME $* then chatter Deregistering providers with $state owcimomd $CIMMOF -r $_REGFILENAME > /dev/null else echo "Failed to build OpenWBEM registration MOF." >&2 return 1 fi } cim_server() { for exname in sfcbd cimserver owcimomd do if pegasus_path $exname > /dev/null then case $exname in sfcbd) echo sfcb; return 0;; cimserver) echo pegasus; return 0;; owcimomd) echo openwbem; return 0;; esac break; fi done echo unknown return 1 } usage() { echo "usage: $0 [-h] [-v] [-d] [-t <cimserver>] [-n <namespace>] -r regfile ... -m mof ..." } chatter() { if test x$verbose != x then echo $* fi } gb_getopt() { rmode=0 mmode=0 options= moffiles= registrations= while [ -n "$1" ] do case $1 in -r) mmode=0; rmode=1; shift;; -m) mmode=1; rmode=0; shift;; -*) mmode=0; rmode=0; options="$options $1"; shift;; **) if [ $mmode = 1 ] then moffiles="$moffiles $1" elif [ $rmode = 1 ] then registrations="$registrations -r $1" else options="$options $1"; fi; shift;; esac done echo $options $registrations $moffiles } prepargs=`gb_getopt $*` args=`getopt dvhX:t:r:n: $prepargs` rc=$? if [ $rc = 127 ] then echo "warning: getopt not found ...continue without syntax check" args=$prepargs elif [ $rc != 0 ] then usage $0 exit 1 fi namespace="root/cimv2" set -- $args while [ -n "$1" ] do case $1 in -h) help=1; shift; break;; -v) verbose=1; shift;; -X) endian="-X $2"; shift 2;; -d) deregister=1; shift;; -t) cimserver=$2; shift 2;; -n) namespace=$2; shift 2;; -r) regs="$regs $2"; shift 2;; --) shift; break;; **) break;; esac done mofs=$* if [ "$help" = "1" ] then usage echo -e "\t-h display help message" echo -e "\t-v verbose mode" echo -e "\t-d deregister provider and uninstall schema" echo -e "\t-t specify cimserver type (pegasus|sfcb|openwbem|sniacimom)" echo -e "\t-r specify registration files" echo -e "\t-m specify schema mof files" echo -e "\t-X create repository for alternate platform (sfcb only at the moment)." echo -e "\t-n target namespace definition (default: root/cimv2)." echo echo Use this command to install schema mofs and register providers. echo CIM Server Type is required as well as at least one registration file and one mof. exit 0 fi if test x"$mofs" = x || test x"$regs" = x then usage $0 exit 1 fi if test x$cimserver = x then cimserver=`cim_server` if test $? = 0 then chatter "Autoselected CIM server type:" $cimserver else echo "CIM server type could not be determined, specify with -t." >&2 exit 1 fi fi if test x$deregister = x then case $cimserver in pegasus) pegasus_install $namespace $mofs ":" $regs;; sfcb) sfcb_install $namespace $mofs ":" $regs;; openwbem) openwbem_install $mofs ;; sniacimom) echo sniacimom not yet supported && exit 1 ;; **) echo "Invalid CIM Server Type " $cimserver && exit 1;; esac else case $cimserver in pegasus) pegasus_uninstall $namespace $mofs ":" $regs;; sfcb) sfcb_uninstall $namespace $mofs ":" $regs;; openwbem) openwbem_uninstall $mofs ;; sniacimom) echo sniacimom not yet supported && exit 1 ;; **) echo "Invalid CIM Server Type " $cimserver && exit 1;; esac fi
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor