#!/sbin/sh -
# $Id: vxroot.sh,v 1.7.45.2 2002/08/07 16:56:05 kirubak Exp $
#ident "$Source: /project/unixvm-cvs/src/sol/cmd/vxvm/support/vxroot.sh,v $"

# Copyright (c) 2001 VERITAS Software Corporation.  ALL RIGHTS RESERVED.
# UNPUBLISHED -- RIGHTS RESERVED UNDER THE COPYRIGHT
# LAWS OF THE UNITED STATES.  USE OF A COPYRIGHT NOTICE
# IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
# OR DISCLOSURE.
# 
# THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND
# TRADE SECRETS OF VERITAS SOFTWARE.  USE, DISCLOSURE,
# OR REPRODUCTION IS PROHIBITED WITHOUT THE PRIOR
# EXPRESS WRITTEN PERMISSION OF VERITAS SOFTWARE.
# 
#               RESTRICTED RIGHTS LEGEND
# USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS
# SUBJECT TO RESTRICTIONS AS SET FORTH IN SUBPARAGRAPH
# (C) (1) (ii) OF THE RIGHTS IN TECHNICAL DATA AND
# COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013.
#               VERITAS SOFTWARE
# 1600 PLYMOUTH STREET, MOUNTAIN VIEW, CA 94043


: ${VOLROOT_DIR:=$__VXVM_ROOT_DIR}
. ${VOL_SCRIPTS_LIB:-$VOLROOT_DIR/usr/lib/vxvm/lib}/vxcommon

[ $# -eq 1 ] || {
	egettxt 'Usage: vxroot rootdisk' vxvmshm:469 >&2
	exit 1
}
rootdisk=$1

unroot=no

[ -d $STATEDIR ] || volmkdirs

bail()
{
	echo ""
	egettxt "The Volume Manager has failed to setup your boot disk." \
		vxvmshm:322
	if [ $unroot = yes ]; then
		egettxt "Restoring original configuration..." vxvmshm:288
		vxunroot
	fi
	rm -f $rootfile
	voladm_continue
	quit 30
}

if [ -d $rootfile ]; then
	echo ""
	egettxt "It appears that you are already running root volumes." \
		vxvmshm:212
	voladm_yorn -M vxvmshm:114 "Continue anyway" n || quit 10
fi

## save all the files listed in vxroot.files.sh
echo ""

egettxt \
"The Volume Manager will now set up your Boot Disk as a managed disk." vxvmshm:328
echo ""


if [ ! -f $rootsvfile ]; then
	egettxt "Saving original configuration..." vxvmshm:290
	xcmd rm -rf $SAVEDIR
	xcmd mkdir -p $SAVEDIR
	xcmd cd ${VOLROOT:-/}
	xcmd find `cat $VOL_SCRIPTS_LIB/vxroot.files` -depth -print > $tmpfile1
	xcmd cpio -pdum $SAVEDIR < $tmpfile1
fi

unroot=yes

# use the pathname rather than the dmpnodename because we could be having
# enclosure based names.
dogi_whole_slice $rootdisk rootdevice
rootpath=`vxdmpadm getsubpaths dmpnodename=$rootdevice 2>/dev/null | \
				tail +3 | head -1 | awk '{ print $1; }'`
dogi_slice_to_device $rootpath rootdisk

dogi_device_slice $rootdisk 0 rootdevice
dogi_slice_rawpath $rootdevice rootpath

bus_drivers=`modinfo | grep "PCI Bus nexus driver" \
                     | awk '{print $6}'`

get_drv_list $rootpath > $tmpfile1
if [ -s $tmpfile1 ] ; then
	cat $tmpfile1 | while read drv; do
		if [ "$drv" = "pci" -a -n "$bus_drivers" ]; then
			for i in $bus_drivers
			do
				forceload_drv $i
			done
		fi
		forceload_drv $drv
	done
	forceload_drv sd
	forceload_drv ssd
	forceload_drv vxdmp
	forceload_drv vxio
	forceload_drv vxspec
else
	egettxt "VxVM Can't determine root disk drivers" vxvmshm:501
	bail
fi

chroot_to_vol

if [ $? -ne 0 ] ; then
	egettxt "VxVM Can't make rootdev entry in /etc/system file" vxvmshm:502
	bail
fi

touch $rootfile

quit 0
