#!/bin/sh
#
# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident	"@(#)i.etcsystem	1.17	04/09/08 SMI"
#

PATH="/usr/bin:/usr/sbin:${PATH}"
export PATH
TAG=new
CLEANUP_FILE=/tmp/CLEANUP

eolpp_echo_warning() {
echo ""
echo "\tNOTE: $1 has been modified since it contains references to"
echo "\tpriority paging tunables. Please review the changed file."
echo ""
}

eolpp_write_sed_script() {
cat > /tmp/eolpp.sed.scr.$$ << EOF
/^[ 	]*set[ 	]\{1,\}priority_paging.*/ {
:Mod
        i\\
\\
* NOTE: As of Solaris 9, priority paging is unnecessary and has been removed.\\
* Since references to priority paging related tunables will now result in\\
* boot-time warnings, the assignment below has been commented out. For more\\
* details, see the Solaris 9 Release Notes, or the "Solaris Tunable Parameters\\
* Reference Manual".\\

        s/^\(.*\)/* \1/
        a\\

        }
/^[ 	]*set[ 	]\{1,\}cachefree.*/  b Mod
EOF
}

KEYSTR="the assignment below has been left to provide compatibility with your"
eolipc() {
	#
	# We don't want to run again if we have already marked entries as
	# "old but still used".
	#
	egrep -s '^* "(sem|shm|msg)info_.*" tunable has been replaced' $1 &&
	    return
	sed '	/^[ 	]*set[ 	].*semsys:seminfo_semmns/ b inactiv
		/^[ 	]*set[ 	].*semsys:seminfo_semvmx/ b inactiv
		/^[ 	]*set[ 	].*semsys:seminfo_semmnu/ b inactiv
		/^[ 	]*set[ 	].*semsys:seminfo_semaem/ b inactiv
		/^[ 	]*set[ 	].*semsys:seminfo_semume/ b inactiv
		/^[ 	]*set[ 	].*semsys:seminfo_semusz/ b inactiv
		/^[ 	]*set[ 	].*semsys:seminfo_semmap/ b inactiv
		/^[ 	]*set[ 	].*shmsys:shminfo_shmseg/ b inactiv
		/^[ 	]*set[ 	].*shmsys:shminfo_shmmin/ b inactiv
		/^[ 	]*set[ 	].*msgsys:msginfo_msgmax/ b inactiv
		/^[ 	]*set[ 	].*msgsys:msginfo_msgssz/ b inactiv
		/^[ 	]*set[ 	].*msgsys:msginfo_msgmap/ b inactiv
		/^[ 	]*set[ 	].*msgsys:msginfo_msgseg/ b inactiv
		/^[ 	]*set[ 	].*msgsys:msginfo_msgmni/ b legacy
		/^[ 	]*set[ 	].*msgsys:msginfo_msgmnb/ b legacy
		/^[ 	]*set[ 	].*msgsys:msginfo_msgtql/ b legacy
		/^[ 	]*set[ 	].*shmsys:shminfo_shmmni/ b legacy
		/^[ 	]*set[ 	].*shmsys:shminfo_shmmax/ b legacy
		/^[ 	]*set[ 	].*semsys:seminfo_semmni/ b legacy
		/^[ 	]*set[ 	].*semsys:seminfo_semopm/ b legacy
		/^[ 	]*set[ 	].*semsys:seminfo_semmsl/ b legacy
		b
		:inactiv
		s/^[^:]*:\(.\{14\}\).*/\
* NOTE: As of Solaris 10, System V IPC tunables are unnecessary.  The\
* assignment to "\1" no longer has any effect and has been\
* commented out.  For more details, see the Solaris 10 "What'\''s New"\
* document, or the "Solaris Tunable Parameters Reference Manual".\
*\
* &\
/
		b
		:legacy
		s/^[^:]*:\(.\{14\}\).*/\
* NOTE: As of Solaris 10, System V IPC tunables are unnecessary.  The\
* "\1" tunable has been replaced with a resource control;\
* the assignment below has been left to provide compatibility with your\
* previous settings.  For more details, see the Solaris 10 "What'\''s New"\
* document, or the "Solaris Tunable Parameters Reference Manual".\
\
&/' $1 > /tmp/s.$$ && cp /tmp/s.$$ $dest
	rm -f /tmp/s.$$

}

while read src dest
do
	if [ ! -f $dest ] ; then
		cp $src $dest
	else
		#
		#  These tunable parameters have moved from nfs to nfssrv.
		#
		sed -e "s/^\([^*]*set[ 	]*\)nfs\([ 	]*:[ 	]*nfs_portmon\)/\1nfssrv\2/" \
    		-e "s/^\([^*]*set[ 	]*\)nfs\([ 	]*:[ 	]*rfs_write_async\)/\1nfssrv\2/" $dest >/tmp/s.$$
		cp /tmp/s.$$ $dest
		rm -f /tmp/s.$$

		#
		# Remove md_mirror_wow_flg line.
		# 
		egrep -v 'md_mirror:md_mirror_wow_fl' $dest > /tmp/s.$$
                cp /tmp/s.$$ $dest
                rm -f /tmp/s.$$

		#
		# Remove MDD driver forceloads for mirrored root.
		# Only remove the forceloads between Begin/End MDD root info.
		#
		nawk <$dest >/tmp/s.$$ '
		/^\* Begin MDD root info \(do not edit\)/ {
				mdinfo=1
			}
		/^\* End MDD root info \(do not edit\)/ {
				mdinfo=0
			}
		/^forceload/ {
				if (mdinfo == 0) {
					print $0
				}
				next
			}
		/.*/	{ print $0 }
		'
                cp /tmp/s.$$ $dest
                rm -f /tmp/s.$$

		#
		# Priority paging has been EOL'ed. Comment-out any lines
		# referencing priority paging tunables, and add explanatory
		# comment. Doing this would avoid the confusion which could
		# occur, if we were to just silently delete these lines.
		# 
		egrep "^[ 	]*set[ 	]+priority_paging" $dest> /dev/null 2>&1
		s1=$?
		egrep "^[ 	]*set[ 	]+cachefree" $dest > /dev/null 2>&1
		s2=$?
		if [ $s1 = 0 -o $s2 = 0 ]; then
			eolpp_write_sed_script;
			sed -f /tmp/eolpp.sed.scr.$$ $dest > /tmp/s.$$;
			if [ $? = 0 ]; then
				eolpp_echo_warning $dest;
				cp /tmp/s.$$ $dest;
			fi
			rm -f /tmp/s.$$;
			rm -f /tmp/eolpp.sed.scr.$$;
		fi

		# Comment out obsolete System V IPC Tunables
		eolipc $dest

		#
		# determine whether existing etc/system file is based on
		# the same one being installed.  If so, no need to update it.
		#
		newrev=`sed -n 's/^.*\(@(#)system.*\)\".*/\1/p' $src`
		oldrev=`sed -n 's/^.*\(@(#)system.*\)\".*/\1/p' $dest`
		if [ "$oldrev" != "$newrev" ] ; then
			#
			# existing /etc/system file is based on a different
			# original installed version of etc/system.  Determine
			# whether it has been modified by looking for non-blank,
			# non-comment lines in the file.  If it has been
			# modified, preserve it and install the new one as
			# /etc/system.new.
			#
			egrep -v '(^[ 	]*$)|(^\*)' $dest >/dev/null 2>&1
			if [ $? = 0 ] ; then
				realdest=`expr $dest : "/a\(.*\)"`
				if [ "$realdest" = "" ] ; then
					realdest=$dest
				fi
				cp $src $dest.${TAG}
				#
				# Checking for the existance of "rootfs:cachefs" from
				# an AutoClient installation in the existing /etc/system.
				# Transfer it to /etc/system.new if it does.
				#
				grep 'rootfs:cachefs' $dest > /dev/null 2>&1
				if [ $? = 0 ] ; then
					grep 'rootfs:cachefs' $dest >> $dest.${TAG}
				fi
				echo "EXISTING_FILE_PRESERVED: ${realdest} ${realdest}.${TAG}" \
					>> ${CLEANUP_FILE}
			else

				# existing file hasn't been modified, so
				# install over it.

				cp $src $dest
			fi
		fi
	fi
done
exit 0
