#!/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