160 lines
3.4 KiB
Bash
Executable File
160 lines
3.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
##############################################################
|
|
# InstallBase #
|
|
# #
|
|
# Performs installation for bookcase #
|
|
# #
|
|
##############################################################
|
|
|
|
#### Parse the argument ####
|
|
|
|
INSTALL_BOOKCASE=
|
|
while getopts p:b:i OPTS
|
|
do
|
|
|
|
case $OPTS in
|
|
|
|
p) # position to install the bookcase
|
|
Position=$OPTARG
|
|
;;
|
|
|
|
b) # grap the bookcase
|
|
BookCase=$OPTARG
|
|
|
|
## Make sure it doesn't have any trailing / ###
|
|
BookCase=`echo $BookCase | sed "s/\(.*\)\/$/\1/g"`
|
|
;;
|
|
|
|
i) # Install the bookcase even if it already exists in the InfoLib
|
|
INSTALL_BOOKCASE="YES"
|
|
;;
|
|
|
|
\?) # Unrecognized option - exit with 1
|
|
usage_f
|
|
exit 1
|
|
;;
|
|
|
|
esac
|
|
done
|
|
|
|
if [ "$OPTIND" -gt "$#" -o -z "$BookCase" ]; then
|
|
echo "Usage : $0 [ -i ] [ -p position ] -b bookcase info-lib " >&2
|
|
exit 1
|
|
fi
|
|
|
|
shift `expr $OPTIND - 1`
|
|
if [ $? -ne 0 ]; then
|
|
echo "(ERROR) shift failed" >&2
|
|
exit 1
|
|
fi
|
|
|
|
InfoLib=$1
|
|
BookCaseName=`basename $BookCase`
|
|
|
|
NAMES_MMDB=$InfoLib/names.mmdb
|
|
NAMES_MMDB_TMP=$InfoLib/names.mmdb.$$
|
|
|
|
if [ -z "$Position" ]; then
|
|
Position="END"
|
|
fi
|
|
|
|
### first check if bookcase exists ###
|
|
|
|
if [ ! -f $NAMES_MMDB ]; then
|
|
echo "(ERROR) $InfoLib is not a valid info-library" >&2
|
|
exit 1
|
|
fi
|
|
|
|
TSTSTRING=
|
|
TSTSTRING=`awk '{
|
|
if ( $1 == bookcasename ) { print bookcasename }
|
|
}' bookcasename=$BookCaseName $NAMES_MMDB`
|
|
|
|
if [ -n "$TSTSTRING" ]; then
|
|
if [ -z "$INSTALL_BOOKCASE" ]; then
|
|
echo "$BookCaseName already exists in $InfoLib, no installation takes place" >&2
|
|
exit 2
|
|
fi
|
|
|
|
### Prepare names.mmdb file for update
|
|
|
|
awk '{
|
|
if ( $1 != bookcasename ) { print $0 }
|
|
|
|
}' bookcasename=$BookCaseName $NAMES_MMDB > $NAMES_MMDB_TMP
|
|
|
|
### Clean up everything there before proceeding ###
|
|
( cd $InfoLib/$BookCaseName ; rm -r ./* )
|
|
|
|
|
|
else
|
|
cp $NAMES_MMDB $NAMES_MMDB_TMP
|
|
fi
|
|
|
|
### perform validation for the bookcase against the infolibrary ###
|
|
|
|
# InfoValidate $BookCase $InfoLib
|
|
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
### Grap the entry line for the bookcase
|
|
|
|
BaseDir=`dirname $BookCase`
|
|
if [ -z "$BaseDir" ]; then
|
|
echo "(ERROR) Info-library for $BookCase is not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f $BaseDir/names.mmdb ]; then
|
|
echo "(ERROR) BaseDir/names.mmdb does not exist in $InfoLib" >&2
|
|
exit 1
|
|
fi
|
|
|
|
BookEntryLine=`awk '{
|
|
if ( $1 == bookcasename ) { print $0 }
|
|
}' bookcasename=$BookCaseName $BaseDir/names.mmdb`
|
|
|
|
if [ -z "$BookEntryLine" ]; then
|
|
echo "(ERROR) $BookCase does not exist in $InfoLib" >&2
|
|
exit 1
|
|
fi
|
|
|
|
### Update the names.mmdb file with the new entry ###
|
|
if [ "$Position" != "END" ]; then
|
|
|
|
awk '{
|
|
if ( NR != position ) { print $0 }
|
|
if ( NR == position ) { print bookcaseEntry; print $0 }
|
|
}' position=$Position bookcaseEntry="$BookEntryLine" $NAMES_MMDB_TMP > \
|
|
$NAMES_MMDB
|
|
|
|
else
|
|
|
|
echo "$BookEntryLine" >> $NAMES_MMDB_TMP
|
|
mv $NAMES_MMDB_TMP $NAMES_MMDB
|
|
|
|
fi
|
|
|
|
rm -f $NAMES_MMDB_TMP
|
|
|
|
### Copy the physical data to the infolib
|
|
|
|
( cd $BaseDir ; tar cf - $BookCaseName ) | ( cd $InfoLib; tar xof - )
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "(ERROR) Unable to install $BookCase to $InfoLib" >&2
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|