diff options
| author | stevel@tonic-gate <none@none> | 2005-06-14 00:00:00 -0700 |
|---|---|---|
| committer | stevel@tonic-gate <none@none> | 2005-06-14 00:00:00 -0700 |
| commit | 7c478bd95313f5f23a4c958a745db2134aa03244 (patch) | |
| tree | c871e58545497667cbb4b0a4f2daf204743e1fe7 /usr/src/cmd/install.d/install.sh | |
| download | illumos-joyent-7c478bd95313f5f23a4c958a745db2134aa03244.tar.gz | |
OpenSolaris Launch
Diffstat (limited to 'usr/src/cmd/install.d/install.sh')
| -rw-r--r-- | usr/src/cmd/install.d/install.sh | 383 |
1 files changed, 383 insertions, 0 deletions
diff --git a/usr/src/cmd/install.d/install.sh b/usr/src/cmd/install.d/install.sh new file mode 100644 index 0000000000..c5ed81349d --- /dev/null +++ b/usr/src/cmd/install.d/install.sh @@ -0,0 +1,383 @@ +#!/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 |
