diff options
Diffstat (limited to 'usr/src/pkgdefs/SUNWscmu/preremove')
-rw-r--r-- | usr/src/pkgdefs/SUNWscmu/preremove | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/usr/src/pkgdefs/SUNWscmu/preremove b/usr/src/pkgdefs/SUNWscmu/preremove new file mode 100644 index 0000000000..a1f2e43b00 --- /dev/null +++ b/usr/src/pkgdefs/SUNWscmu/preremove @@ -0,0 +1,148 @@ +#!/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 +# +svcprop -q -p general/entity_stability svc:/system/${SVC} +# are we imported? +if [ $? = 0 ] +then + svcadm disable -s svc:/system/${SVC} + svccfg -s $FS_LOCAL_SVC setprop ${SVC}-local-fs/grouping=optional_all +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} + + MODID=`modinfo | grep -w $MODULE | awk '{print $1}'` + if [ -n "$MODID" ] + then + modunload -i ${MODID} + if [ $? != 0 ] + then + echo "Error: Failed to unload $MODULE module." + exit 1 + 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. +MODID=`modinfo | grep -w spuni | awk '{print $1}'` +if [ -n "$MODID" ] +then + modunload -i ${MODID} + if [ $? != 0 ] + then + echo "Warning: Failed to unload spuni module." + exit 1 + fi +fi + +# ignore any failures to modunload spuni +exit 0 |