install.sh revision 7c478bd95313f5f23a4c958a745db2134aa03244
#!/sbin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License"). You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
# All Rights Reserved
#ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.12.1.1 */
# INSTALL COMMAND
FLIST=$ROOT/etc/syslist
DEFAULT="$ROOT/bin $ROOT/usr/bin $ROOT/etc $ROOT/lib $ROOT/usr/lib" FOUND="" MOVOLD=""
ECHO=echo PATH=/usr/bin FLAG=off
USAGE="eval echo 'usage: install [options] file [dir1 ...]'; exit 2"
if [ $# -lt 2 ] ; then
$USAGE
fi
MFLAG=off
UFLAG=off
GFLAG=off
MODE=755
GRP=`expr "\`id\`" : ".*gid=[0-9]*(\(..*\)) .*"`
GROUP=`echo $GRP | sed -e 's/) fsid.*//p'`
OWN=`expr "\`id\`" : ".*uid=[0-9]*(\(..*\)) .*"`
OWNER=`echo $OWN | sed -e 's/) .*//p'`
if [ -z "$GROUP" ]
then
GROUP=`expr "\`id\`" : ".*gid=\([0-9]*\).*"`
fi
if [ -z "$OWNER" ]
then
OWNER=`expr "\`id\`" : ".*uid=\([0-9]*\).*"`
fi
if [ "$OWNER" = root ]
then
ROOTFLAG=on
OWNER=bin
GROUP=bin
else
ROOTFLAG=off
fi
for i in $*
do
if [ $FLAG = on ]
then
case $i in
-*) echo "install: The -c, -f, -n options each require a directory following!"
exit 2;;
*) FLAG=off
continue;;
esac
fi
case $i in
-c) if [ x$ARG = x-d -o x$ARG = x-f ]
then
echo "install: -c dir: illegal option with $ARG option!"
exit 2
elif [ x$arg = x-i -o x$arg = x-o -o x$arg = x-n ]
then
echo "install: -c dir: illegal option with $arg option!"
exit 2
elif test $# -lt 3
then
echo "install: -c option must have at least 3 args!"
exit 2
else
direct=$2
FLAG=on
ARG=-c
shift; shift
fi;;
-f) if [ x$ARG = x-d -o x$ARG = x-c ]
then
echo "install: -f dir: illegal option with $ARG option!"
exit 2
elif [ x$arg = x-i -o x$arg = x-n ]
then
echo "install: -f dir: illegal option with $arg option!"
exit 2
elif test $# -lt 3
then
echo "install: -f option must have at least 3 args!"
exit 2
else
direct=$2
FLAG=on
ARG=-f
shift; shift
fi;;
-i) if [ x$ARG = x-d -o x$ARG = x-c -o x$ARG = x-f ]
then
echo "install: -i: illegal option with $ARG option!"
exit 2
elif test $# -lt 3
then
echo "install: -i option requires at least 3 args!"
exit 2
else
DEFAULT=""
arg=-i
shift
fi;;
-o) if [ x$ARG = x-d -o x$ARG = x-c ]
then
echo "install: -o: illegal option with $ARG option!"
exit 2
elif test $# -lt 2
then
$USAGE
else
MOVOLD=yes
arg=-o
shift
fi;;
-n) if [ x$ARG = x-d -o x$ARG = x-c -o x$ARG = x-f ]
then
echo "install: -n dir: illegal option with $ARG option!"
exit 2
elif test $# -lt 3
then
echo "install: -n option requires at least 3 args!"
exit 2
else
LASTRES=$2
FLAG=on
FOUND=n
arg=-n
shift; shift
fi;;
-d) if [ x$ARG = x-c -o x$ARG = x-f ]
then
echo "install: -d: illegal option with $ARG option!"
exit 2
elif [ x$arg = x-i -o x$arg = x-o -o x$arg = x-n ]
then
echo "install: -d: illegal option with $arg option!"
exit 2
else
ARG=-d
shift
fi;;
-s) if test $# -lt 2
then
$USAGE
else
ECHO=:
shift
fi;;
-u) if [ $ROOTFLAG = off ]
then
echo "install: -u option available only to root -- ignored"
else
OWNER=$2
UFLAG=on
$ECHO new owner is $OWNER
fi
FLAG=on
shift; shift;;
-g) if [ $ROOTFLAG = off ]
then
echo "install: -g option available only to root -- ignored"
else
GROUP=$2
GFLAG=on
fi
FLAG=on
shift; shift;;
-m) MODE=$2
MFLAG=on
FLAG=on
shift; shift;;
*) break;;
esac
done
if [ x$ARG = x-d ]
then
if [ ! -d $i ]
then
mkdir -p $i
if [ $? = 0 ]
then
$ECHO "directory $i created"
chgrp $GROUP $i
chown $OWNER $i
chmod $MODE $i
else
echo "install: mkdir $i failed "
fi
else
chgrp $GROUP $i
chown $OWNER $i
chmod $MODE $i
fi
exit
fi
FILEP=$i FILE=`echo $i | sed -e "s/.*\///"`
if [ x$ARG = x-c -o x$ARG = x-f ]
then
case $2 in
-*) $USAGE ;;
"") : ;;
esac
if test -f $direct/$FILE -o -f $direct/$FILE/$FILE
then
case $ARG in
-c) echo "install: $FILE already exists in $direct"
exit 2;;
-f) GRP=`ls -l $direct/$FILE | awk '{print $4}'`
OWN=`ls -l $direct/$FILE | awk '{print $3}'`
if [ "$MOVOLD" = yes ]
then
mv -f $direct/$FILE $direct/OLD$FILE
cp $direct/OLD$FILE $direct/$FILE
if [ $? = 0 ]
then
$ECHO "$FILE moved to $direct/OLD$FILE"
else
echo "install: mv $direct/OLD$FILE $direct/$FILE failed"
exit 2
fi
fi
if cp $FILEP $direct/$FILE
then
chgrp $GRP $direct/$FILE
chown $OWN $direct/$FILE
if [ "$GFLAG" = on ]
then
chgrp $GROUP $direct/$FILE
fi
if [ "$MFLAG" = on ]
then
chmod $MODE $direct/$FILE
fi
if [ "$UFLAG" = on ]
then
chown $OWNER $direct/$FILE
fi
$ECHO "$FILEP installed as $direct/$FILE"
else
echo "install: cp $FILEP $direct/$FILE failed "
exit 2
fi
exit;;
esac
else
cp $FILEP $direct/$FILE
if [ $? = 0 ]
then
$ECHO "$FILEP installed as $direct/$FILE"
chgrp $GROUP $direct/$FILE
chown $OWNER $direct/$FILE
chmod $MODE $direct/$FILE
else
echo "install: cp $FILEP $direct/$FILE failed "
exit 2
fi
fi
exit
fi
shift
PUTHERE=""
for i in $*
do
case $i in
-*) $USAGE ;;
esac
PUTHOLD=`find $i -follow -name $FILE -type f -print`
PUTHERE=`expr "\`echo $PUTHOLD\`" : '\([^ ]*\)'`
if [ "$PUTHERE" != "" ]
then break
fi
done
if [ -r $FLIST -a "$PUTHERE" = "" ]
then
PUTHERE=`grep "/${FILE}$" $FLIST | sed -n -e '1p'`
if [ "$PUTHERE" != "" -a "$ROOT" != "" ]
then
PUTHERE=${ROOT}${PUTHERE}
fi
fi
if [ "$PUTHERE" = "" ]
then
for i in $DEFAULT
do
PUTHOLD=`find $i -follow -name $FILE -type f -print`
PUTHERE=`expr "\`echo $PUTHOLD\`" : '\([^ ]*\)'`
if [ "$PUTHERE" != "" ]
then break
fi
done
fi
if [ "$PUTHERE" != "" ]
then
GRP=`ls -l $PUTHERE | awk '{print $4}'`
OWN=`ls -l $PUTHERE | awk '{print $3}'`
if [ "$MOVOLD" = yes ]
then
old=`echo $PUTHERE | sed -e "s/\/[^\/]*$//"`
mv -f $PUTHERE $old/OLD$FILE
cp $old/OLD$FILE $PUTHERE
if [ $? = 0 ]
then
$ECHO "old $FILE moved to $old/OLD$FILE"
else
echo "install: cp $direct/OLD$FILE $direct/$FILE failed"
exit 2
fi
fi
FOUND=y
if cp $FILEP $PUTHERE
then
chgrp $GRP $PUTHERE
chown $OWN $PUTHERE
if [ "$GFLAG" = on ]
then
chgrp $GROUP $PUTHERE
fi
if [ "$MFLAG" = on ]
then
chmod $MODE $PUTHERE
fi
if [ "$UFLAG" = on ]
then
chown $OWNER $PUTHERE
fi
$ECHO "$FILEP installed as $PUTHERE"
break
else
exit 2
fi
fi
case $FOUND in
"") echo "install: $FILE was not found anywhere!"
exit 2;;
y) : ;;
n) cp $FILEP $LASTRES/$FILE
if [ $? = 0 ]
then
$ECHO "$FILEP installed as $LASTRES/$FILE by default!"
cd $LASTRES
chgrp $GROUP $FILE
chown $OWNER $FILE
chmod $MODE $FILE
else
echo "install: cp $FILEP $LASTRES/$FILE failed"
exit 2
fi;;
esac