OpenSolaris_b135/pkgdefs/SUNWscmu/preremove

#!/bin/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 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#

#
# Set path
#
PATH="/usr/bin:/usr/sbin:${PATH}"
export PATH

#
# Set variables
#
DEVLINKTB="${PKG_INSTALL_ROOT}/etc/devlink.tab"
FAILURE=1
NAMEMAJOR="${PKG_INSTALL_ROOT}/etc/name_to_major"
PKG_INSTALL_ROOT=${PKG_INSTALL_ROOT:=/}
# reconfig order
CFGMODULES="nskern ncall nsctl sdbc"
# reverse dependency order
RMODULES="sdbc nsctl ncall nskern"
TMP=/tmp/${PKGINST}.$$
TMPFILE="/tmp/file.$$"
DSCFG_UPGRADE="${PKG_INSTALL_ROOT}/var/svc/profile/dscfg_upgrade"
SVC=nws_scm
FS_LOCAL_SVC="svc:/system/filesystem/local"

#
# Set alternate command syntax (if needed)
#

if [ "${PKG_INSTALL_ROOT}" = "/" ]; then
    REM_DRV="rem_drv"
else
    REM_DRV="rem_drv -b ${PKG_INSTALL_ROOT}"
fi

#
# Functions
#

# rem_devlink - remove entry from ${DEVLINKTB}
rem_devlink()
{
    PATTERN="$1"
    grep -vw $PATTERN ${DEVLINKTB} > ${TMP}.devlink
    if [ $? -eq 0 ]; then
	mv ${TMP}.devlink ${DEVLINKTB}
    else
	rm ${TMP}.devlink
    fi
}

# reconfig modules, to prevent error caused from manual unload
# This is workaround for 6255461

if [ "$WORKAROUND_6255461" = "1" ]; then
	for MDL in ${CFGMODULES}
	do
		devfsadm -i ${MDL}
	done
fi

#
# Disable the service, if it is imported
#
if [ "${PKG_INSTALL_ROOT:-/}" = "/" ]; then
     if [ -x /usr/bin/svcprop ]; then
	svcprop -q -p general/entity_stability svc:/system/${SVC}
# are we imported?
	if [ $? -eq 0 ]; then
		svcadm disable -s svc:/system/${SVC}
		svccfg -s $FS_LOCAL_SVC setprop ${SVC}-local-fs/grouping=optional_all
	fi
     fi
fi


#
# Remove modules.
#

for MODULE in ${RMODULES}
do
	ERRLOG=/tmp/${MODULE}.prermlog
	REMOVERR="ERROR: The removal cannot be completed due to an error \
	removing the ${MODULE} loadable module.  The file ${ERRLOG} \
	contains the errors. Exiting..."

	if grep -w ${MODULE} ${NAMEMAJOR} >/dev/null; then
	    ${REM_DRV} ${MODULE} > ${ERRLOG} 2>&1
	    [ $? -ne 0 ] && {
		message ${REMOVERR}
		exit ${FAILURE}
	    } 
	fi

	/usr/bin/rm -f ${PKG_INSTALL_ROOT}/dev/${MODULE} 
	/usr/bin/rm -f $DSCFG_UPGRADE
	rem_devlink ${MODULE}
	/usr/bin/rm -f ${ERRLOG}

	if [ "${PKG_INSTALL_ROOT:-/}" = "/" ]; then
 	MODID=`modinfo | grep -w $MODULE | awk '{print $1}'`
 	if [ -n "$MODID" ]
 	then
 		modunload -i ${MODID}
 		if [ $? -ne 0 ]
 		then
 			echo "Error: Failed to unload $MODULE module."
 			exit 1
 		fi
 	fi
 	fi

done

# Since spuni is not configured via add_drv, we cannot rely on rem_drv to
# unload it.  If it's still loaded, try to unload it.
if [ "${PKG_INSTALL_ROOT:-/}" = "/" ]; then
MODID=`modinfo | grep -w spuni | awk '{print $1}'`
if [ -n "$MODID" ]
then
	modunload -i ${MODID}
	if [ $? -ne 0 ]
	then
		echo "Warning: Failed to unload spuni module."
		exit 1
	fi
fi
fi

# ignore any failures to modunload spuni 
exit 0