#!/bin/sh
#
#ident "@(#)postinstall   1.3     99/10/18 SMI"
#
# Copyright (c) 1999 by Sun Microsystems, Inc.
#

myname=`basename $0`
#echo "begin with the $myname script"
eval=0
SCRIPT_MODIFIED="false"

OLD_PATCHES="101231 101929 103926 102580 104172 104173 104275"

#
# Cleanup temporary files
#
cleanup() {
	/usr/bin/rm -f /tmp/devlink.tab.old /tmp/devlink.tab.$$
	/usr/bin/rm -f /tmp/inetd.conf.old /tmp/inetd.conf.$$
	/usr/bin/rm -f /tmp/rpc.old /tmp/rpc.$$
}

#
# set error part of exit value
#
seterr() {
	err=`expr "$eval" % 10`
	reb=`expr "$eval" - "$err"`
	if [ "$1" -gt "$err" ]; then
		eval=`expr "$reb" + "$1"`
	fi
}

#
# set reboot part of exit value
#
setreb() {
	err=`expr "$eval" % 10`
	reb=`expr "$eval" - "$err"`
	if [ "$1" -gt "$reb" ]; then
		eval=`expr "$1" + "$err"`
	fi
}

#
# Clear out old DiskSuite patches
#
clear_old_patches() {
	if [ -d /var/sadm/patch ]; then
		cd /var/sadm/patch
	else
		return
	fi

	for patch in $OLD_PATCHES; do
		rm -rf ${patch}-??
	done
}

#
# set error part of exit value and exit
#
errout() {
	seterr $1
	#echo "done with the $myname script, exiting with $eval"
	cleanup
	reb=`expr "$eval" / 10`
	if [ "$reb" -gt "0" ]; then
		touch ${PKG_INSTALL_ROOT}/reconfigure
	fi

	# Perform an upgrade
	if [ "$IS_AN_UPGRADE" = "true" ]; then
		clear_old_patches
		sh $UPGR_SCRIPT &
		# Give the script a chance to queue onto the package
		# database lock
		sleep 3
	fi


	exit $eval
}

#
# set reboot part of exit value and exit
#
rebout() {
       	setreb $1
	errout 0
}

#
# catch common signals
#
trap 'echo "$myname: caught signal"; errout 3' 1 2 3

#
# add new devlink.tab entries for disksets
#
# Just initialize it
	rm -f /tmp/devlink.tab.$$
	touch /tmp/devlink.tab.$$

if [ $? -ne 0 ]; then
	echo "$myname: can't create /tmp/devlink.tab.$$"
	errout 1
fi

cat << THE_END >> /tmp/devlink.tab.$$
type=ddi_pseudo;name=md;minor1=0;minor3=blk	md/dsk/d\M2
type=ddi_pseudo;name=md;minor1=0;minor3=raw	md/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=1;minor3=blk	md/shared/1/dsk/d\M2
type=ddi_pseudo;name=md;minor1=1;minor3=raw	md/shared/1/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=2;minor3=blk	md/shared/2/dsk/d\M2
type=ddi_pseudo;name=md;minor1=2;minor3=raw	md/shared/2/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=3;minor3=blk	md/shared/3/dsk/d\M2
type=ddi_pseudo;name=md;minor1=3;minor3=raw	md/shared/3/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=4;minor3=blk	md/shared/4/dsk/d\M2
type=ddi_pseudo;name=md;minor1=4;minor3=raw	md/shared/4/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=5;minor3=blk	md/shared/5/dsk/d\M2
type=ddi_pseudo;name=md;minor1=5;minor3=raw	md/shared/5/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=6;minor3=blk	md/shared/6/dsk/d\M2
type=ddi_pseudo;name=md;minor1=6;minor3=raw	md/shared/6/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=7;minor3=blk	md/shared/7/dsk/d\M2
type=ddi_pseudo;name=md;minor1=7;minor3=raw	md/shared/7/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=8;minor3=blk	md/shared/8/dsk/d\M2
type=ddi_pseudo;name=md;minor1=8;minor3=raw	md/shared/8/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=9;minor3=blk	md/shared/9/dsk/d\M2
type=ddi_pseudo;name=md;minor1=9;minor3=raw	md/shared/9/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=10;minor3=blk	md/shared/10/dsk/d\M2
type=ddi_pseudo;name=md;minor1=10;minor3=raw	md/shared/10/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=11;minor3=blk	md/shared/11/dsk/d\M2
type=ddi_pseudo;name=md;minor1=11;minor3=raw	md/shared/11/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=12;minor3=blk	md/shared/12/dsk/d\M2
type=ddi_pseudo;name=md;minor1=12;minor3=raw	md/shared/12/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=13;minor3=blk	md/shared/13/dsk/d\M2
type=ddi_pseudo;name=md;minor1=13;minor3=raw	md/shared/13/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=14;minor3=blk	md/shared/14/dsk/d\M2
type=ddi_pseudo;name=md;minor1=14;minor3=raw	md/shared/14/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=15;minor3=blk	md/shared/15/dsk/d\M2
type=ddi_pseudo;name=md;minor1=15;minor3=raw	md/shared/15/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=16;minor3=blk	md/shared/16/dsk/d\M2
type=ddi_pseudo;name=md;minor1=16;minor3=raw	md/shared/16/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=17;minor3=blk	md/shared/17/dsk/d\M2
type=ddi_pseudo;name=md;minor1=17;minor3=raw	md/shared/17/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=18;minor3=blk	md/shared/18/dsk/d\M2
type=ddi_pseudo;name=md;minor1=18;minor3=raw	md/shared/18/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=19;minor3=blk	md/shared/19/dsk/d\M2
type=ddi_pseudo;name=md;minor1=19;minor3=raw	md/shared/19/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=20;minor3=blk	md/shared/20/dsk/d\M2
type=ddi_pseudo;name=md;minor1=20;minor3=raw	md/shared/20/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=21;minor3=blk	md/shared/21/dsk/d\M2
type=ddi_pseudo;name=md;minor1=21;minor3=raw	md/shared/21/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=22;minor3=blk	md/shared/22/dsk/d\M2
type=ddi_pseudo;name=md;minor1=22;minor3=raw	md/shared/22/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=23;minor3=blk	md/shared/23/dsk/d\M2
type=ddi_pseudo;name=md;minor1=23;minor3=raw	md/shared/23/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=24;minor3=blk	md/shared/24/dsk/d\M2
type=ddi_pseudo;name=md;minor1=24;minor3=raw	md/shared/24/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=25;minor3=blk	md/shared/25/dsk/d\M2
type=ddi_pseudo;name=md;minor1=25;minor3=raw	md/shared/25/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=26;minor3=blk	md/shared/26/dsk/d\M2
type=ddi_pseudo;name=md;minor1=26;minor3=raw	md/shared/26/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=27;minor3=blk	md/shared/27/dsk/d\M2
type=ddi_pseudo;name=md;minor1=27;minor3=raw	md/shared/27/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=28;minor3=blk	md/shared/28/dsk/d\M2
type=ddi_pseudo;name=md;minor1=28;minor3=raw	md/shared/28/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=29;minor3=blk	md/shared/29/dsk/d\M2
type=ddi_pseudo;name=md;minor1=29;minor3=raw	md/shared/29/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=30;minor3=blk	md/shared/30/dsk/d\M2
type=ddi_pseudo;name=md;minor1=30;minor3=raw	md/shared/30/rdsk/d\M2
type=ddi_pseudo;name=md;minor1=31;minor3=blk	md/shared/31/dsk/d\M2
type=ddi_pseudo;name=md;minor1=31;minor3=raw	md/shared/31/rdsk/d\M2
THE_END

devltab=${PKG_INSTALL_ROOT}/etc/devlink.tab
grep 'name=md;minor1=.*;minor3=' ${devltab} > /tmp/devlink.tab.old
case $? in
0|1)	;;
*)	echo "$myname: can't create /tmp/devlink.tab.old"
	errout 1
	;;
esac

cmp -s /tmp/devlink.tab.old /tmp/devlink.tab.$$
case $? in
0)	;;

1)	grep -v 'name=md;minor1=.*;minor3=' ${devltab} > ${devltab}.tmp
	if [ $? -ne 0 ]; then
		echo "$myname: can't create ${devltab}.tmp"
		errout 1
	fi
	cat /tmp/devlink.tab.$$ >> ${devltab}.tmp
	if [ $? -ne 0 ]; then
		echo "$myname: can't create ${devltab}.tmp"
		errout 1
	fi
	mv ${devltab}.tmp ${devltab}
	if [ $? -ne 0 ]; then
		echo "$myname: can't edit ${devltab}"
		errout 1
	fi
	# installf -f $PKGINST
	;;

*)	echo "$myname: can't compare /tmp/devlink.tab.old /tmp/devlink.tab.$$"
	errout 1
	;;
esac

#
# add md_trans and md_raid to forceloads if root is on a metadevice
#
system=${PKG_INSTALL_ROOT}/etc/system
grep '^forceload: misc/md_stripe$'  ${system} > /dev/null
case $? in
0)	# md_trans
	grep 'forceload: misc/md_trans' ${system} > /dev/null
	case $? in
	0)	;;
	
	1)	sed 's#^forceload: misc/md_stripe$#forceload: misc/md_stripe\
forceload: misc/md_trans#' ${system} > ${system}.tmp
		if [ $? -ne 0 ]; then
			echo "$myname: can't edit ${system}"
			errout 1
		fi
		mv ${system}.tmp ${system}
		if [ $? -ne 0 ]; then
			echo "$myname: can't edit ${system}"
			errout 1
		fi
		;;

	*)	echo "$myname: can't edit ${system}"
		errout 1
		;;
	esac
	# md_raid
	grep 'forceload: misc/md_raid' ${system} > /dev/null
	case $? in
	0)	;;
	
	1)	sed 's#^forceload: misc/md_stripe$#forceload: misc/md_stripe\
forceload: misc/md_raid#' ${system} > ${system}.tmp
		if [ $? -ne 0 ]; then
			echo "$myname: can't edit ${system}"
			errout 1
		fi
		mv ${system}.tmp ${system}
		if [ $? -ne 0 ]; then
			echo "$myname: can't edit ${system}"
			errout 1
		fi
		;;

	*)	echo "$myname: can't edit ${system}"
		errout 1
		;;
	esac
	;;

1)	;;

*)	echo "$myname: can't edit ${system}"
	errout 1
	;;
esac

#
# exit after add_drv with setup for reconfiguration reboot
# if needed.
#
mddevicesa=${PKG_INSTALL_ROOT}/devices/pseudo/md@0:admin
mddeva=${PKG_INSTALL_ROOT}/dev/md/admin
if [ "$IS_AN_UPGRADE" = "false" ]; then
#if [ ! -c ${mddevicesa} -o ! -c ${mddeva} ]; then
	# initial install, check for install on running root
	if [ "${PKG_INSTALL_ROOT:-/}" =  "/" ]; then
		#
		# NOTE: The base Solaris install has md driver 
		# information in: /etc/minor_perm, /etc/name_to_major, and
		# /etc/devlink.tab. This prevents us from useing "add_drv"
		# and "rem_drv".
		#
		echo "$myname: configure driver\n\n\t\t(This may take a while.)"

		/usr/sbin/devfsadm -i md
		if [ $? -ne 0 ]; then
			rebout 10
		fi
	fi
	# done, we don't need to reboot
	errout 0
else
	rebout 10
fi



