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 32 UPDATEFILE=/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 # 38 dump_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 # 67 if [ -x /usr/sbin/dumpadm ]; then 68 /usr/sbin/dumpadm -i 69 fi 70 71 rootiszfs=0 72 # get the fstype of root 73 readmnttab / </etc/mnttab 74 if [ "$fstype" = zfs ] ; then 75 rootiszfs=1 76 dump_setup 77 fi 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 # 88 if 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 106 fi 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 # 112 if [ "$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 137 fi 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 # 144 readvfstab /usr/platform < $vfstab 145 if [ "$mountp" ]; then 146 checkfs $fsckdev $fstype $mountp || exit $SMF_EXIT_ERR_FATAL 147 mountfs - $mountp $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL 148 fi 149 150 # 151 # Mount the fd file systems if mount point exists. 152 # 153 readvfstab /dev/fd < $vfstab 154 if [ "$mountp" -a -d /dev/fd ]; then 155 mountfs - /dev/fd - - - || exit $SMF_EXIT_ERR_FATAL 156 fi 157 158 if [ -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" 194 fi 195 196 exit $SMF_EXIT_OK