#!/usr/sbin/sh # # Copyright (c) 1989, 2014, 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=$SMF_SYSVOL_FS/boot_archive_needs_update rootiszfs=0 # get the fstype of root readmnttab / /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 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 # # 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 # Message for successful update MSGSUCCESS="An inconsistency in the boot archive was detected and the boot \ archive has been successfully updated. Rebooting" 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 boot archive 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 # Fast reboot is not supported in kernel zones. if ! smf_is_kernelzone; then /usr/sbin/reboot -f dryrun if [ $? = 0 ]; then cecho "" cecho $MSGSUCCESS cecho "" /usr/sbin/reboot -R -f -- "$bootcmd" exit $SMF_EXIT_OK fi 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 boot archive." cecho "To avoid booting and running the system with the previously out-of-sync" cecho "version of this file, reboot the system from the same device that was" cecho "previously booted." cecho "" exit $SMF_EXIT_ERR_FATAL else cecho "" cecho $MSGSUCCESS cecho "" /usr/sbin/reboot -p exit $SMF_EXIT_OK fi fi cecho "" cecho $MSGSUCCESS cecho "" /usr/sbin/reboot -- "$bootcmd" fi exit $SMF_EXIT_OK