OpenSolaris_b135/pkgdefs/SUNWos86r/postinstall

#!/sbin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (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 2010 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

#
# postinstall script for SUNWos86r package.
#
	
# check_add_drv() checks if the module has an entry in
# etc/name_to_major.  If not, it simply calls add_drv with the arguments
# given. If there is such an entry in name_to_major file, it adds
# entries in driver_aliases driver_classes and minor_perm if necessary.
# The syntax of this function is the same as add_drv.

check_add_drv()
{
	basedir=/
	alias=""
	class=""
	ADD_ALIAS=0
	ADD_CLASS=0
	ADD_MINOR=0
	OPTIND=1
	IS_NET_DRIVER=0

	cmd="add_drv"

	while getopts i:b:m:c:n  opt
	do
		case $opt in
			i )	ADD_ALIAS=1	
				alias=$OPTARG
				cmd=$cmd" -i '$alias'"
				;;
			m )	ADD_MINOR=1
				minor=$OPTARG
				cmd=$cmd" -m '$minor'"
				;;
			c)	ADD_CLASS=1
				class=$OPTARG
				cmd=$cmd" -c $class"
				;;
			b)	basedir=$OPTARG
				cmd=$cmd" -b $basedir"
				;;
			n)	IS_NET_DRIVER=1
				;;
			\?) 	echo "check_add_drv can not handle this option"
				return
				;;
			esac
	done 
	shift `/usr/bin/expr $OPTIND - 1`
	
	drvname=$1

	cmd=$cmd" "$drvname

	drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`

	/usr/bin/grep "^$drvname[ 	]" $basedir/etc/name_to_major >  /dev/null 2>&1

	if [ $? -ne 0 ] 
	then
		eval $cmd
	else	
		# entry already in name_to_major, add alias, class, minorperm
		# if necessary
		if [ $ADD_ALIAS = 1 ]	
		then
			for i in $alias
			do
				/usr/bin/egrep "^$drvname[ 	]+$i" $basedir/etc/driver_aliases>/dev/null 2>&1
				if [ $? -ne 0 ]
				then
					echo "$drvname $i" >> $basedir/etc/driver_aliases	
				fi
			done
		fi

		if [ $ADD_CLASS = 1 ]
		then
			/usr/bin/egrep "^$drvname[ 	]+$class( |	|$)" $basedir/etc/driver_classes > /dev/null 2>&1
			if [ $? -ne 0 ]
			then 
				echo "$drvname\t$class" >> $basedir/etc/driver_classes
			fi
		fi

		if [ $ADD_MINOR = 1 ]
		then
			/usr/bin/grep "^$drvname:" $basedir/etc/minor_perm > /dev/null 2>&1
			if [ $? -ne 0 ]
			then 
				minorentry="$drvname:$minor"
				echo $minorentry >> $basedir/etc/minor_perm
			fi
		fi

	fi

	# The following clone device/dev is needed for Custom Jumpstart

	if [ $IS_NET_DRIVER -eq 1 ]
	then
		CLONE_DEVICE=devices/pseudo/clone@0:$drvname
		set `/usr/bin/grep "^clone[ 	]" $basedir/etc/name_to_major`
		CLONE_MAJ=$2
		set `/usr/bin/grep "^$drvname[ 	]" $basedir/etc/name_to_major`
		DRIVER_MAJ=$2
		mknod $basedir/$CLONE_DEVICE c $CLONE_MAJ $DRIVER_MAJ
		chmod 600 $basedir/$CLONE_DEVICE
		chgrp sys $basedir/$CLONE_DEVICE
		chown root $basedir/$CLONE_DEVICE
		ln -s ../$CLONE_DEVICE $basedir/dev/$drvname
	fi
	
}


# check_rem_drv() checks if the module has an entry in
# etc/name_to_major.  If so, it simply calls rem_drv with the arguments
# given to remove the driver from the system.  The syntax of this
# function is the same as rem_drv.

check_rem_drv()
{
	basedir=/
	OPTIND=1

	cmd="rem_drv"

	while getopts b: opt
	do
		case $opt in
			b)	basedir=$OPTARG
				cmd=$cmd" -b $basedir"
				;;
			\?) 	echo "check_rem_drv can not handle this option"
				return
				;;
			esac
	done 
	shift `/usr/bin/expr $OPTIND - 1`
	
	drvname=$1

	cmd=$cmd" "$drvname

	drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`

	/usr/bin/grep "^$drvname[ 	]" $basedir/etc/name_to_major >  /dev/null 2>&1

	if [ $? -eq 0 ] 
	then
		eval $cmd
	fi
}


# Platform-specific drivers
case "${ARCH}" in
i386)
	check_add_drv -b "${BASEDIR}" \
		-i '"pci1011,2" "pci1011,9" "pci1011,14" "pci1011,19"
		"pci1109,1400" "pci1109,2400" "pci10b8,2001" "pci2646,1"' \
		dnet
	check_add_drv -b "${BASEDIR}" \
		-i '"pci1022,2000" "pci103c,104c"' \
		pcn
	check_add_drv -b "${BASEDIR}" \
		-i '"pci1011,21" "pci1014,22"' \
		pci_pci
	check_add_drv -b "${BASEDIR}" \
		-c scsi \
		-i '"pci1000,1" "pci1000,2" "pci1000,3" "pci1000,4"
		"pci1000,6" "pci1000,c" "pci1000,f" "pci1000,8f" ' \
		ncrs
	check_add_drv -b "${BASEDIR}" \
		-i '"pci8086,1029" "pci8086,1229"
		"pci8086,1229.8086.1"    "pci8086,1229.8086.2"
		"pci8086,1229.8086.3"    "pci8086,1229.8086.4"
		"pci8086,1229.8086.5"    "pci8086,1229.8086.6"
		"pci8086,1229.8086.7"    "pci8086,1229.8086.8"
		"pci8086,1229.8086.9"    "pci8086,1229.8086.a"
		"pci8086,1229.8086.b"    "pci8086,1229.8086.c"
		"pci8086,1229.8086.d"    "pci8086,1229.8086.e"
		"pci8086,1229.8086.f"    "pci8086,1229.8086.10"
		"pci8086,1229.8086.11"   "pci8086,1229.8086.12"
		"pci8086,1229.8086.13"   "pci8086,1229.8086.30"
		"pci8086,1229.8086.31"   "pci8086,1229.8086.40"
		"pci8086,1229.8086.41"   "pci8086,1229.8086.42"
		"pci8086,1229.8086.50"   "pci8086,1229.8086.1009"
		"pci8086,1229.8086.100c" "pci8086,1229.8086.1012"
		"pci8086,1229.8086.1013" "pci8086,1229.8086.1015"
		"pci8086,1229.8086.1016" "pci8086,1229.8086.1017"
		"pci8086,1229.8086.1030" "pci8086,1229.8086.1040"
		"pci8086,1229.8086.1041" "pci8086,1229.8086.1042"
		"pci8086,1229.8086.1050" "pci8086,1229.8086.1051"
		"pci8086,1229.8086.1052" "pci8086,1229.8086.10f0"
		"pci8086,1229.8086.1229" "pci8086,1229.8086.2009"
		"pci8086,1229.8086.200d" "pci8086,1229.8086.200e"
		"pci8086,1229.8086.200f" "pci8086,1229.8086.2010"
		"pci8086,1229.8086.2013" "pci8086,1229.8086.2016"
		"pci8086,1229.8086.2017" "pci8086,1229.8086.2018"
		"pci8086,1229.8086.2019" "pci8086,1229.8086.2101"
		"pci8086,1229.8086.2102" "pci8086,1229.8086.2103"
		"pci8086,1229.8086.2104" "pci8086,1229.8086.2105"
		"pci8086,1229.8086.2106" "pci8086,1229.8086.2107"
		"pci8086,1229.8086.2108" "pci8086,1229.8086.2200"
		"pci8086,1229.8086.2201" "pci8086,1229.8086.2202"
		"pci8086,1229.8086.2203" "pci8086,1229.8086.2204"
		"pci8086,1229.8086.2205" "pci8086,1229.8086.2206"
		"pci8086,1229.8086.2207" "pci8086,1229.8086.2208"
		"pci8086,1229.8086.2402" "pci8086,1229.8086.2407"
		"pci8086,1229.8086.2408" "pci8086,1229.8086.2409"
		"pci8086,1229.8086.240f" "pci8086,1229.8086.2410"
		"pci8086,1229.8086.2411" "pci8086,1229.8086.2412"
		"pci8086,1229.8086.2413" "pci8086,1229.8086.3000"
		"pci8086,1229.8086.3001" "pci8086,1229.8086.3002"
		"pci8086,1229.8086.3006" "pci8086,1229.8086.3007"
		"pci8086,1229.8086.3008" "pci8086,1229.8086.3010"
		"pci8086,1229.8086.3011" "pci8086,1229.8086.3012"
		"pci8086,1229.8086.301a" "pci8086,1229.8086.3411"
		"pci8086,1030" "pci8086,1031" "pci8086,1032" "pci8086,1038"
		"pci8086,1039" "pci8086,103d" "pci8086,1050" "pci8086,1059"
		"pci8086,103d.8086.103d" "pci8086,1050.8086.3020"
		"pci8086,1050.8086.302f" "pci8086,1050.8086.3427"
		"pci8086,1068" "pci8086,1069" "pci8086,1092" "pci8086,1209"
		"pci8086,2449" "pci8086,27dc"
		"pci8086,2449.8086.3010" "pci8086,2449.8086.3011"
		"pci8086,2449.8086.3012" "pci8086,2449.8086.3013"
		"pci8086,2449.8086.3014" "pci8086,2449.8086.3015"
		"pci8086,2449.8086.3016" "pci8086,2449.8086.3017"
		"pci8086,2449.8086.3018" "pci8086,27dc.8086.308d"' \
		iprb
	check_add_drv -b "${BASEDIR}" \
		-i '"pci10b8,5"' \
		spwr

	# The sd driver should be installed to the system before rcs9.sh
	# is called.
	check_add_drv -b "${BASEDIR}" \
		-m '* 0640 root sys' \
		-i '"scsiclass,00" "scsiclass,05"' \
		sd
	
	# Call the rcs9.sh script to update necessary files in case of upgrade
	# for the PCI physical device pathname change from 2.4.
	#
	# Also used to preserve escd.rf (devconf configuration information)
	# saved on floppy during an install boot.
	#

	if [ -s /tmp/diskette_rc.d/rcs9.sh ] 
	then
		/sbin/sh /tmp/diskette_rc.d/rcs9.sh "post"
	fi
	
	#
	# If there is no data in OWconfig, remove it.
	#
	OWC=/etc/openwin/server/etc/OWconfig
	removef $PKGINST $OWC |\
	while read pathname
	do
		if [ ! -s $pathname ]; then 
			echo Removing empty `basename $pathname`
			rm -f $pathname
		fi
	done	
	removef -f $PKGINST

	;;
esac

# Remove erroneous entry for Symbios Logic 53c875/95 (ncrs)
TMPFILE=/tmp/ncrs_tmp
sed -e '/^ncrs "pci1000,1000"$/d' ${BASEDIR}/etc/driver_aliases >$TMPFILE
cp $TMPFILE ${BASEDIR}/etc/driver_aliases

exit 0