xref: /titanic_41/usr/src/cmd/svc/milestone/fs-usr (revision 6a634c9dca3093f3922e4b7ab826d7bdf17bf78e)
17c478bd9Sstevel@tonic-gate#!/sbin/sh
27c478bd9Sstevel@tonic-gate#
37c478bd9Sstevel@tonic-gate# CDDL HEADER START
47c478bd9Sstevel@tonic-gate#
57c478bd9Sstevel@tonic-gate# The contents of this file are subject to the terms of the
66927f468Sdp# Common Development and Distribution License (the "License").
76927f468Sdp# You may not use this file except in compliance with the License.
87c478bd9Sstevel@tonic-gate#
97c478bd9Sstevel@tonic-gate# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate# or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate# See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate# and limitations under the License.
137c478bd9Sstevel@tonic-gate#
147c478bd9Sstevel@tonic-gate# When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate# If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate# fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate# information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate#
207c478bd9Sstevel@tonic-gate# CDDL HEADER END
217c478bd9Sstevel@tonic-gate#
227c478bd9Sstevel@tonic-gate#
23abcc7ef9SGangadhar Mylapuram# Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
247c478bd9Sstevel@tonic-gate#
257c478bd9Sstevel@tonic-gate# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T.
267c478bd9Sstevel@tonic-gate# All rights reserved.
277c478bd9Sstevel@tonic-gate#
287c478bd9Sstevel@tonic-gate#
297c478bd9Sstevel@tonic-gate. /lib/svc/share/smf_include.sh
307c478bd9Sstevel@tonic-gate. /lib/svc/share/fs_include.sh
317c478bd9Sstevel@tonic-gate
323b133becSGangadhar MylapuramUPDATEFILE=/etc/svc/volatile/boot_archive_needs_update
333b133becSGangadhar Mylapuram
347c478bd9Sstevel@tonic-gate#
35e7cbe64fSgw25295# Once root is read/write we can enable the dedicated dumpdevice if it exists
36e7cbe64fSgw25295# locally. This is an optimization as svc-dumpadm will attempt do this later.
377c478bd9Sstevel@tonic-gate#
38e7cbe64fSgw25295dump_setup()
39e7cbe64fSgw25295{
40e7cbe64fSgw25295	[ -r /etc/dumpadm.conf ] && . /etc/dumpadm.conf
41e7cbe64fSgw25295
42e7cbe64fSgw25295	readswapdev $DUMPADM_DEVICE < $vfstab
43e7cbe64fSgw25295
44e7cbe64fSgw25295	#
4559bc618eSgw25295	# Make sure that the dump save area has been configured before
4659bc618eSgw25295	# proceeding. If the variable has not been defined or does not exist
4759bc618eSgw25295	# then bail out early. This will prevent us from configuring a
4859bc618eSgw25295	# dump save area before a hostname has been configured (i.e after
4959bc618eSgw25295	# sys-unconfig has been invoked).
5059bc618eSgw25295	#
5159bc618eSgw25295	[ -z "$DUMPADM_SAVDIR" ] && return
5259bc618eSgw25295
5359bc618eSgw25295	#
54e7cbe64fSgw25295	# If we have a dedicated dump device, then go ahead and configure it.
55e7cbe64fSgw25295	#
56e7cbe64fSgw25295	if [ "x$special" != "x$DUMPADM_DEVICE" ]; then
57e7cbe64fSgw25295		if [ -x /usr/sbin/dumpadm -a -b $DUMPADM_DEVICE ]; then
58e7cbe64fSgw25295			/usr/sbin/dumpadm -u || exit $SMF_EXIT_ERR_CONFIG
59e7cbe64fSgw25295		fi
60e7cbe64fSgw25295	fi
61e7cbe64fSgw25295}
627c478bd9Sstevel@tonic-gate
63*f6e214c7SGavin Maltby#
64*f6e214c7SGavin Maltby# Write a unique id into this kernel image; this will be included
65*f6e214c7SGavin Maltby# in the dump header and panicbuf of any crashdump of this image.
66*f6e214c7SGavin Maltby#
67*f6e214c7SGavin Maltbyif [ -x /usr/sbin/dumpadm ]; then
68*f6e214c7SGavin Maltby	/usr/sbin/dumpadm -i
69*f6e214c7SGavin Maltbyfi
70*f6e214c7SGavin Maltby
71a227b7f4Shs24103rootiszfs=0
72a227b7f4Shs24103# get the fstype of root
73a227b7f4Shs24103readmnttab / </etc/mnttab
74a227b7f4Shs24103if [ "$fstype" = zfs ] ; then
75a227b7f4Shs24103	rootiszfs=1
76e7cbe64fSgw25295	dump_setup
77a227b7f4Shs24103fi
78a227b7f4Shs24103
797c478bd9Sstevel@tonic-gate#
80e7cbe64fSgw25295# Add physical swap.
81e7cbe64fSgw25295#
82e7cbe64fSgw25295/sbin/swapadd -1
83e7cbe64fSgw25295
84e7cbe64fSgw25295#
857c478bd9Sstevel@tonic-gate# Check and remount the / (root) file system.
867c478bd9Sstevel@tonic-gate# For NFS mounts, force the llock option on.
877c478bd9Sstevel@tonic-gate#
88a227b7f4Shs24103if smf_is_globalzone && [ $rootiszfs = 0 ]; then
897c478bd9Sstevel@tonic-gate	readvfstab / < $vfstab
907c478bd9Sstevel@tonic-gate	checkfs $fsckdev $fstype $mountp || exit $SMF_EXIT_ERR_FATAL
917c478bd9Sstevel@tonic-gate	checkopt "llock" $mntopts
927c478bd9Sstevel@tonic-gate	mntopts='remount'
937c478bd9Sstevel@tonic-gate
947c478bd9Sstevel@tonic-gate	[ -n "$otherops" ] && mntopts="${mntopts},${otherops}"
957c478bd9Sstevel@tonic-gate	[ "$fstype" = nfs ] && mntopts="${mntopts},llock"
967c478bd9Sstevel@tonic-gate
977c478bd9Sstevel@tonic-gate	# if root dev is a read-only metadevice then fail
987c478bd9Sstevel@tonic-gate	case $special in
997c478bd9Sstevel@tonic-gate	/dev/md/dsk/*)
1007c478bd9Sstevel@tonic-gate		dd if=/dev/null of=$special count=0 >/dev/null 2>&1 ||
1017c478bd9Sstevel@tonic-gate		    exit $SMF_EXIT_ERR_FATAL
1027c478bd9Sstevel@tonic-gate		;;
1037c478bd9Sstevel@tonic-gate	esac
1047c478bd9Sstevel@tonic-gate
1057c478bd9Sstevel@tonic-gate	mountfs -m $mountp $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL
1067c478bd9Sstevel@tonic-gatefi
1077c478bd9Sstevel@tonic-gate
1087c478bd9Sstevel@tonic-gate#
1097c478bd9Sstevel@tonic-gate# Check and remount the /usr file system (formerly mounted read-only).
110a227b7f4Shs24103# Unless root is zfs, in which case we've already mounted /usr read-write
1117c478bd9Sstevel@tonic-gate#
112a227b7f4Shs24103if [ "$rootiszfs" = 0 ] ; then
1137c478bd9Sstevel@tonic-gate	readvfstab /usr < $vfstab
1147c478bd9Sstevel@tonic-gate	if [ "$mountp" ]; then
1157c478bd9Sstevel@tonic-gate		if [ "$fstype" = cachefs ]; then
1167c478bd9Sstevel@tonic-gate			mountfs -O $mountp cachefs $mntopts $special ||
1177c478bd9Sstevel@tonic-gate			    exit $SMF_EXIT_ERR_FATAL
1187c478bd9Sstevel@tonic-gate		else
1197c478bd9Sstevel@tonic-gate			checkopt ro $mntopts
1207c478bd9Sstevel@tonic-gate			if [ "x$option" != xro ]; then
1217c478bd9Sstevel@tonic-gate				checkfs $fsckdev $fstype $mountp ||
1227c478bd9Sstevel@tonic-gate				    exit $SMF_EXIT_ERR_FATAL
1237c478bd9Sstevel@tonic-gate				if [ "x$mntopts" != x- ]; then
1247c478bd9Sstevel@tonic-gate					mntopts="remount,$mntopts"
1257c478bd9Sstevel@tonic-gate				else
1267c478bd9Sstevel@tonic-gate					mntopts="remount"
1277c478bd9Sstevel@tonic-gate				fi
1287c478bd9Sstevel@tonic-gate
1297c478bd9Sstevel@tonic-gate				# if usr dev is a read-only metadevice then fail
1307c478bd9Sstevel@tonic-gate				case $special in
1317c478bd9Sstevel@tonic-gate				/dev/md/dsk/*)
1327c478bd9Sstevel@tonic-gate					dd if=/dev/null of=$special count=0 \
1337c478bd9Sstevel@tonic-gate					    >/dev/null 2>&1 || exit $SMF_EXIT_ERR_FATAL
1347c478bd9Sstevel@tonic-gate					;;
1357c478bd9Sstevel@tonic-gate				esac
1367c478bd9Sstevel@tonic-gate
1377c478bd9Sstevel@tonic-gate				mountfs - /usr $fstype $mntopts - ||
1387c478bd9Sstevel@tonic-gate				    exit $SMF_EXIT_ERR_FATAL
1397c478bd9Sstevel@tonic-gate			fi
1407c478bd9Sstevel@tonic-gate		fi
1417c478bd9Sstevel@tonic-gate	fi
142a227b7f4Shs24103fi
1437c478bd9Sstevel@tonic-gate
1447c478bd9Sstevel@tonic-gate#
1457c478bd9Sstevel@tonic-gate# Check and mount the /usr/platform file system.  This should only be
1467c478bd9Sstevel@tonic-gate# present when a SunOS 5.5 (Solaris 2.5) or greater client is being
1477c478bd9Sstevel@tonic-gate# administered by a SunOS 5.4 or less host.
1487c478bd9Sstevel@tonic-gate#
1497c478bd9Sstevel@tonic-gatereadvfstab /usr/platform < $vfstab
1507c478bd9Sstevel@tonic-gateif [ "$mountp" ]; then
1517c478bd9Sstevel@tonic-gate	checkfs $fsckdev $fstype $mountp || exit $SMF_EXIT_ERR_FATAL
1527c478bd9Sstevel@tonic-gate	mountfs - $mountp $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL
1537c478bd9Sstevel@tonic-gatefi
1547c478bd9Sstevel@tonic-gate
1557c478bd9Sstevel@tonic-gate#
1567c478bd9Sstevel@tonic-gate# Mount the fd file systems if mount point exists.
1577c478bd9Sstevel@tonic-gate#
1587c478bd9Sstevel@tonic-gatereadvfstab /dev/fd < $vfstab
1597c478bd9Sstevel@tonic-gateif [ "$mountp" -a -d /dev/fd ]; then
1607c478bd9Sstevel@tonic-gate	mountfs - /dev/fd - - - || exit $SMF_EXIT_ERR_FATAL
1617c478bd9Sstevel@tonic-gatefi
1627c478bd9Sstevel@tonic-gate
1633b133becSGangadhar Mylapuramif [ -f "${UPDATEFILE}" ]; then
1643b133becSGangadhar Mylapuram	/usr/sbin/bootadm update-archive
1653b133becSGangadhar Mylapuram	if [ $? != 0 ]; then
1663b133becSGangadhar Mylapuram		cecho ""
1673b133becSGangadhar Mylapuram		cecho "WARNING: Automatic update of the boot archive failed."
16829db4766SGangadhar Mylapuram		cecho "Update the archives using 'bootadm update-archive'"
1693b133becSGangadhar Mylapuram		cecho "command and then reboot the system from the same device that"
1703b133becSGangadhar Mylapuram		cecho "was previously booted."
1713b133becSGangadhar Mylapuram		cecho ""
1723b133becSGangadhar Mylapuram		exit $SMF_EXIT_ERR_FATAL
1733b133becSGangadhar Mylapuram	fi
1743b133becSGangadhar Mylapuram	rm -f $UPDATEFILE
1753b133becSGangadhar Mylapuram	bootcmd=`/usr/sbin/eeprom bootcmd | /usr/bin/sed -e 's#bootcmd=##g'`
1763b133becSGangadhar Mylapuram	if [ `uname -p` = "i386" ]; then
1773b133becSGangadhar Mylapuram		/usr/sbin/reboot -f dryrun
1783b133becSGangadhar Mylapuram		if [ $? = 0 ]; then
1793b133becSGangadhar Mylapuram			/usr/sbin/reboot -f -- "$bootcmd"
1803b133becSGangadhar Mylapuram			exit $SMF_EXIT_OK
1813b133becSGangadhar Mylapuram		fi
182abcc7ef9SGangadhar Mylapuram		boot_prop=`/usr/sbin/svccfg -s svc:/system/boot-config:default listprop config/auto-reboot-safe | \
1833b133becSGangadhar Mylapuram			/usr/bin/nawk '{ print $3}'`
1843b133becSGangadhar Mylapuram		if [ "$boot_prop" != "true" ]; then
1853b133becSGangadhar Mylapuram			cecho ""
1863b133becSGangadhar Mylapuram			cecho "WARNING: Reboot required."
1873b133becSGangadhar Mylapuram			cecho "The system has updated the cache of files (boot archive) that is used"
1883b133becSGangadhar Mylapuram			cecho "during the early boot sequence. To avoid booting and running the system"
1893b133becSGangadhar Mylapuram			cecho "with the previously out-of-sync version of these files, reboot the"
1903b133becSGangadhar Mylapuram			cecho "system from the same device that was previously booted."
1913b133becSGangadhar Mylapuram			cecho ""
1923b133becSGangadhar Mylapuram			exit $SMF_EXIT_ERR_FATAL
1933b133becSGangadhar Mylapuram		else
1943b133becSGangadhar Mylapuram			/usr/sbin/reboot -p
1953b133becSGangadhar Mylapuram			exit $SMF_EXIT_OK
1963b133becSGangadhar Mylapuram		fi
1973b133becSGangadhar Mylapuram	fi
1983b133becSGangadhar Mylapuram	/usr/sbin/reboot -- "$bootcmd"
1993b133becSGangadhar Mylapuramfi
2003b133becSGangadhar Mylapuram
2017c478bd9Sstevel@tonic-gateexit $SMF_EXIT_OK
202