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