view usr/src/cmd/svc/milestone/fs-usr @ 12979:ab9ae749152f

PSARC/2009/617 Software Events Notification Parameters CLI PSARC/2009/618 snmp-notify: SNMP Notification Daemon for Software Events PSARC/2009/619 smtp-notify: Email Notification Daemon for Software Events PSARC/2010/225 fmd for non-global Solaris zones PSARC/2010/226 Solaris Instance UUID PSARC/2010/227 nvlist_nvflag(3NVPAIR) PSARC/2010/228 libfmevent additions PSARC/2010/257 sysevent_evc_setpropnvl and sysevent_evc_getpropnvl PSARC/2010/265 FMRI and FMA Event Stabilty, 'ireport' category 1 event class, and the 'sw' FMRI scheme PSARC/2010/278 FMA/SMF integration: instance state transitions PSARC/2010/279 Modelling panics within FMA PSARC/2010/290 logadm.conf upgrade 6392476 fmdump needs to pretty-print 6393375 userland ereport/ireport event generation interfaces 6445732 Add email notification agent for FMA and software events 6804168 RFE: Allow an efficient means to monitor SMF services status changes 6866661 scf_values_destroy(3SCF) will segfault if is passed NULL 6884709 Add snmp notification agent for FMA and software events 6884712 Add private interface to tap into libfmd_msg macro expansion capabilities 6897919 fmd to run in a non-global zone 6897937 fmd use of non-private doors is not safe 6900081 add a UUID to Solaris kernel image for use in crashdump identification 6914884 model panic events as a defect diagnosis in FMA 6944862 fmd_case_open_uuid, fmd_case_uuisresolved, fmd_nvl_create_defect 6944866 log legacy sysevents in fmd 6944867 enumerate svc scheme in topo 6944868 software-diagnosis and software-response fmd modules 6944870 model SMF maintenance state as a defect diagnosis in FMA 6944876 savecore runs in foreground for systems with zfs root and dedicated dump 6965796 Implement notification parameters for SMF state transitions and FMA events 6968287 SUN-FM-MIB.mib needs to be updated to reflect Oracle information 6972331 logadm.conf upgrade PSARC/2010/290
author Gavin Maltby <gavin.maltby@oracle.com>
date Fri, 30 Jul 2010 17:04:17 +1000
parents d02d5fce297f
children
line wrap: on
line source

#!/sbin/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 (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
#
# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T.
# All rights reserved.
#
#
. /lib/svc/share/smf_include.sh
. /lib/svc/share/fs_include.sh

UPDATEFILE=/etc/svc/volatile/boot_archive_needs_update

#
# Once root is read/write we can enable the dedicated dumpdevice if it exists
# locally. This is an optimization as svc-dumpadm will attempt do this later.
#
dump_setup()
{
	[ -r /etc/dumpadm.conf ] && . /etc/dumpadm.conf

	readswapdev $DUMPADM_DEVICE < $vfstab

	#
	# Make sure that the dump save area has been configured before
	# proceeding. If the variable has not been defined or does not exist
	# then bail out early. This will prevent us from configuring a
	# dump save area before a hostname has been configured (i.e after
	# sys-unconfig has been invoked).
	#
	[ -z "$DUMPADM_SAVDIR" ] && return

	#
	# If we have a dedicated dump device, then go ahead and configure it.
	# 
	if [ "x$special" != "x$DUMPADM_DEVICE" ]; then
		if [ -x /usr/sbin/dumpadm -a -b $DUMPADM_DEVICE ]; then
			/usr/sbin/dumpadm -u || exit $SMF_EXIT_ERR_CONFIG
		fi
	fi
}

#
# Write a unique id into this kernel image; this will be included
# in the dump header and panicbuf of any crashdump of this image.
#
if [ -x /usr/sbin/dumpadm ]; then
	/usr/sbin/dumpadm -i
fi

rootiszfs=0
# get the fstype of root
readmnttab / </etc/mnttab
if [ "$fstype" = zfs ] ; then
	rootiszfs=1
	dump_setup
fi

#
# Add physical swap.
#
/sbin/swapadd -1

#
# Check and remount the / (root) file system.
# For NFS mounts, force the llock option on.
#
if smf_is_globalzone && [ $rootiszfs = 0 ]; then
	readvfstab / < $vfstab
	checkfs $fsckdev $fstype $mountp || exit $SMF_EXIT_ERR_FATAL
	checkopt "llock" $mntopts
	mntopts='remount'

	[ -n "$otherops" ] && mntopts="${mntopts},${otherops}"
	[ "$fstype" = nfs ] && mntopts="${mntopts},llock"

	# if root dev is a read-only metadevice then fail
	case $special in
	/dev/md/dsk/*)
		dd if=/dev/null of=$special count=0 >/dev/null 2>&1 ||
		    exit $SMF_EXIT_ERR_FATAL
		;;
	esac

	mountfs -m $mountp $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL
fi

#
# Check and remount the /usr file system (formerly mounted read-only).
# Unless root is zfs, in which case we've already mounted /usr read-write
#
if [ "$rootiszfs" = 0 ] ; then
	readvfstab /usr < $vfstab
	if [ "$mountp" ]; then
		if [ "$fstype" = cachefs ]; then
			mountfs -O $mountp cachefs $mntopts $special ||
			    exit $SMF_EXIT_ERR_FATAL
		else
			checkopt ro $mntopts
			if [ "x$option" != xro ]; then
				checkfs $fsckdev $fstype $mountp ||
				    exit $SMF_EXIT_ERR_FATAL
				if [ "x$mntopts" != x- ]; then
					mntopts="remount,$mntopts"
				else
					mntopts="remount"
				fi

				# if usr dev is a read-only metadevice then fail
				case $special in
				/dev/md/dsk/*)
					dd if=/dev/null of=$special count=0 \
					    >/dev/null 2>&1 || exit $SMF_EXIT_ERR_FATAL
					;;
				esac

				mountfs - /usr $fstype $mntopts - ||
				    exit $SMF_EXIT_ERR_FATAL
			fi
		fi
	fi
fi

#
# Check and mount the /usr/platform file system.  This should only be
# present when a SunOS 5.5 (Solaris 2.5) or greater client is being
# administered by a SunOS 5.4 or less host.
#
readvfstab /usr/platform < $vfstab
if [ "$mountp" ]; then
	checkfs $fsckdev $fstype $mountp || exit $SMF_EXIT_ERR_FATAL
	mountfs - $mountp $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL
fi

#
# Mount the fd file systems if mount point exists.
#
readvfstab /dev/fd < $vfstab
if [ "$mountp" -a -d /dev/fd ]; then
	mountfs - /dev/fd - - - || exit $SMF_EXIT_ERR_FATAL
fi

if [ -f "${UPDATEFILE}" ]; then
	/usr/sbin/bootadm update-archive
	if [ $? != 0 ]; then
		cecho ""
		cecho "WARNING: Automatic update of the boot archive failed."
		cecho "Update the archives using 'bootadm update-archive'"
		cecho "command and then reboot the system from the same device that"
		cecho "was previously booted." 
		cecho ""
		exit $SMF_EXIT_ERR_FATAL
	fi
	rm -f $UPDATEFILE
	bootcmd=`/usr/sbin/eeprom bootcmd | /usr/bin/sed -e 's#bootcmd=##g'`
	if [ `uname -p` = "i386" ]; then
		/usr/sbin/reboot -f dryrun
		if [ $? = 0 ]; then
			/usr/sbin/reboot -f -- "$bootcmd" 
			exit $SMF_EXIT_OK
		fi
		boot_prop=`/usr/sbin/svccfg -s svc:/system/boot-config:default listprop config/auto-reboot-safe | \
			/usr/bin/nawk '{ print $3}'`
		if [ "$boot_prop" != "true" ]; then 
			cecho ""
			cecho "WARNING: Reboot required."
			cecho "The system has updated the cache of files (boot archive) that is used"
			cecho "during the early boot sequence. To avoid booting and running the system"
			cecho "with the previously out-of-sync version of these files, reboot the"
			cecho "system from the same device that was previously booted."
			cecho ""
			exit $SMF_EXIT_ERR_FATAL
		else
			/usr/sbin/reboot -p 
			exit $SMF_EXIT_OK
		fi 
	fi
	/usr/sbin/reboot -- "$bootcmd"
fi

exit $SMF_EXIT_OK