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 if [ "$fstype" = cachefs ]; then 109 mountfs -O $mountp cachefs $mntopts $special || 110 exit $SMF_EXIT_ERR_FATAL 111 else 112 checkopt ro $mntopts 113 if [ "x$option" != xro ]; then 114 checkfs $fsckdev $fstype $mountp || 115 exit $SMF_EXIT_ERR_FATAL 116 if [ "x$mntopts" != x- ]; then 117 mntopts="remount,$mntopts" 118 else 119 mntopts="remount" 120 fi 121 122 # if usr dev is a read-only metadevice then fail 123 case $special in 124 /dev/md/dsk/*) 125 dd if=/dev/null of=$special count=0 \ 126 >/dev/null 2>&1 || exit $SMF_EXIT_ERR_FATAL 127 ;; 128 esac 129 130 mountfs - /usr $fstype $mntopts - || 131 exit $SMF_EXIT_ERR_FATAL 132 fi 133 fi 134 fi 135fi 136 137# 138# Check and mount the /usr/platform file system. This should only be 139# present when a SunOS 5.5 (Solaris 2.5) or greater client is being 140# administered by a SunOS 5.4 or less host. 141# 142readvfstab /usr/platform < $vfstab 143if [ "$mountp" ]; then 144 checkfs $fsckdev $fstype $mountp || exit $SMF_EXIT_ERR_FATAL 145 mountfs - $mountp $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL 146fi 147 148# 149# Mount the fd file systems if mount point exists. 150# 151readvfstab /dev/fd < $vfstab 152if [ "$mountp" -a -d /dev/fd ]; then 153 mountfs - /dev/fd - - - || exit $SMF_EXIT_ERR_FATAL 154fi 155 156if [ -f "${UPDATEFILE}" ]; then 157 /usr/sbin/bootadm update-archive 158 if [ $? != 0 ]; then 159 cecho "" 160 cecho "WARNING: Automatic update of the boot archive failed." 161 cecho "Update the archives using 'bootadm update-archive'" 162 cecho "command and then reboot the system from the same device that" 163 cecho "was previously booted." 164 cecho "" 165 exit $SMF_EXIT_ERR_FATAL 166 fi 167 rm -f $UPDATEFILE 168 bootcmd=`/usr/sbin/eeprom bootcmd | /usr/bin/sed -e 's#bootcmd=##g'` 169 if [ `uname -p` = "i386" ]; then 170 /usr/sbin/reboot -f dryrun 171 if [ $? = 0 ]; then 172 /usr/sbin/reboot -f -- "$bootcmd" 173 exit $SMF_EXIT_OK 174 fi 175 boot_prop=`/usr/sbin/svccfg -s svc:/system/boot-config:default listprop config/auto-reboot-safe | \ 176 /usr/bin/nawk '{ print $3}'` 177 if [ "$boot_prop" != "true" ]; then 178 cecho "" 179 cecho "WARNING: Reboot required." 180 cecho "The system has updated the cache of files (boot archive) that is used" 181 cecho "during the early boot sequence. To avoid booting and running the system" 182 cecho "with the previously out-of-sync version of these files, reboot the" 183 cecho "system from the same device that was previously booted." 184 cecho "" 185 exit $SMF_EXIT_ERR_FATAL 186 else 187 /usr/sbin/reboot -p 188 exit $SMF_EXIT_OK 189 fi 190 fi 191 /usr/sbin/reboot -- "$bootcmd" 192fi 193 194exit $SMF_EXIT_OK 195