postinstall 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 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
#
#
# 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
}
#
# Update entries in the /etc/driver_classes for drivers which change
# from class "scsi" to class "dada".
#
drvclasses_updates()
{
nawk "
BEGIN {
# Drivers in class "dada"
drv[\"chs\"] = 1
}
/^#/ || /^$/ {
print
next
}
# Advertise the direct-attach drivers as class "dada"
drv[\$1] > 0 {
\$2 = \"dada\"
}
{ printf \"%s\t%s\n\", \$1, \$2 }" ${BASEDIR}/etc/driver_classes > /tmp/d.$$
cp /tmp/d.$$ ${BASEDIR}/etc/driver_classes
rm /tmp/d.$$
}
# Platform-specific drivers
case "${ARCH}" in
i386)
drvclasses_updates
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 \
'"pci10b7,9000" "pci10b7,9001" "pci10b7,9004" "pci10b7,9005" "pci10b7,9006" "pci10b7,9050" "pci10b7,9051" "pci10b7,9055" "pci10b7,9056" "pci10b7,9200" "pci10b7,9800" "pci10b7,9805"' \
elxl
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 dada -i '"pci1014,2e"' \
chs
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.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,1030" "pci8086,1031" "pci8086,1032" "pci8086,1038" "pci8086,1039" "pci8086,103d" "pci8086,2449"' \
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"' \
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