jbulpin@0: #!/bin/sh jbulpin@0: # $Id: provider-register.sh,v 1.7 2006/01/04 06:49:46 bestor Exp $ jbulpin@0: # ================================================================== jbulpin@0: # (C) Copyright IBM Corp. 2006 jbulpin@0: # jbulpin@0: # THIS FILE IS PROVIDED UNDER THE TERMS OF THE COMMON PUBLIC LICENSE jbulpin@0: # ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE jbulpin@0: # CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT. jbulpin@0: # jbulpin@0: # You can obtain a current copy of the Common Public License from jbulpin@0: # http://www.opensource.org/licenses/cpl1.0.php jbulpin@0: # jbulpin@0: # Author: Viktor Mihajlovski jbulpin@0: # Contributors: jbulpin@0: # Description: Script to install class definitions (MOFs) and jbulpin@0: # registration data for a variety of supported CIMOMs jbulpin@0: # ================================================================== jbulpin@0: jbulpin@0: pegasus_repository() jbulpin@0: { jbulpin@0: for p in $PEGASUS_HOME /var/lib/Pegasus /var/lib/pegasus /usr/local/var/lib/pegasus \ jbulpin@0: /var/local/lib/pegasus /var/opt/tog-pegasus jbulpin@0: do jbulpin@0: if test -d $p/repository jbulpin@0: then jbulpin@0: echo $p/$1 jbulpin@0: return 0 jbulpin@0: fi jbulpin@0: done jbulpin@0: return 1 jbulpin@0: } jbulpin@0: jbulpin@0: pegasus_path() jbulpin@0: { jbulpin@0: for p in $PEGASUS_HOME/bin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin \ jbulpin@0: /opt/tog-pegasus/bin /opt/tog-pegasus/sbin jbulpin@0: do jbulpin@0: if test -x $p/$1 jbulpin@0: then jbulpin@0: echo $p/$1 jbulpin@0: return 0 jbulpin@0: fi jbulpin@0: done jbulpin@0: return 1 jbulpin@0: } jbulpin@0: jbulpin@0: pegasus_transform() jbulpin@0: { jbulpin@0: OUTFILE=$1 jbulpin@0: shift jbulpin@0: regfiles=$* jbulpin@0: PROVIDERMODULES=`cat $regfiles 2> /dev/null | grep -v '^[[:space:]]*#.*' | cut -d ' ' -f 4 | sort | uniq` jbulpin@0: if test x"$PROVIDERMODULES" = x jbulpin@0: then jbulpin@0: echo Failed to read registration files >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: PROVIDERS=`cat $regfiles 2> /dev/null | grep -v '^[[:space:]]*#.*' | cut -d ' ' -f 3-4 | sort | uniq` jbulpin@0: jbulpin@0: # produce ProviderModules jbulpin@0: echo > $OUTFILE jbulpin@0: chatter "Processing provider modules:" $PROVIDERMODULES jbulpin@0: for pm in $PROVIDERMODULES jbulpin@0: do jbulpin@0: cat >> $OUTFILE <> $OUTFILE <&2 jbulpin@0: return 1;; jbulpin@0: esac jbulpin@0: done jbulpin@0: cat >> $OUTFILE < /dev/null 2>&1 jbulpin@0: then jbulpin@0: CIMMOF=`pegasus_path cimmof` jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: cimmof not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: state=active jbulpin@0: else jbulpin@0: CIMMOF=`pegasus_path cimmofl` jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: cimmofl not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: PEGASUSREPOSITORY=`pegasus_repository` jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: pegasus repository not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: CIMMOF="$CIMMOF -R $PEGASUSREPOSITORY" jbulpin@0: state=inactive jbulpin@0: fi jbulpin@0: jbulpin@0: mofpath= jbulpin@0: mymofs= jbulpin@0: mregs= jbulpin@0: mofmode=1 jbulpin@0: while test x$1 != x jbulpin@0: do jbulpin@0: if test $1 = ":" jbulpin@0: then jbulpin@0: mofmode=0 jbulpin@0: shift jbulpin@0: continue jbulpin@0: fi jbulpin@0: if test $mofmode = 1 jbulpin@0: then jbulpin@0: if test x$mofpath = x jbulpin@0: then jbulpin@0: mofpath=`dirname $1` jbulpin@0: fi jbulpin@0: mymofs="$mymofs $1" jbulpin@0: else jbulpin@0: myregs="$myregs $1" jbulpin@0: fi jbulpin@0: shift jbulpin@0: done jbulpin@0: jbulpin@0: for _TEMPDIR in /var/tmp /tmp jbulpin@0: do jbulpin@0: if test -w $_TEMPDIR jbulpin@0: then jbulpin@0: _REGFILENAME=$_TEMPDIR/$$.mof jbulpin@0: break jbulpin@0: fi jbulpin@0: done jbulpin@0: jbulpin@0: jbulpin@0: trap "rm -f $_REGFILENAME" EXIT jbulpin@0: jbulpin@0: if pegasus_transform $_REGFILENAME $myregs jbulpin@0: then jbulpin@0: chatter Registering providers with $state cimserver jbulpin@0: $CIMMOF -uc -I $mofpath -n root/cimv2 $mymofs && jbulpin@0: $CIMMOF -uc -n root/PG_Interop $_REGFILENAME jbulpin@0: else jbulpin@0: echo "Failed to build pegasus registration MOF." >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: } jbulpin@0: jbulpin@0: pegasus_uninstall() jbulpin@0: { jbulpin@0: mymofs= jbulpin@0: mregs= jbulpin@0: mofmode=1 jbulpin@0: while test x$1 != x jbulpin@0: do jbulpin@0: if test $1 = ":" jbulpin@0: then jbulpin@0: mofmode=0 jbulpin@0: shift jbulpin@0: continue jbulpin@0: fi jbulpin@0: if test $mofmode = 1 jbulpin@0: then jbulpin@0: mymofs="$mymofs $1" jbulpin@0: else jbulpin@0: myregs="$myregs $1" jbulpin@0: fi jbulpin@0: shift jbulpin@0: done jbulpin@0: jbulpin@0: if ps -C cimserver > /dev/null 2>&1 jbulpin@0: then jbulpin@0: PROVIDERMODULES=`cat $myregs 2> /dev/null | grep -v '^[[:space:]]*#.*' | cut -d ' ' -f 4 | sort | uniq` jbulpin@0: if test x"$PROVIDERMODULES" = x jbulpin@0: then jbulpin@0: echo Failed to read registration files >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: CIMPROVIDER=`pegasus_path cimprovider` jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: cimprovider not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: for pm in $PROVIDERMODULES jbulpin@0: do jbulpin@0: chatter "Remove provider module" $pm jbulpin@0: $CIMPROVIDER -d -m $pm > /dev/null && jbulpin@0: $CIMPROVIDER -r -m $pm > /dev/null jbulpin@0: done jbulpin@0: WBEMEXEC=`pegasus_path wbemexec` jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: wbemexec not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: CLASSES=`cat $myregs 2> /dev/null | grep -v '^[[:space:]]*#.*' | cut -d ' ' -f 1 | grep -v '^CIM_'` jbulpin@0: for cls in $CLASSES jbulpin@0: do jbulpin@0: chatter Delete CIM Class $cls jbulpin@0: $WBEMEXEC > /dev/null < jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: jbulpin@0: EOFWX jbulpin@0: done jbulpin@0: else jbulpin@0: echo "Sorry, cimserver must be running to deregister the providers." >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: } jbulpin@0: jbulpin@0: sfcb_transform() jbulpin@0: { jbulpin@0: OUTFILE=$1 jbulpin@0: shift jbulpin@0: regfiles=$* jbulpin@0: jbulpin@0: #produce sfcb registraion jbulpin@0: for rf in $regfiles jbulpin@0: do jbulpin@0: cat $rf | grep -v '^[[:space:]]*#.*' | while read CLASSNAME NAMESPACE PROVIDERNAME PROVIDERMODULE CAPS jbulpin@0: do jbulpin@0: chatter "Registering class" $CLASSNAME jbulpin@0: cat >> $OUTFILE < /dev/null 2>&1 jbulpin@0: then jbulpin@0: # sfcb is running -- need to restart jbulpin@0: for INITSCRIPT in /etc/init.d/sfcb /usr/local/etc/init.d/sfcb none jbulpin@0: do jbulpin@0: if test -x $INITSCRIPT jbulpin@0: then jbulpin@0: break; jbulpin@0: fi jbulpin@0: done jbulpin@0: chatter "Shutting down sfcb." jbulpin@0: if test $INITSCRIPT = none jbulpin@0: then jbulpin@0: killall sfcbd jbulpin@0: else jbulpin@0: $INITSCRIPT stop jbulpin@0: fi jbulpin@0: t=0 jbulpin@0: while ps -C sfcbd > /dev/null 2>&1 jbulpin@0: do jbulpin@0: sleep 1 jbulpin@0: t=`expr $t + 1` jbulpin@0: if test $t -gt 10 jbulpin@0: then jbulpin@0: echo "Timed out waiting for sfcb shutdown..." >&2 jbulpin@0: echo "Please stop sfcb manually and rebuild the repository using sfcbrepos." >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: done jbulpin@0: chatter "Rebuilding repository." jbulpin@0: sfcbrepos -f jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Repository rebuild failed." >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: jbulpin@0: if test $INITSCRIPT = none jbulpin@0: then jbulpin@0: echo "No init script found - you need to start sfcbd manually." >&2 jbulpin@0: return 1 jbulpin@0: else jbulpin@0: chatter "Restarting sfcb." jbulpin@0: $INITSCRIPT start jbulpin@0: fi jbulpin@0: else jbulpin@0: # Not running - rebuild repository jbulpin@0: chatter "Rebuilding repository." jbulpin@0: sfcbrepos -f jbulpin@0: fi jbulpin@0: } jbulpin@0: jbulpin@0: sfcb_install() jbulpin@0: { jbulpin@0: mymofs= jbulpin@0: mregs= jbulpin@0: mofmode=1 jbulpin@0: while test x$1 != x jbulpin@0: do jbulpin@0: if test $1 = ":" jbulpin@0: then jbulpin@0: mofmode=0 jbulpin@0: shift jbulpin@0: baseregname=`basename $1 .registration` jbulpin@0: continue jbulpin@0: fi jbulpin@0: if test $mofmode = 1 jbulpin@0: then jbulpin@0: mymofs="$mymofs $1" jbulpin@0: else jbulpin@0: myregs="$myregs $1" jbulpin@0: fi jbulpin@0: shift jbulpin@0: done jbulpin@0: jbulpin@0: for _TEMPDIR in /var/tmp /tmp jbulpin@0: do jbulpin@0: if test -w $_TEMPDIR jbulpin@0: then jbulpin@0: _REGFILENAME=$_TEMPDIR/$baseregname.reg jbulpin@0: break jbulpin@0: fi jbulpin@0: done jbulpin@0: jbulpin@0: trap "rm -f $_REGFILENAME" EXIT jbulpin@0: jbulpin@0: if sfcb_transform $_REGFILENAME $myregs jbulpin@0: then jbulpin@0: chatter "Staging provider registration." jbulpin@0: sfcbstage -r $_REGFILENAME $mymofs jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Failed to stage provider registration." >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: sfcb_rebuild jbulpin@0: else jbulpin@0: echo "Failed to build sfcb registration file." >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: } jbulpin@0: jbulpin@0: sfcb_uninstall() jbulpin@0: { jbulpin@0: mymofs= jbulpin@0: while test x$1 != x jbulpin@0: do jbulpin@0: if test $1 = ":" jbulpin@0: then jbulpin@0: shift jbulpin@0: baseregname=`basename $1 .registration` jbulpin@0: break jbulpin@0: fi jbulpin@0: mymofs="$mymofs `basename $1`" jbulpin@0: shift jbulpin@0: done jbulpin@0: jbulpin@0: # "Unstage" MOFs and the registration file jbulpin@0: chatter "Unstaging provider registrations." jbulpin@0: sfcbunstage -r $baseregname.reg $mymofs jbulpin@0: jbulpin@0: # Rebuild repository jbulpin@0: sfcb_rebuild jbulpin@0: } jbulpin@0: jbulpin@0: openwbem_transform() jbulpin@0: { jbulpin@0: OUTFILE=$1 jbulpin@0: shift jbulpin@0: moffiles=$* jbulpin@0: jbulpin@0: if rm -f $OUTFILE jbulpin@0: then jbulpin@0: for _f in $moffiles jbulpin@0: do jbulpin@0: sed "s/Provider *( *\"cmpi:/Provider(\"cmpi::/g" < $_f >> $OUTFILE jbulpin@0: done jbulpin@0: fi jbulpin@0: } jbulpin@0: jbulpin@0: openwbem_repository() jbulpin@0: { jbulpin@0: for p in /var/lib/openwbem /usr/local/var/openwbem jbulpin@0: do jbulpin@0: if test -f $p/schema.dat jbulpin@0: then jbulpin@0: echo $p jbulpin@0: return 0 jbulpin@0: fi jbulpin@0: done jbulpin@0: return 1 jbulpin@0: } jbulpin@0: jbulpin@0: openwbem_install() jbulpin@0: { jbulpin@0: CIMMOF=`which owmofc 2> /dev/null` jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: cimmof not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: jbulpin@0: if ps -C owcimomd > /dev/null 2>&1 jbulpin@0: then jbulpin@0: state=active jbulpin@0: else jbulpin@0: CIMMOF="$CIMMOF -d `openwbem_repository`" jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: OpenWBEM repository not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: state=inactive jbulpin@0: fi jbulpin@0: jfehlig@1: if test -d /usr/share/mof/cim-current jfehlig@1: then jfehlig@1: CIMMOF="$CIMMOF -s /usr/share/mof/cim-current" jfehlig@1: fi jfehlig@1: jbulpin@0: for _TEMPDIR in /var/tmp /tmp jbulpin@0: do jbulpin@0: if test -w $_TEMPDIR jbulpin@0: then jbulpin@0: _REGFILENAME=$_TEMPDIR/$$.mof jbulpin@0: break jbulpin@0: fi jbulpin@0: done jbulpin@0: jbulpin@0: trap "rm -f $_REGFILENAME" EXIT jbulpin@0: jbulpin@0: if openwbem_transform $_REGFILENAME $* jbulpin@0: then jbulpin@0: chatter Registering providers with $state owcimomd jbulpin@0: $CIMMOF $_REGFILENAME > /dev/null jbulpin@0: else jbulpin@0: echo "Failed to build OpenWBEM registration MOF." >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: } jbulpin@0: jbulpin@0: openwbem_uninstall() jbulpin@0: { jbulpin@0: CIMMOF=`which owmofc 2> /dev/null` jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: cimmof not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: jbulpin@0: if ps -C owcimomd > /dev/null 2>&1 jbulpin@0: then jbulpin@0: state=active jbulpin@0: else jbulpin@0: CIMMOF="$CIMMOF -d `openwbem_repository`" jbulpin@0: if test $? != 0 jbulpin@0: then jbulpin@0: echo "Error: OpenWBEM repository not found" >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: state=inactive jbulpin@0: fi jbulpin@0: jbulpin@0: for _TEMPDIR in /var/tmp /tmp jbulpin@0: do jbulpin@0: if test -w $_TEMPDIR jbulpin@0: then jbulpin@0: _REGFILENAME=$_TEMPDIR/$$.mof jbulpin@0: break jbulpin@0: fi jbulpin@0: done jbulpin@0: jbulpin@0: trap "rm -f $_REGFILENAME" EXIT jbulpin@0: jbulpin@0: if openwbem_transform $_REGFILENAME $* jbulpin@0: then jbulpin@0: chatter Deregistering providers with $state owcimomd jbulpin@0: $CIMMOF -r $_REGFILENAME > /dev/null jbulpin@0: else jbulpin@0: echo "Failed to build OpenWBEM registration MOF." >&2 jbulpin@0: return 1 jbulpin@0: fi jbulpin@0: } jbulpin@0: jbulpin@0: cim_server() jbulpin@0: { jbulpin@0: for exname in sfcbd cimserver owcimomd jbulpin@0: do jbulpin@0: if pegasus_path $exname > /dev/null jbulpin@0: then jbulpin@0: case $exname in jbulpin@0: sfcbd) echo sfcb; return 0;; jbulpin@0: cimserver) echo pegasus; return 0;; jbulpin@0: owcimomd) echo openwbem; return 0;; jbulpin@0: esac jbulpin@0: break; jbulpin@0: fi jbulpin@0: done jbulpin@0: echo unknown jbulpin@0: return 1 jbulpin@0: } jbulpin@0: jbulpin@0: usage() jbulpin@0: { jbulpin@0: echo "usage: $0 [-h] [-v] [-d] [-t ] -r regfile ... -m mof ..." jbulpin@0: } jbulpin@0: jbulpin@0: chatter() jbulpin@0: { jbulpin@0: if test x$verbose != x jbulpin@0: then jbulpin@0: echo $* jbulpin@0: fi jbulpin@0: } jbulpin@0: jbulpin@0: gb_getopt() jbulpin@0: { jbulpin@0: rmode=0 jbulpin@0: mmode=0 jbulpin@0: options= jbulpin@0: moffiles= jbulpin@0: registrations= jbulpin@0: while [ -n "$1" ] jbulpin@0: do jbulpin@0: case $1 in jbulpin@0: -r) mmode=0; jbulpin@0: rmode=1; jbulpin@0: shift;; jbulpin@0: -m) mmode=1; jbulpin@0: rmode=0; jbulpin@0: shift;; jbulpin@0: -*) mmode=0; jbulpin@0: rmode=0; jbulpin@0: options="$options $1"; jbulpin@0: shift;; jbulpin@0: **) if [ $mmode = 1 ] jbulpin@0: then moffiles="$moffiles $1" jbulpin@0: elif [ $rmode = 1 ] jbulpin@0: then registrations="$registrations -r $1" jbulpin@0: else options="$options $1"; jbulpin@0: fi; jbulpin@0: shift;; jbulpin@0: esac jbulpin@0: done jbulpin@0: echo $options $registrations $moffiles jbulpin@0: } jbulpin@0: jbulpin@0: prepargs=`gb_getopt $*` jbulpin@0: args=`getopt dvht:r: $prepargs` jbulpin@0: rc=$? jbulpin@0: jbulpin@0: if [ $rc = 127 ] jbulpin@0: then jbulpin@0: echo "warning: getopt not found ...continue without syntax check" jbulpin@0: args=$prepargs jbulpin@0: elif [ $rc != 0 ] jbulpin@0: then jbulpin@0: usage $0 jbulpin@0: exit 1 jbulpin@0: fi jbulpin@0: jbulpin@0: set -- $args jbulpin@0: jbulpin@0: while [ -n "$1" ] jbulpin@0: do jbulpin@0: case $1 in jbulpin@0: -h) help=1; jbulpin@0: shift; jbulpin@0: break;; jbulpin@0: -v) verbose=1; jbulpin@0: shift;; jbulpin@0: -d) deregister=1; jbulpin@0: shift;; jbulpin@0: -t) cimserver=$2; jbulpin@0: shift 2;; jbulpin@0: -r) regs="$regs $2"; jbulpin@0: shift 2;; jbulpin@0: --) shift; jbulpin@0: break;; jbulpin@0: **) break;; jbulpin@0: esac jbulpin@0: done jbulpin@0: jbulpin@0: mofs=$* jbulpin@0: jbulpin@0: if [ "$help" = "1" ] jbulpin@0: then jbulpin@0: usage jbulpin@0: echo -e "\t-h display help message" jbulpin@0: echo -e "\t-v verbose mode" jbulpin@0: echo -e "\t-d deregister provider and uninstall schema" jbulpin@0: echo -e "\t-t specify cimserver type (pegasus|sfcb|openwbem|sniacimom)" jbulpin@0: echo -e "\t-r specify registration files" jbulpin@0: echo -e "\t-m specify schema mof files" jbulpin@0: echo jbulpin@0: echo Use this command to install schema mofs and register providers. jbulpin@0: echo CIM Server Type is required as well as at least one registration file and one mof. jbulpin@0: exit 0 jbulpin@0: fi jbulpin@0: jbulpin@0: if test x"$mofs" = x || test x"$regs" = x jbulpin@0: then jbulpin@0: usage $0 jbulpin@0: exit 1 jbulpin@0: fi jbulpin@0: jbulpin@0: if test x$cimserver = x jbulpin@0: then jbulpin@0: cimserver=`cim_server` jbulpin@0: if test $? = 0 jbulpin@0: then jbulpin@0: chatter "Autoselected CIM server type:" $cimserver jbulpin@0: else jbulpin@0: echo "CIM server type could not be determined, specify with -t." >&2 jbulpin@0: exit 1 jbulpin@0: fi jbulpin@0: fi jbulpin@0: jbulpin@0: if test x$deregister = x jbulpin@0: then jbulpin@0: case $cimserver in jbulpin@0: pegasus) pegasus_install $mofs ":" $regs;; jbulpin@0: sfcb) sfcb_install $mofs ":" $regs;; jbulpin@0: openwbem) openwbem_install $mofs ;; jbulpin@0: sniacimom) echo sniacimom not yet supported && exit 1 ;; jbulpin@0: **) echo "Invalid CIM Server Type " $cimserver && exit 1;; jbulpin@0: esac jbulpin@0: else jbulpin@0: case $cimserver in jbulpin@0: pegasus) pegasus_uninstall $mofs ":" $regs;; jbulpin@0: sfcb) sfcb_uninstall $mofs ":" $regs;; jbulpin@0: openwbem) openwbem_uninstall $mofs ;; jbulpin@0: sniacimom) echo sniacimom not yet supported && exit 1 ;; jbulpin@0: **) echo "Invalid CIM Server Type " $cimserver && exit 1;; jbulpin@0: esac jbulpin@0: fi