mpxio-upgrade revision bd93c05dbd9b8f1e8d2edf48c777bc881f927608
c313914d0e66b20969215e519bbf2ab4ecf39512Tinderbox User#!/sbin/sh
c80e152862cc3e3207dc837fde7116bd4c0e4b9dTinderbox User#
c80e152862cc3e3207dc837fde7116bd4c0e4b9dTinderbox User# CDDL HEADER START
8d1b3ceb4d491ce32572f1702f37ed585eede993Evan Hunt#
8d1b3ceb4d491ce32572f1702f37ed585eede993Evan Hunt# The contents of this file are subject to the terms of the
d77cb075aae5595e460e3299bfc1e8ea5d42b560Evan Hunt# Common Development and Distribution License (the "License").
d77cb075aae5595e460e3299bfc1e8ea5d42b560Evan Hunt# You may not use this file except in compliance with the License.
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews#
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews# or http://www.opensolaris.org/os/licensing.
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews# See the License for the specific language governing permissions
30ca20f720ad0887772a79e7abb25b4fa0e4b5b0Mark Andrews# and limitations under the License.
701a93f5a592e4652343e049aa495d409c3ee133Mark Andrews#
7ec97ae74e42ec21b354fd2d1366313b41d947d6Evan Hunt# When distributing Covered Code, include this CDDL HEADER in each
701a93f5a592e4652343e049aa495d409c3ee133Mark Andrews# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
701a93f5a592e4652343e049aa495d409c3ee133Mark Andrews# If applicable, add the following below this CDDL HEADER, with the
002f1373374a0b72fc0329baa682917929bef168Tony Finch# fields enclosed by brackets "[]" replaced with your own identifying
002f1373374a0b72fc0329baa682917929bef168Tony Finch# information: Portions Copyright [yyyy] [name of copyright owner]
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews#
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews# CDDL HEADER END
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews#
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews#
8f1ed05dc0aae7ae6c3da6ec6d405df61257a61eMark Andrews# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
73cf0ba4e82c6baef638ecc4e31321223f841d28Mark Andrews# Copyright 2015 Nexenta Systems, Inc. All rights reserved.
73cf0ba4e82c6baef638ecc4e31321223f841d28Mark Andrews#
73cf0ba4e82c6baef638ecc4e31321223f841d28Mark Andrews
d8351dfc9b725b0d727be7acab6247d7d501d9a0Mark Andrews. /lib/svc/share/fs_include.sh
d8351dfc9b725b0d727be7acab6247d7d501d9a0Mark Andrews. /lib/svc/share/net_include.sh
d8351dfc9b725b0d727be7acab6247d7d501d9a0Mark Andrews
3a29ce9c08dd31709c73e7187aebda0d360c537bEvan Hunt# Make sure that the essential libraries can be found.
3a29ce9c08dd31709c73e7187aebda0d360c537bEvan HuntLD_LIBRARY_PATH=/lib; export LD_LIBRARY_PATH
5c78f1f50e53d8e2ed51a187efc2c9a0f43b4b1bMark AndrewsSTMSBOOTUTIL=/lib/mpxio/stmsboot_util
f1740da065d4555039fe8bb53beb4153e3f94de3Mark AndrewsSAVEDIR=/etc/mpxio
f1740da065d4555039fe8bb53beb4153e3f94de3Mark AndrewsBOOTDEVICES=$SAVEDIR/boot-devices
f1740da065d4555039fe8bb53beb4153e3f94de3Mark AndrewsRECOVERFILE=$SAVEDIR/recover_instructions
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsDEVFSADM=/usr/sbin/devfsadm
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsDUMPADM=/usr/sbin/dumpadm
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsMETADEVADM=/usr/sbin/metadevadm
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsISROOTDEV=""
31c7ab4fb3f7710af87dc9c3d64c5daf9a3dea35Mark AndrewsISROOTDEVPATH=""
ad309e8dfa0601d6053aaa12770a98a6940f89deEvan Huntusrmounted=0
ad309e8dfa0601d6053aaa12770a98a6940f89deEvan HuntUNAME=/usr/bin/uname
635e4351b04fd61ca6d853bdac6268c090b55129Mark AndrewsECHO=/usr/bin/echo
635e4351b04fd61ca6d853bdac6268c090b55129Mark AndrewsCAT=/usr/bin/cat
fc04365d2f83f197c8a54545dd9cd4ce6a209940Mark AndrewsCP=/usr/bin/cp
fc04365d2f83f197c8a54545dd9cd4ce6a209940Mark AndrewsDF=/usr/bin/df
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark AndrewsLS=/usr/bin/ls
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark AndrewsRM=/usr/bin/rm
7cbac360bf98c0a52b2d6866ad887616c32d4d3aMark AndrewsEGREP=/usr/bin/egrep
1cf118a656f5fd210787908b845362077fc507f8Evan HuntSED=/usr/bin/sed
1cf118a656f5fd210787908b845362077fc507f8Evan HuntZPOOL=/usr/sbin/zpool
1cf118a656f5fd210787908b845362077fc507f8Evan HuntAWK=/usr/bin/awk
1cf118a656f5fd210787908b845362077fc507f8Evan HuntMOUNT=/sbin/mount
1cf118a656f5fd210787908b845362077fc507f8Evan HuntUMOUNT=/sbin/mount
1cf118a656f5fd210787908b845362077fc507f8Evan HuntEEPROM=/usr/sbin/eeprom
1cf118a656f5fd210787908b845362077fc507f8Evan HuntBOOTADM=/usr/sbin/bootadm
1cf118a656f5fd210787908b845362077fc507f8Evan HuntSVCADM=/usr/sbin/svcadm
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund SivaramanREBOOT=/usr/sbin/reboot
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund Sivaraman
6fb3db01acad7f5c1f4e23789fb0f2ce56cc07deMukund Sivaramanmpxio_error()
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman{
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman cecho "\nERROR: stmsboot: $1"
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman #
fd82c70695888c134287b8018296028c252d100eMukund Sivaraman # display recovery instructions - the first call logs to the service
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews # log and the second call displays on the console.
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews #
4a53e3c2b83c476a93148eaee0272649beb221caMark Andrews shcat $RECOVERFILE
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews shcat $RECOVERFILE >/dev/msglog 2>&1
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews cecho "These instructions were also logged to the file $RECOVERFILE\n"
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews}
2cf0fe3b8092f64f8f68ae3693fe2e73e90ad1a4Mark Andrews
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt#
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt# root ("/") is already mounted read only by the kernel.
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt# Remount the root read-write.
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Hunt#
4221d9cd1d02311fbf9b5f08a038f5af78b10b4aEvan Huntmpxio_mount_root()
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont{
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont HASZFSROOT=`$DF -g / |grep zfs`
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont RVAL=""
f9c410d93711fbf312a0162f1e2d3f2a5ede69afFrancis Dupont
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień # In single-user maintenance mode, we don't have a writable
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień # root partition, so we _cannot_ use devlinks. Therefore we
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień # have to do some dancing - first mount the physical path
e526027287b849f0b6ab6e069156697cbafa22c1Michał Kępień # read-write, then re-run $STMSBOOTUTIL to get the real
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman # devlink mapping, and then re-mount the root slice. Of course,
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman # if we all used ZFS this wouldn't be such a pain!
929329d2d66a7e1083c70a9c918381935bf12799Mukund Sivaraman exec < $vfstab; readvfstab /
7e1a62eea2e4ba9d6c3fc718e679b965fa514f69Mark Andrews # ZFS root environments should _not_ have an entry for /
ec29d217ba3a2bf3e617a7b5b6708ae221bee999Mark Andrews # in their /etc/vfstab.
ec29d217ba3a2bf3e617a7b5b6708ae221bee999Mark Andrews if [ -n "$special" ]; then
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews # sanity check for ZFSRoot _and_ / in /etc/vfstab
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews if [ -n "$HASZFSROOT" ]; then
afefd754734f896bf3e0590177fff83e7cdfdf35Mark Andrews # ERROR - this would cause a failure later
f0353a586c2bfbae999193cb644b6bc94c7944d8Mark Andrews # so let root know about it now and provide
f0353a586c2bfbae999193cb644b6bc94c7944d8Mark Andrews # a chance to handle it before filesystem/usr
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt cecho "stmsboot: System has ZFS Root *and* an entry for / in /etc/vfstab\nstmsboot: Please remove the / entry from /etc/vfstab and then run\n# svcadm clear mpxio-upgrade"
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt exit 1
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt fi
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt ISPHYS=`echo $special |$AWK '/^\/dev\/dsk/ {print}'`;
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt if [ -z "$ISPHYS" ]; then
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt # a metadevice, either /dev/md or /dev/vx
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt new_special=$special
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt $MOUNT -o remount,rw $new_special / >/dev/msglog 2>&1
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt else
7ff28f5befbee76048a23e504dcd3f9a44ce6209Evan Hunt new_special=`$STMSBOOTUTIL -m $special`
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews if [ "$new_special" = "NOT_MAPPED" ]; then
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews # this is a bad state to be in, exit
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews cecho "Error: Your root device is not mapped."
cad79077bd5b2616bc4a7a6b3cbc0953bef8917fMark Andrews exit 1
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews fi
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews checkopt "llock" $mntopts
adfe58e8e5cd1890585e92b67f1fd01989a1fa7dMark Andrews mntopts='remount'
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews [ -n "$otherops" ] && mntopts="${mntopts},${otherops}"
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews RVAL=`$MOUNT -m -F $fstype -o $mntopts $new_special \
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews $mountp >/dev/msglog 2>&1`
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews # if we've got active-active paths to our rootvp and
c3237dec879f82855403ff7e3ba87b298172efd5Mark Andrews # the first path returned by $STMSBOOTUTIL is not the
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews # same as the one we booted from, then we need some
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews # handwaving due to restrictions in the ufs module
cb616c6d5c2ece1fac37fa6e0bca2b53d4043098Mark Andrews # (see the remountfs() function in
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews # $SRC/uts/common/fs/ufs/ufs_vfsops.c)
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews if [ $? -eq 0 ]; then
c0a2210466dec0cc81ebf2ffbe21693b57b9c29cMark Andrews # now re-run $STMSBOOTUTIL to get the real
534057c9f91a3eb6e0541f3526459c716239b337Mark Andrews # mapping for this device
534057c9f91a3eb6e0541f3526459c716239b337Mark Andrews new_special=`$STMSBOOTUTIL -m $special`
534057c9f91a3eb6e0541f3526459c716239b337Mark Andrews # mount root for real
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews $MOUNT -o remount,rw $new_special / \
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews >/dev/msglog 2>&1
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews else
0f14b041328c062b1fa391887376388dfc8b2fe5Mark Andrews for device in `$CAT $BOOTDEVICES`; do
f7f4730e563a2749629fe7fef4cd9513cd2bfab7Mark Andrews new_special="/devices${device}"
f7f4730e563a2749629fe7fef4cd9513cd2bfab7Mark Andrews $MOUNT -m -F $fstype -o $mntopts \
1848d38f441ebf70ab21f6151bc3487a92d25b63Mark Andrews $new_special $mountp >/dev/msglog 2>&1
1848d38f441ebf70ab21f6151bc3487a92d25b63Mark Andrews if [ $? -eq 0 ]; then
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrews # success, break out
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrews ISROOTDEVPATH=`$ECHO $device | \
2d82ed9456e72dc4373bea19d63411afe1c48962Mark Andrews $AWK -F":" '{print $1}'`
a5a1cbece45e6ca68aafe3b9b995eac6b0f45dd2Mark Andrews break;
a5a1cbece45e6ca68aafe3b9b995eac6b0f45dd2Mark Andrews fi
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews done
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews if [ -n "$RVAL" ]; then
0d6328ce5f6b799f8e7c6cbbb3b965cf29bfb7baMark Andrews cecho "Error: Unable to remount your root device"
e01ef6f01c7e8f80122cd80a2e011425a0135489Mark Andrews exit 1;
677f507de7c546c187c1505c48bc7b440545485cMark Andrews fi
677f507de7c546c187c1505c48bc7b440545485cMark Andrews fi
677f507de7c546c187c1505c48bc7b440545485cMark Andrews fi
124cc0660c7eff8021c2422fb47441e9ca08b3f9Tinderbox User else
e01ef6f01c7e8f80122cd80a2e011425a0135489Mark Andrews if [ -z "$HASZFSROOT" ]; then
677f507de7c546c187c1505c48bc7b440545485cMark Andrews cecho "stmsboot: Error: your root slice is invalid"
677f507de7c546c187c1505c48bc7b440545485cMark Andrews exit 1
677f507de7c546c187c1505c48bc7b440545485cMark Andrews else
677f507de7c546c187c1505c48bc7b440545485cMark Andrews cecho "stmsboot: Root is on ZFS"
677f507de7c546c187c1505c48bc7b440545485cMark Andrews fi
677f507de7c546c187c1505c48bc7b440545485cMark Andrews fi
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrews}
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrews
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrews#
677f507de7c546c187c1505c48bc7b440545485cMark Andrews# mount /usr read only
677f507de7c546c187c1505c48bc7b440545485cMark Andrews#
677f507de7c546c187c1505c48bc7b440545485cMark Andrewsmpxio_mount_usr()
bf459d24a117ae2c54c37016430b41cd6d73491cMark Andrews{
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt exec < $vfstab; readvfstab "/usr"
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt ret_val=0
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt if [ -n "$mountp" ]; then
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt case "$special" in
f53e0bda467d96dfeeba1b4da30c37b37766bb75Evan Hunt /dev/md/*)
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień new_special=$special
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień ;;
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień /dev/vx/*)
81e3e3084980afcd61416f572c6e72d38a3808abMichał Kępień new_special=$special
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews ;;
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews *)
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews new_special=`$STMSBOOTUTIL -m $special`
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews ;;
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews esac
64d7fa3ec4785b390665860aa6bdae304b3c1d24Mark Andrews
75505befa93c993aa5d2df24a2b64eac0c34cbffMark Andrews #
75505befa93c993aa5d2df24a2b64eac0c34cbffMark Andrews # Must use -o largefiles here to ensure the read-only
75505befa93c993aa5d2df24a2b64eac0c34cbffMark Andrews # mount does not fail as a result of having a large
a38f07c73790170842e4523b4a474d01ca0dede1Michał Kępień # file present on /usr.
a38f07c73790170842e4523b4a474d01ca0dede1Michał Kępień #
a38f07c73790170842e4523b4a474d01ca0dede1Michał Kępień if [ "$mntopts" = "-" ]; then
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews mntopts='ro,largefiles'
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews else
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews checkopt largefiles $mntopts
39d5523a8afc73cbdb4fa426de2ce071267a5d6fMark Andrews if [ "$option" != "largefiles" ]; then
1f4a3c7088594d1b64cd734eb69e1fd023fde8bfMichał Kępień mntopts="largefiles,$mntopts"
1f4a3c7088594d1b64cd734eb69e1fd023fde8bfMichał Kępień fi
1f4a3c7088594d1b64cd734eb69e1fd023fde8bfMichał Kępień
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews checkopt ro $mntopts
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews if [ "$option" != "ro" ]; then
91827e6fd3851a5fe129ef5409ff45833ca01a0eMark Andrews mntopts="ro,$mntopts"
35aae5884f410180706a89a9715bf9a85eeeb4b7Michał Kępień fi
35aae5884f410180706a89a9715bf9a85eeeb4b7Michał Kępień
35aae5884f410180706a89a9715bf9a85eeeb4b7Michał Kępień # Requesting logging on a read-only mount
57b1d64d9ae12d56973716e96f9743a00d47af4aMichał Kępień # causes errors to be displayed, so remove
57b1d64d9ae12d56973716e96f9743a00d47af4aMichał Kępień # "logging" from the list of options.
57b1d64d9ae12d56973716e96f9743a00d47af4aMichał Kępień checkopt logging $mntopts
2d517e233ff3b3fcd272eb5b2e2d3db6d31a1681Michał Kępień if [ "$option" = "logging" ]; then
2d517e233ff3b3fcd272eb5b2e2d3db6d31a1681Michał Kępień mntopts="$otherops"
2d517e233ff3b3fcd272eb5b2e2d3db6d31a1681Michał Kępień fi
09c3efda414314d7edcfb2aed9463fb935fc95a6Mark Andrews fi
09c3efda414314d7edcfb2aed9463fb935fc95a6Mark Andrews
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews # In case of a manual restart of the service, mount
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews # will emit messages if /usr is already mounted.
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews # So redirect the output to /dev/null.
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews $MOUNT -m -F $fstype -o $mntopts $new_special /usr \
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews>/dev/null 2>&1
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews ret_val=$?
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews if [ $ret_val -eq 0 ]; then
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews usrmounted=1
09c3efda414314d7edcfb2aed9463fb935fc95a6Mark Andrews fi
86d2f9abc8493321aacb0d540485de4d562fb734Mark Andrews fi
c7e57ce1b0bca9bc7da14bec485f7a7e3e4c761fMichał Kępień
c7e57ce1b0bca9bc7da14bec485f7a7e3e4c761fMichał Kępień return $ret_val
c7e57ce1b0bca9bc7da14bec485f7a7e3e4c761fMichał Kępień}
3ed16e796dba90c96933c8a8a3f5b9404d8d3e61Mark Andrews
3ed16e796dba90c96933c8a8a3f5b9404d8d3e61Mark Andrews# update system dump configuration
3ed16e796dba90c96933c8a8a3f5b9404d8d3e61Mark Andrewsupdate_dumpconf()
14d8a144779b54b103d2da741a2242bf5f9052f7Mark Andrews{
14d8a144779b54b103d2da741a2242bf5f9052f7Mark Andrews # Disable device-in-use checking (done in libdiskmgt).
14d8a144779b54b103d2da741a2242bf5f9052f7Mark Andrews # Without disabling this check, the configuration of dump device
70e041bea19b6ad9522b89c2299ad315a2deaafdMark Andrews # would fail as the device-in-use code incorrectly concludes that
70e041bea19b6ad9522b89c2299ad315a2deaafdMark Andrews # the device is in use and hence prevents configuration of the dump
70e041bea19b6ad9522b89c2299ad315a2deaafdMark Andrews # device.
67247b4a8304bac790648a351a95b8b0f4c512a6Mark Andrews NOINUSE_CHECK=1
67247b4a8304bac790648a351a95b8b0f4c512a6Mark Andrews export NOINUSE_CHECK
eeb919b6f572e033d97cf001e4cd44aaff54e5dcMichał Kępień
eeb919b6f572e033d97cf001e4cd44aaff54e5dcMichał Kępień DUMPISZFS=`$AWK -F"=" '/DUMPADM_DEVICE/ {print $2}' /etc/dumpadm.conf|$EGREP zvol`
eeb919b6f572e033d97cf001e4cd44aaff54e5dcMichał Kępień if [ -z "$DUMPISZFS" ]; then
a55438eda32ecebf43ead45b216662b7923a465fMark Andrews set -- `$DUMPADM -u 2>&1 | $EGREP 'cannot use /dev.* as dump device'`
a55438eda32ecebf43ead45b216662b7923a465fMark Andrews if [ -n "$4" ]; then
a55438eda32ecebf43ead45b216662b7923a465fMark Andrews newname=`$STMSBOOTUTIL -m $4`
8de17f83cafa91a5720dd0b8c1aee5f47f6d7f09Evan Hunt if [ $? -eq 0 ]; then
8de17f83cafa91a5720dd0b8c1aee5f47f6d7f09Evan Hunt if $DUMPADM -d $newname > /dev/msglog 2> /dev/console; then
8de17f83cafa91a5720dd0b8c1aee5f47f6d7f09Evan Hunt cecho "stmsboot: dump configuration \
9789e54e55b61b669fb31a8b70e9655e8357dda2Mark Andrews has been updated."
9789e54e55b61b669fb31a8b70e9655e8357dda2Mark Andrews else
f8362536c647625e602c8450a778a2b7ba90c9f4Mark Andrews mpxio_error "failed to configure \
f8362536c647625e602c8450a778a2b7ba90c9f4Mark Andrews the dump device.\nold \
f8362536c647625e602c8450a778a2b7ba90c9f4Mark Andrews dump device name: $4"
24231e53a5c3079431f84dcddfee1e761fec7329Mark Andrews return 1
24231e53a5c3079431f84dcddfee1e761fec7329Mark Andrews fi
24231e53a5c3079431f84dcddfee1e761fec7329Mark Andrews fi
24231e53a5c3079431f84dcddfee1e761fec7329Mark Andrews fi
4b669b69bae7dedda2faa09a7ade247499c1d49cMichał Kępień else
4b669b69bae7dedda2faa09a7ade247499c1d49cMichał Kępień # make sure we can get to it, force zfs to load fully
4b669b69bae7dedda2faa09a7ade247499c1d49cMichał Kępień $LS $DUMPISZFS >>/dev/null 2>&1
4b669b69bae7dedda2faa09a7ade247499c1d49cMichał Kępień cecho "stmsboot: dump on ZFS, no dumpadm update required"
eb11b39981689e4a20fbe95e533577eacab992b4Mukund Sivaraman fi
eb11b39981689e4a20fbe95e533577eacab992b4Mukund Sivaraman return 0
eb11b39981689e4a20fbe95e533577eacab992b4Mukund Sivaraman}
8daeae9b01a2b7eb9fd6511b352b03bd7d96ae79Michał Kępień
8daeae9b01a2b7eb9fd6511b352b03bd7d96ae79Michał Kępień# Update bootpath for x86 here when we are enabling mpxio on root
e7c0f978425f45731b08be1363f20626b0344f23Evan Huntupdate_bootpath()
e7c0f978425f45731b08be1363f20626b0344f23Evan Hunt{
01967d183990e44752fe61f193dab9c04c3afd9cEvan Hunt cur_bootpath=`$STMSBOOTUTIL -b`
01967d183990e44752fe61f193dab9c04c3afd9cEvan Hunt if [ $? -ne 0 ]; then
01967d183990e44752fe61f193dab9c04c3afd9cEvan Hunt cecho "stmsboot: ERROR! Unable to retrieve bootpath property\n"
575e9d9e4b6beaae688f107814a320b91243a4b2Mark Andrews exit 1
575e9d9e4b6beaae688f107814a320b91243a4b2Mark Andrews fi
575e9d9e4b6beaae688f107814a320b91243a4b2Mark Andrews
575e9d9e4b6beaae688f107814a320b91243a4b2Mark Andrews # Since on x64 platforms the eeprom command doesn't update the
7c442d7fe06bc95432af7513764e5cc85e133648Evan Hunt # kernel, the file /boot/solaris/bootenv.rc and the kernel's
7c442d7fe06bc95432af7513764e5cc85e133648Evan Hunt # bootpath variable have a good chance of differing. We do some
7c442d7fe06bc95432af7513764e5cc85e133648Evan Hunt # extra handwaving to get the correct bootpath variable setting.
7c442d7fe06bc95432af7513764e5cc85e133648Evan Hunt
5e1ca7a326741a8f74e6f2b907c7e1fbf428bf80Michał Kępień ONDISKVER=`$AWK '/bootpath/ {print $3}' /boot/solaris/bootenv.rc|\
5e1ca7a326741a8f74e6f2b907c7e1fbf428bf80Michał Kępień $SED -e"s,',,g"`
5e1ca7a326741a8f74e6f2b907c7e1fbf428bf80Michał Kępień if [ "$ONDISKVER" != "$cur_bootpath" ]; then
5e1ca7a326741a8f74e6f2b907c7e1fbf428bf80Michał Kępień cur_bootpath="$ONDISKVER"
ba93bc80a7bce5ba07b2f98e68f0f57402f2459cMark Andrews fi
ba93bc80a7bce5ba07b2f98e68f0f57402f2459cMark Andrews
8ed107eab48687887d45a1ceb18b712bc7209dbaTinderbox User NEWBOOTPATH=""
ba93bc80a7bce5ba07b2f98e68f0f57402f2459cMark Andrews for path in $cur_bootpath; do
5f103158280fb2e814db305f917aa42040221623Mark Andrews mapped=`$STMSBOOTUTIL -p $path`
5f103158280fb2e814db305f917aa42040221623Mark Andrews if [ "$mapped" != "NOT_MAPPED" ]; then
5f103158280fb2e814db305f917aa42040221623Mark Andrews if [ "$mapped" != "$path" ]; then
5f103158280fb2e814db305f917aa42040221623Mark Andrews NEWBOOTPATH=`echo "$path " | \
e5715e1fe12e5ad17522bd41c31e637c869d27b7Evan Hunt $SED -e"s|$path|$mapped|"`" $NEWBOOTPATH"
e5715e1fe12e5ad17522bd41c31e637c869d27b7Evan Hunt else
b7b76d6b855cd4c1152c26d34fb61af05f965c5eEvan Hunt NEWBOOTPATH="$NEWBOOTPATH $path"
b7b76d6b855cd4c1152c26d34fb61af05f965c5eEvan Hunt fi
b7b76d6b855cd4c1152c26d34fb61af05f965c5eEvan Hunt fi
b7b76d6b855cd4c1152c26d34fb61af05f965c5eEvan Hunt done
764e2f3413ca89d09abffb3eb228c8c820bf08b8Mark Andrews # now strip off leading and trailing space chars
764e2f3413ca89d09abffb3eb228c8c820bf08b8Mark Andrews new_bootpath=`echo $NEWBOOTPATH`
764e2f3413ca89d09abffb3eb228c8c820bf08b8Mark Andrews $EEPROM bootpath="$new_bootpath"
764e2f3413ca89d09abffb3eb228c8c820bf08b8Mark Andrews cecho "stmsboot: bootpath has been updated"
a06198688faca5c7bc1a35ec0ec18bc68c07691cEvan Hunt cecho ""
a06198688faca5c7bc1a35ec0ec18bc68c07691cEvan Hunt}
a06198688faca5c7bc1a35ec0ec18bc68c07691cEvan Hunt
50433a667cf0ed3ac7807768b745b0d870ff8c8bMark Andrews# Now do the actual work
50433a667cf0ed3ac7807768b745b0d870ff8c8bMark Andrewsmpxio_main()
3c12bec945ee71a38c5ba6f624abd12e2da7eea5Mark Andrews{
3c12bec945ee71a38c5ba6f624abd12e2da7eea5Mark Andrews # NOTE: If the first attempt to run the service has failed due to an
f44202ab640d22e17b4c74bdad7817622918bd27Mark Andrews # expected error, users should be able to manually rerun the service.
f44202ab640d22e17b4c74bdad7817622918bd27Mark Andrews #
f44202ab640d22e17b4c74bdad7817622918bd27Mark Andrews # First mount /usr read only. This must be done to run
ad9772c559c6aa42f8930f4acf1a2d833a08040aMichał Kępień # utilities such as fsck and devfsadm.
ad9772c559c6aa42f8930f4acf1a2d833a08040aMichał Kępień # In the case of a manual rerun of the service, mounting of /usr here
ad9772c559c6aa42f8930f4acf1a2d833a08040aMichał Kępień # fails if /usr already happens to be mounted. It is better that we
ad9772c559c6aa42f8930f4acf1a2d833a08040aMichał Kępień # do not mount /usr if already mounted, but there seems to be no
5d7d67f82a8913fae5f1098e111fe50edb86cd5bEvan Hunt # apparent way to check whether /usr is mounted or not as we mount
5d7d67f82a8913fae5f1098e111fe50edb86cd5bEvan Hunt # /usr without making an entry into /etc/mnttab. So instead of
5d7d67f82a8913fae5f1098e111fe50edb86cd5bEvan Hunt # explicitly checking for mount failures, we just do a sanity check
6216df5ccded056abd5db4abac4e5cbd78c73f45Evan Hunt # by looking for some file (in this case devfsadm) in /usr.
6216df5ccded056abd5db4abac4e5cbd78c73f45Evan Hunt #
6216df5ccded056abd5db4abac4e5cbd78c73f45Evan Hunt mpxio_mount_usr
6216df5ccded056abd5db4abac4e5cbd78c73f45Evan Hunt if [ ! -s $DEVFSADM ]; then
6216df5ccded056abd5db4abac4e5cbd78c73f45Evan Hunt mpxio_error "failed to mount the /usr filesystem."
6216df5ccded056abd5db4abac4e5cbd78c73f45Evan Hunt return
6216df5ccded056abd5db4abac4e5cbd78c73f45Evan Hunt fi
56e30ebae6fdb0bdf94419caff3a43fb2d16c5dfEvan Hunt
56e30ebae6fdb0bdf94419caff3a43fb2d16c5dfEvan Hunt if mpxio_mount_root; then
56e30ebae6fdb0bdf94419caff3a43fb2d16c5dfEvan Hunt # create /dev links
56e30ebae6fdb0bdf94419caff3a43fb2d16c5dfEvan Hunt cecho "stmsboot: configuring devices"
56e30ebae6fdb0bdf94419caff3a43fb2d16c5dfEvan Hunt $DEVFSADM
c85920c0b4b2d4dc605c0b1d355881925bf410afMark Andrews
c85920c0b4b2d4dc605c0b1d355881925bf410afMark Andrews if [ -n "$ISROOTDEVPATH" ]; then
0612274565d80e0ad87a19920e561cce5bddb05bEvan Hunt ISROOTDEV=`$STMSBOOTUTIL -o $ISROOTDEVPATH`
0612274565d80e0ad87a19920e561cce5bddb05bEvan Hunt fi
0612274565d80e0ad87a19920e561cce5bddb05bEvan Hunt
0612274565d80e0ad87a19920e561cce5bddb05bEvan Hunt # update /etc/vfstab to reflect device name changes
f592d2f76cac7115038124c510d2ba3050334b4dEvan Hunt $STMSBOOTUTIL -u >/dev/msglog 2>&1
f592d2f76cac7115038124c510d2ba3050334b4dEvan Hunt if [ $? -eq 0 ]; then
f592d2f76cac7115038124c510d2ba3050334b4dEvan Hunt $CP /etc/vfstab /etc/vfstab.old
f592d2f76cac7115038124c510d2ba3050334b4dEvan Hunt # handle active-active paths, where the probe order
f592d2f76cac7115038124c510d2ba3050334b4dEvan Hunt # for the hba reports a different path to what the
4ee1fbe056e812e661b856b4b448296331a40249Michał Kępień # boot-device variable gives us
4ee1fbe056e812e661b856b4b448296331a40249Michał Kępień if [ -n "$ISROOTDEV" ]; then
1c8aa38b53a0494fc7d4c3439594d1913987f264Mark Andrews ROOTDEVCHK=`grep $ISROOTDEV /etc/vfstab`
1c8aa38b53a0494fc7d4c3439594d1913987f264Mark Andrews if [ $? -ne 0 ]; then
1c8aa38b53a0494fc7d4c3439594d1913987f264Mark Andrews # we got a different path for root
1c8aa38b53a0494fc7d4c3439594d1913987f264Mark Andrews exec < $SAVEDIR/vfstab.new; readvfstab /
1c8aa38b53a0494fc7d4c3439594d1913987f264Mark Andrews FILEDEV=`$ECHO $special | \
43d53a4e4b2f0f9482485a8ab764137a9898ab32Evan Hunt $SED -e"s,/dev/dsk/,," -e"s,s[0-9]*,,"`
43d53a4e4b2f0f9482485a8ab764137a9898ab32Evan Hunt $SED -e"s,$FILEDEV,$ISROOTDEV,g" < \
43d53a4e4b2f0f9482485a8ab764137a9898ab32Evan Hunt $SAVEDIR/vfstab.new > /etc/vfstab
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień fi
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień else
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień $CP $SAVEDIR/vfstab.new /etc/vfstab
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień fi
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień $RM $SAVEDIR/vfstab.new
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień cecho ""
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień cecho "stmsboot: vfstab has been updated"
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień
b1ce9b3d54cd072adb5275f08a9afac31cfb4c1cMichał Kępień if update_dumpconf; then
5fa4be41a383cfbf5e1d195b18c04bdbf5603710Evan Hunt # update svm configuration to reflect new names
5fa4be41a383cfbf5e1d195b18c04bdbf5603710Evan Hunt if [ -s /kernel/drv/md.conf ] && \
5fa4be41a383cfbf5e1d195b18c04bdbf5603710Evan Hunt [ -x $METADEVADM ]; then
2732d4922c2e72a399204320791acfd2fd3d6c7cMark Andrews $METADEVADM -r >/dev/msglog 2>&1
2732d4922c2e72a399204320791acfd2fd3d6c7cMark Andrews fi
2732d4922c2e72a399204320791acfd2fd3d6c7cMark Andrews fi
24ffba17f06746257d5c009ca8ebfe6043966d20Evan Hunt
24ffba17f06746257d5c009ca8ebfe6043966d20Evan Hunt MACH=`$UNAME -p`
24ffba17f06746257d5c009ca8ebfe6043966d20Evan Hunt if [ "$MACH" = "i386" ]; then
24ffba17f06746257d5c009ca8ebfe6043966d20Evan Hunt # only update bootpath here for x86
24ffba17f06746257d5c009ca8ebfe6043966d20Evan Hunt update_bootpath
21d58795b10a13fa7ac306f7146bdcb58b2e5165Mark Andrews fi
21d58795b10a13fa7ac306f7146bdcb58b2e5165Mark Andrews cecho "stmsboot: now regenerating boot archive"
d5bd8bb71a8970d4ebc4701b3e9ec3efef4954b7Evan Hunt $BOOTADM update-archive
d5bd8bb71a8970d4ebc4701b3e9ec3efef4954b7Evan Hunt else
d5bd8bb71a8970d4ebc4701b3e9ec3efef4954b7Evan Hunt mpxio_error "failed to update /etc/vfstab."
d5bd8bb71a8970d4ebc4701b3e9ec3efef4954b7Evan Hunt fi
d5bd8bb71a8970d4ebc4701b3e9ec3efef4954b7Evan Hunt
d5bd8bb71a8970d4ebc4701b3e9ec3efef4954b7Evan Hunt $SVCADM disable system/device/mpxio-upgrade
d5bd8bb71a8970d4ebc4701b3e9ec3efef4954b7Evan Hunt
ad1317338af79edad878c9c3e4361798503310baMark Andrews if [ $usrmounted -eq 1 ]; then
ad1317338af79edad878c9c3e4361798503310baMark Andrews cecho "stmsboot: rebooting the system now."
9519bb92d7f3f35015aecb84954dd21607cc2c80Evan Hunt $REBOOT
9519bb92d7f3f35015aecb84954dd21607cc2c80Evan Hunt fi
9519bb92d7f3f35015aecb84954dd21607cc2c80Evan Hunt else
1c81aef28ddf0905344cc58dd3ea0ca539ef1414Evan Hunt mpxio_error "failed to mount the root filesystem."
1c81aef28ddf0905344cc58dd3ea0ca539ef1414Evan Hunt fi
1c81aef28ddf0905344cc58dd3ea0ca539ef1414Evan Hunt}
1c81aef28ddf0905344cc58dd3ea0ca539ef1414Evan Hunt
da1f585afa8c103508c759142d6aed4edae6936eMark Andrewsmpxio_main
da1f585afa8c103508c759142d6aed4edae6936eMark Andrews