#!/usr/sbin/sh # # Copyright (c) 1992, 2014, Oracle and/or its affiliates. All rights reserved. # # Make sure that the libraries essential to this stage of booting can be found. LD_LIBRARY_PATH=/lib; export LD_LIBRARY_PATH libc_mount() { # # If there is an optimized libc available in /usr that fits this # processor, mount it on top of the base libc. # LIBC_MOE_32=`/usr/bin/moe -32 '/usr/lib/libc/$HWCAP'` if [ -n "$LIBC_MOE_32" ]; then /usr/sbin/mount | egrep -s "^/lib/libc.so.1 on " if [ $? -ne 0 ]; then /usr/sbin/mount -O -F lofs $LIBC_MOE_32 /lib/libc.so.1 fi fi ARCH64=`isainfo | awk '{print $1}'` LIBC_MOE_64=`/usr/bin/moe -64 /usr/lib/$ARCH64/libc/'$HWCAP'` if [ -n "$LIBC_MOE_64" ]; then /usr/sbin/mount | egrep -s "^/lib/$ARCH64/libc.so.1 on " if [ $? -ne 0 ]; then /usr/sbin/mount -O -F lofs $LIBC_MOE_64 \ /lib/$ARCH64/libc.so.1 fi fi } fdfs_mount() { # # Mount the fd file systems if mount point exists. # readvfstab /dev/fd < $vfstab if [ "$mountp" -a -d /dev/fd ]; then mountfs - /dev/fd - - - || exit $SMF_EXIT_ERR_FATAL fi } . /lib/svc/share/smf_include.sh . /lib/svc/share/fs_include.sh # # Most of the operations in this script are only necessary in the global # zone but due to the way initialization scripts like this are packaged, # it needs to currently exist for all zones. # if smf_is_nonglobalzone; then libc_mount fdfs_mount exit $SMF_EXIT_OK fi # # Root is already mounted (by the kernel), but still needs to be # checked, possibly remounted and entered into mnttab. First # mount /usr if it is a separate file system. If the file system # type is something other than zfs, mount it read-only. This must # be done first to allow utilities such as fsck and setmnt to # reside on /usr minimizing the space required by the root file # system. # readvfstab "/usr" < $vfstab if [ -n "$mountp" ]; then if [ "$fstype" = zfs ]; then mountfs - /usr $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL else # # Must use -o largefiles here to ensure the # read-only mount does not fail as a result of # having a large file present on /usr. This gives # fsck a chance to fix up the largefiles flag # before we remount /usr read-write. # if [ "x$mntopts" = x- ]; then mntopts='ro,largefiles' else checkopt largefiles $mntopts if [ "x$option" != xlargefiles ]; then mntopts="largefiles,$mntopts" fi checkopt ro $mntopts if [ "x$option" != xro ]; then mntopts="ro,$mntopts" fi # # Requesting logging on a read-only mount # causes errors to be displayed, so remove # "logging" from the list of options for now. # The read-write mount performed later will # specify the logging option if appropriate. # checkopt logging $mntopts if [ "x$option" = xlogging ]; then mntopts="$otherops" fi fi mountfs -O /usr $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL fi fi # # if we are booted from zfs, the /usr mount probably won't be a # legacy mount. Use the standard zfs mount command instead. readmnttab "/" < /etc/mnttab if [ "$fstype" = zfs ]; then mountp=`/usr/sbin/zfs get -H -o value mountpoint $special/usr 2>/dev/null` # # if mountp = /usr, there is a non-legacy mount of /usr # in the boot environment being booted. # if [ "x$mountp" = "x/usr" ] ; then /usr/sbin/zfs mount $special/usr if [ $? != 0 ] ; then msg='zfs-mount failed' echo $msg echo "$SMF_FMRI:" $msg >/dev/msglog exit $SMF_EXIT_ERR_FATAL fi fi fi # # Also mount /boot now so that things like keymap.sh can access # boot properties through eeprom. Readonly isn't required because # /boot (and other pcfs filesystems) aren't fsck'ed at boot yet. # Also, we don't account for caching /boot as it must be on a local # disk. So what's in vfstab is fine as it stands; just look to see # if it's there and avoid the mount if not. # readvfstab "/boot" < $vfstab if [ -n "$mountp" ]; then mountfs - /boot $fstype $mntopts - || exit $SMF_EXIT_ERR_FATAL fi # # Update kernel driver.conf cache with any additional driver.conf # files found on /usr, and device permissions from /etc/minor_perm. # This code is generally run from /etc/inittab; an immutable global # zone doesn't have permission to run "devfsadm -P" so late in boot. # if [[ -w / ]]; then /usr/sbin/devfsadm -I -P else /usr/sbin/devfsadm -I fi libc_mount fdfs_mount exit $SMF_EXIT_OK