xref: /titanic_52/usr/src/cmd/svc/milestone/fs-usr (revision e373b6e444a487df89a5dc6a4a4030b5b2aa87f9)
1#!/sbin/sh
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22
23#
24# Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
25# Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T.
26# All rights reserved.
27# Copyright 2016 Nexenta Systems, Inc.
28#
29
30. /lib/svc/share/smf_include.sh
31. /lib/svc/share/fs_include.sh
32
33UPDATEFILE=/etc/svc/volatile/boot_archive_needs_update
34
35#
36# Once root is read/write we can enable the dedicated dumpdevice if it exists
37# locally. This is an optimization as svc-dumpadm will attempt do this later.
38#
39dump_setup()
40{
41	[ -r /etc/dumpadm.conf ] && . /etc/dumpadm.conf
42
43	readswapdev $DUMPADM_DEVICE < $vfstab
44
45	#
46	# Make sure that the dump save area has been configured before
47	# proceeding. If the variable has not been defined or does not exist
48	# then bail out early. This will prevent us from configuring a
49	# dump save area before a hostname has been configured (i.e after
50	# sys-unconfig has been invoked).
51	#
52	[ -z "$DUMPADM_SAVDIR" ] && return
53
54	#
55	# If we have a dedicated dump device, then go ahead and configure it.
56	#
57	if [ "x$special" != "x$DUMPADM_DEVICE" ]; then
58		if [ -x /usr/sbin/dumpadm -a -b $DUMPADM_DEVICE ]; then
59			/usr/sbin/dumpadm -u || exit $SMF_EXIT_ERR_CONFIG
60		fi
61	fi
62}
63
64#
65# Write a unique id into this kernel image; this will be included
66# in the dump header and panicbuf of any crashdump of this image.
67#
68if [ -x /usr/sbin/dumpadm ]; then
69	/usr/sbin/dumpadm -i
70fi
71
72rootiszfs=0
73# get the fstype of root
74readmnttab / </etc/mnttab
75if [ "$fstype" = zfs ] ; then
76	rootiszfs=1
77	dump_setup
78fi
79
80#
81# Add physical swap.
82#
83/sbin/swapadd -1
84
85#
86# Check and remount the / (root) file system.
87# For NFS mounts, force the llock option on.
88#
89if smf_is_globalzone && [ $rootiszfs = 0 ]; then
90	readvfstab / < $vfstab
91	checkfs $fsckdev $fstype $mountp || exit $SMF_EXIT_ERR_FATAL
92	checkopt "llock" $mntopts
93	mntopts='remount'
94
95	[ -n "$otherops" ] && mntopts="${mntopts},${otherops}"
96	[ "$fstype" = nfs ] && mntopts="${mntopts},llock"
97
98	mountfs -m $mountp $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL
99fi
100
101#
102# Check and remount the /usr file system (formerly mounted read-only).
103# Unless root is zfs, in which case we've already mounted /usr read-write
104#
105if [ "$rootiszfs" = 0 ] ; then
106	readvfstab /usr < $vfstab
107	if [ "$mountp" ]; then
108		checkopt ro $mntopts
109		if [ "x$option" != xro ]; then
110			checkfs $fsckdev $fstype $mountp ||
111			    exit $SMF_EXIT_ERR_FATAL
112			if [ "x$mntopts" != x- ]; then
113				mntopts="remount,$mntopts"
114			else
115				mntopts="remount"
116			fi
117
118			# if usr dev is a read-only metadevice then fail
119			case $special in
120			/dev/md/dsk/*)
121				dd if=/dev/null of=$special count=0 \
122				    >/dev/null 2>&1 || exit $SMF_EXIT_ERR_FATAL
123				;;
124			esac
125
126			mountfs - /usr $fstype $mntopts - ||
127			    exit $SMF_EXIT_ERR_FATAL
128		fi
129	fi
130fi
131
132#
133# Check and mount the /usr/platform file system.  This should only be
134# present when a SunOS 5.5 (Solaris 2.5) or greater client is being
135# administered by a SunOS 5.4 or less host.
136#
137readvfstab /usr/platform < $vfstab
138if [ "$mountp" ]; then
139	checkfs $fsckdev $fstype $mountp || exit $SMF_EXIT_ERR_FATAL
140	mountfs - $mountp $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL
141fi
142
143#
144# Mount the fd file systems if mount point exists.
145#
146readvfstab /dev/fd < $vfstab
147if [ "$mountp" -a -d /dev/fd ]; then
148	mountfs - /dev/fd - - - || exit $SMF_EXIT_ERR_FATAL
149fi
150
151if [ -f "${UPDATEFILE}" ]; then
152	/usr/sbin/bootadm update-archive
153	if [ $? != 0 ]; then
154		cecho ""
155		cecho "WARNING: Automatic update of the boot archive failed."
156		cecho "Update the archives using 'bootadm update-archive'"
157		cecho "command and then reboot the system from the same device that"
158		cecho "was previously booted."
159		cecho ""
160		exit $SMF_EXIT_ERR_FATAL
161	fi
162	rm -f $UPDATEFILE
163	bootcmd=`/usr/sbin/eeprom bootcmd | /usr/bin/sed -e 's#bootcmd=##g'`
164	if [ `uname -p` = "i386" ]; then
165		/usr/sbin/reboot -f dryrun
166		if [ $? = 0 ]; then
167			/usr/sbin/reboot -f -- "$bootcmd"
168			exit $SMF_EXIT_OK
169		fi
170		boot_prop=`/usr/sbin/svccfg -s svc:/system/boot-config:default listprop config/auto-reboot-safe | \
171			/usr/bin/nawk '{ print $3}'`
172		if [ "$boot_prop" != "true" ]; then
173			cecho ""
174			cecho "WARNING: Reboot required."
175			cecho "The system has updated the cache of files (boot archive) that is used"
176			cecho "during the early boot sequence. To avoid booting and running the system"
177			cecho "with the previously out-of-sync version of these files, reboot the"
178			cecho "system from the same device that was previously booted."
179			cecho ""
180			exit $SMF_EXIT_ERR_FATAL
181		else
182			/usr/sbin/reboot -p
183			exit $SMF_EXIT_OK
184		fi
185	fi
186	/usr/sbin/reboot -- "$bootcmd"
187fi
188
189exit $SMF_EXIT_OK
190