Sindbad~EG File Manager
| Current Path : /bin/ |
|
|
| Current File : //bin/sfcbrepos |
#!/bin/sh
usage()
{
echo "usage: $0 [-h] [-f] [-i] [-b backendopt] [-c cimschemadir] [-s stagingdir] [-r registrationdir] [-t format]" 1>&2
}
args=`getopt fhzib:s:r:c:t:X: $*`
rc=$?
if [ $rc = 127 ]
then
echo "warning: getopt not found ...continue without syntax check"
args=$*
elif [ $rc != 0 ]
then
usage $0
exit 1
fi
set -- $args
cpformat="auto"
while [ -n "$1" ]
do
case $1 in
-h) help=1;
shift;;
-f) force=1
shift;;
-i) ignore_instances=1
shift;;
-b) backendopt="-b $2"
shift 2;;
# -X previously used, replaced by -b. Keep it around for compatibility.
-X) backendopt="-b $2"
shift 2;;
-s) stagingdir=$2
shift 2;;
-r) registrationdir=$2
shift 2;;
-c) cimschemadir=$2
shift 2;;
-t) cpformat="$2"
shift 2;;
-z) compress=1
shift;;
--) shift;
break;;
**) break;;
esac
done
if [ "$help" = "1" ]
then
usage
echo -e "\t-h display help message"
echo -e "\t-f force repository creation"
echo -e "\t-i do not migrate instances from previous repository (default=do migrate)"
echo -e "\t-X create repository in non-native format as specifed by argument"
echo -e "\t-s specify staging directory [/var/lib/sfcb/stage]"
echo -e "\t-r specify repository directory [/var/lib/sfcb/registration]"
echo -e "\t-c specify directory containing CIM Schema MOFs [/usr/share/mof/cim-current]"
echo -e "\t-t create tiny class repository by omitting inheritance information"
echo -e "\t-z compress repository with gzip"
echo
echo "Use to create sfcb provider registration and class repository."
exit 0
fi
if [ -z "$force" ]
then
echo Setting up sfcb Repository, Class, and Provider Registration
echo Your old repository and registration data will be deleted
echo -n "(static instances will "
if [ $ignore_instances ]
then echo -n "NOT "
fi
echo "be saved)"
echo Do you want to proceed? "(type yes to continue)"
read response
if [ x$response = x ] || [ $response != yes ]
then
echo Keeping old data
exit 2
fi
fi
if [ -z "$stagingdir" ]
then
stagingdir=${DESTDIR}/var/lib/sfcb/stage
fi
if [ -z "$registrationdir" ]
then
registrationdir=${DESTDIR}/var/lib/sfcb/registration
fi
if [ -z "$cimschemadir" ]
then
cimschemadir=${DESTDIR}/usr/share/mof/cim-current
fi
if [ -d $stagingdir ] && [ -f $stagingdir/default.reg ] &&
[ -f $cimschemadir/CIM_Schema.mof ]
then
if [ -d $registrationdir/repository ]
then
rm -rf $registrationdir/repository.previous 2> /dev/null
mv -f $registrationdir/repository $registrationdir/repository.previous
if [ $? != 0 ]
then
echo "Failed to remove old repository" >&2
exit 1
fi
fi
if [ -f $registrationdir/providerRegister ]
then
mv -f $registrationdir/providerRegister $registrationdir/providerRegister.previous
if [ $? != 0 ]
then
echo "Failed to remove old provider registry" >&2
exit 1
fi
fi
# Creating empty default namespace directories
mkdir -p $registrationdir/repository/root/cimv2 &&
mkdir -p $registrationdir/repository/root/interop &&
cp $stagingdir/default.reg $registrationdir/providerRegister
if [ $? != 0 ]
then
echo "Failed to create default repositories and registry" >&2
exit 1
fi
if ls $stagingdir/regs/*.reg > /dev/null 2>&1
then
if ! cat $stagingdir/regs/*.reg >> $registrationdir/providerRegister
then
echo Failed copying the registration files. >&2
exit 1
fi
fi
if false
then
# Note: do we need "legacy" support -- don't think so
if ls $stagingdir/mofs/*.mof > /dev/null 2>&1
then
cp $stagingdir/mofs/*.mof $stagingdir/mofs/root/cimv2
fi
fi
# Check which ClassProvider we're using, and set $cpformat if "-t auto". If ClassProviderSf, "-t sf" is required (at least for now)
if [ "$cpformat" = "sf" ]
then
cpformat="-t"
elif [ "$cpformat" = "std" ]
then
cpformat=""
elif [ "$cpformat" = "auto" ] && grep ClassProviderSf $registrationdir/providerRegister > /dev/null
then
echo "Sf format being used."
cpformat="-t"
else
cpformat=""
fi
# Compile all staged namespace directories
instmigfile=/tmp/sfcbinst.mof
mofsubdirs=`find $stagingdir/mofs/* -type d -print 2> /dev/null`
if ls $stagingdir/mofs/*.mof > /dev/null 2>&1
then
globalmofs=$stagingdir/mofs/*.mof
else
globalmofs=""
fi
for mofdir in $mofsubdirs
do
if ls $mofdir/*.mof > /dev/null 2>&1
then
namespace=`echo $mofdir | sed s?$stagingdir/mofs/??`
repositorydir=$registrationdir/repository/
[ -d $repositorydir ] || mkdir -p $repositorydir
#grab all non-mof static instances, output to /tmp/sfcbinst.mof
if [ -z "$ignore_instances" ]
then
rm -f $instmigfile 2> /dev/null
#get class names (from filenames), ignoring specific files, from repos.previous, as it's already been moved
if [ -e $registrationdir/repository.previous/$namespace/ ]
then
static_inst_files=`ls $registrationdir/repository.previous/$namespace/ -I classSchemas -I qualifiers -I *.idx` > /dev/null 2>&1
for instfile in $static_inst_files
do
sfcbinst2mof -n $namespace -c $instfile -o $instmigfile -r $registrationdir/repository.previous/ -g ${DESTDIR}/etc/sfcb/sfcb.cfg 2> /dev/null
done
fi
fi
if [ -e $instmigfile ]
then
instmigopt="-m $instmigfile"
else
instmigopt=""
fi
if ! sfcbmof -d $repositorydir -n $namespace -o classSchemas -I $cimschemadir -i CIM_Schema.mof $cpformat $backendopt $instmigopt $mofdir/*.mof $globalmofs
then
rm -f $instmigfile 2> /dev/null
echo Failed compiling the MOF files. >&2
exit 1
fi
if [ -e $instmigfile ]
then
rm -f $instmigfile 2> /dev/null
fi
if [ "$compress" = "1" ]
then
gzip $repositorydir/$namespace/classSchemas
fi
fi
done
else
echo Could not find required staging files. Please check your setup. >&2
exit 1
fi
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists