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