summaryrefslogtreecommitdiff
path: root/usr/src/pkgdefs/SUNWscmu/preremove
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/pkgdefs/SUNWscmu/preremove')
-rw-r--r--usr/src/pkgdefs/SUNWscmu/preremove148
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