1 #!/sbin/sh -p
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) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
24 # Copyright 2015 Nexenta Systems, Inc. All rights reserved.
25 #
26 #
27 PATH=/usr/bin:/usr/sbin:$PATH; export PATH
28 STMSBOOTUTIL=/lib/mpxio/stmsboot_util
29 STMSMETHODSCRIPT=/lib/svc/method/mpxio-upgrade
30 KDRVCONF=
31 DRVCONF=
32 TMPDRVCONF=
33 TMPDRVCONF_MPXIO_ENTRY=
34 TMPDRVCONF_SATA_ENTRY=
35 DRVLIST=
36 GUID=
37 VFSTAB=/etc/vfstab
38 SAVEDIR=/etc/mpxio
39 BOOTDEVICES=$SAVEDIR/boot-devices
40 RECOVERFILE=$SAVEDIR/recover_instructions
41 SVCCFG_RECOVERY=$SAVEDIR/svccfg_recover
42 SUPPORTED_DRIVERS="fp|mpt|mpt_sas|pmcs"
43 USAGE=`gettext "Usage: stmsboot [-D $SUPPORTED_DRIVERS] -e | -d | -u | -L | -l controller_number"`
44 TEXTDOMAIN=SUNW_OST_OSCMD
45 export TEXTDOMAIN
46 STMSINSTANCE=svc:system/device/mpxio-upgrade:default
47 FASTBOOTINSTANCE=svc:system/boot-config:default
48 STMSBOOT=/usr/sbin/stmsboot
49 BOOTADM=/sbin/bootadm
50 MOUNT=/usr/sbin/mount
51 EEPROM=/usr/sbin/eeprom
52 EGREP=/usr/bin/egrep
53 GREP=/usr/bin/grep
54 AWK=/usr/bin/awk
55 CP=/usr/bin/cp
56 DF=/usr/bin/df
57 LS=/usr/bin/ls
58 MV=/usr/bin/mv
59 RM=/usr/bin/rm
60 SORT=/usr/bin/sort
61 UNIQ=/usr/bin/uniq
62 EXPR=/usr/bin/expr
63 MKDIR=/usr/bin/mkdir
64 REBOOT=/usr/sbin/reboot
65 SED=/usr/bin/sed
66 SVCPROP=/usr/bin/svcprop
67 SVCCFG=/usr/sbin/svccfg
68 SVCS=/usr/bin/svcs
69 SVCADM=/usr/sbin/svcadm
70
71 NOW=`/usr/bin/date +%G%m%d_%H%M`
72 MACH=`/usr/bin/uname -p`
73 BOOTENV_FILE=bootenv.rc
74 reboot_needed=0
75 new_bootpath=""
76 CLIENT_TYPE_PHCI=""
77 CLIENT_TYPE_VHCI="/scsi_vhci"
78
79 #
80 # Copy all entries (including comments) from source driver.conf
81 # to destination driver.conf except those entries which contain
82 # the mpxio-disable property.
83 # Take into consideration entries that spawn more than one line.
84 #
85 # $1 source driver.conf file
86 # $2 destination driver.conf file
87 #
88 # Returns 0 on success, non zero on failure.
89 #
90 delete_mpxio_disable_entries()
91 {
92 # be careful here, we've got embedded \t characters
93 # in sed's pattern space.
94 $SED '
95 /^[ ]*#/{ p
96 d
97 }
98 s/[ ]*$//
99 /^$/{ p
100 d
101 }
102 /mpxio-disable[ ]*=.*;$/{ w '$3'
103 d
104 }
105 /disable-sata-mpxio[ ]*=.*;$/{ w '$4'
106 d
107 }
108 /;$/{ p
109 d
110 }
111 :rdnext
112 N
113 s/[ ]*$//
114 /[^;]$/b rdnext
115 /mpxio-disable[ ]*=/{ s/\n/ /g
116 w '$3'
117 d
118 }
119 ' $1 > $2
120
121 return $?
122 }
123
124 #
125 # backup the last saved copy of the specified files.
126 # $* files to backup
127 #
128 backup_lastsaved()
129 {
130 for file in $*
131 do
132 newfile=`basename $file`
133 $CP $file $SAVEDIR/$newfile.$cmd.$NOW
134 done
135 }
136
137 #
138 # build recover instructions
139 #
140 # $1 1 to include boot script in the instructions
141 # 0 otherwise
142 #
143 build_recover()
144 {
145 gettext "Instructions to recover your previous STMS configuration (if in case the system does not boot):\n\n" > $RECOVERFILE
146 echo "\tboot net \c" >> $RECOVERFILE
147 gettext "(or from a cd/dvd/another disk)\n" >> $RECOVERFILE
148 echo "\tfsck <your-root-device>" >> $RECOVERFILE
149 echo "\tmount <your-root-device> /mnt" >> $RECOVERFILE
150
151 if [ "$cmd" = "update" ]; then
152 gettext "\tUndo the modifications you made to STMS configuration.\n\tFor example undo any changes you made to " >> $RECOVERFILE
153 echo "/mnt$KDRVCONF." >> $RECOVERFILE
154 else
155 echo "\tcp /mnt${SAVEDIR}/$DRVCONF.$cmd.$NOW /mnt$KDRVCONF" >> $RECOVERFILE
156 fi
157
158 if [ $1 -eq 1 ]; then
159 echo "\tcp /mnt${SAVEDIR}/vfstab.$cmd.$NOW /mnt$VFSTAB" >> $RECOVERFILE
160
161 echo "repository /mnt/etc/svc/repository.db" > $SVCCFG_RECOVERY
162 echo "select $STMSINSTANCE" >> $SVCCFG_RECOVERY
163 echo "setprop general/enabled=false" >> $SVCCFG_RECOVERY
164 echo "exit" >> $SVCCFG_RECOVERY
165
166 echo "\t$SVCCFG -f /mnt$SVCCFG_RECOVERY" >> $RECOVERFILE
167
168 if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then
169 echo "\tcp /mnt${SAVEDIR}/bootenv.rc.$cmd.$NOW /mnt/boot/solaris/$BOOTENV_FILE" >> $RECOVERFILE
170 fi
171 fi
172
173 rootdisk=`$MOUNT | $GREP "/ on " | cut -f 3 -d " "`
174 echo "\tumount /mnt\n\treboot\n\n${rootdisk} \c" >> $RECOVERFILE
175 gettext "was your root device,\nbut it could be named differently after you boot net.\n" >> $RECOVERFILE
176 }
177
178
179 #
180 # Arrange for /etc/vfstab and dump configuration to be updated
181 # during the next reboot. If the cmd is "enable" or "disable", copy
182 # $TMPDRVCONF to $KDRVCONF.
183 #
184 # Returns 0 on success, 1 on failure.
185 #
186 update_sysfiles()
187 {
188
189 gettext "WARNING: This operation will require a reboot.\n"
190 gettext "Do you want to continue ? [y/n] (default: y) "
191 read response
192
193 if [ -n "$response" -a "$response" != "y" -a \
194 "$response" != "Y" ]; then
195 for d in $DRVLIST; do
196 TMPDRVCONF=/var/run/tmp.$d.conf.$$
197 $RM -f $TMPDRVCONF > /dev/null 2>&1
198 done;
199 return 0;
200 fi
201
202 # set need_bootscript to the number of drivers that
203 # we support.
204 need_bootscript=`echo $SUPPORTED_DRIVERS|$AWK -F"|" '{print NF}'`
205
206 if [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then
207
208 for d in $DRVLIST; do
209 DRVCONF=$d.conf
210 KDRVCONF=/kernel/drv/$d.conf
211 TMPDRVCONF=/var/run/tmp.$d.conf.$$
212
213 $CP $KDRVCONF $SAVEDIR/`basename $KDRVCONF`.$cmd.$NOW
214 if [ -f $TMPDRVCONF ]; then
215 $CP $TMPDRVCONF $KDRVCONF
216 $RM -f $TMPDRVCONF
217 else
218 # if $TMPDRVCONF doesn't exist, then we
219 # haven't made any changes to it
220 continue;
221 fi
222
223 #
224 # there is no need to update the system files in the following
225 # cases:
226 # - we are enabling mpxio and the system has no configured
227 # disks accessible by phci paths.
228 # - we are disabling mpxio and the system has no configured
229 # disks accessible by vhci paths.
230 #
231
232 # Function to setup the CLIENT_TYPE_PHCI string based on
233 # the list of drivers that we're operating on. The variable
234 # depends upon the pathname of the parent node in the
235 # device tree, which can be different on x86/x64 and sparc.
236
237 CLIENT_TYPE_PHCI=`$STMSBOOTUTIL -D $d -N`;
238
239 if [ -z "$CLIENT_TYPE_PHCI" ]; then
240 continue;
241 fi
242
243 if [ "$cmd" = "enable" ]; then
244 $LS -l /dev/dsk/*s2 2> /dev/null | \
245 $EGREP -s "$CLIENT_TYPE_PHCI"
246 else
247 $LS -l /dev/dsk/*s2 2> /dev/null | \
248 $EGREP -s "$CLIENT_TYPE_VHCI"
249 fi
250
251 if [ $? -ne 0 ]; then
252 need_bootscript=`$EXPR $need_bootscript - 1`
253 fi
254 done
255 fi
256
257 if [ $need_bootscript -gt 0 ]; then
258 need_bootscript=1
259 if [ -n "$new_bootpath" -a "$MACH" = "i386" ]; then
260 #only update bootpath for x86.
261 $CP /boot/solaris/$BOOTENV_FILE $SAVEDIR/$BOOTENV_FILE.$cmd.$NOW
262 $EEPROM bootpath="$new_bootpath"
263 fi
264
265 if [ "$MACH" = "i386" ]; then
266 # Disable Fast Reboot temporarily for the next reboot only.
267 HASZFSROOT=`$DF -g / |$GREP zfs`
268 if [ -n "$HASZFSROOT" ]; then
269 $SVCCFG -s $FASTBOOTINSTANCE addpg config_ovr application P > /dev/null 2>&1
270 $SVCCFG -s $FASTBOOTINSTANCE \
271 setprop config_ovr/fastreboot_default=boolean:\"false\"
272 $SVCCFG -s $FASTBOOTINSTANCE \
273 setprop config_ovr/fastreboot_onpanic=boolean:\"false\"
274 $SVCADM refresh $FASTBOOTINSTANCE
275 fi
276 fi
277
278 # Enable the mpxio-upgrade service for the reboot
279 $SVCADM disable -t $STMSINSTANCE
280 $SVCCFG -s $STMSINSTANCE "setprop general/enabled=true"
281 else
282 need_bootscript=0
283 fi
284
285 build_recover $need_bootscript
286
287 if [ "$MACH" = "i386" ]; then
288 $BOOTADM update-archive
289 fi
290
291 gettext "The changes will come into effect after rebooting the system.\nReboot the system now ? [y/n] (default: y) "
292 read response
293
294 if [ -z "$response" -o "$response" = "y" -o \
295 "$response" = "Y" ]; then
296 $REBOOT
297 fi
298
299 return 0
300 }
301
302
303 #
304 # Enable or disable mpxio as specified by the cmd.
305 # Returns 0 on success, 1 on failure.
306 #
307 # Args: $cmd = {enable | disable}
308 # $d = {fp | mpt | mpt_sas | pmcs}
309 #
310 # the global variable $DRVLIST is used
311 #
312 configure_mpxio()
313 {
314 # be careful here, we've got embedded \t characters
315 # in sed's pattern space.
316 mpxiodisableno='mpxio-disable[ ]*=[ ]*"no"[ ]*;'
317 mpxiodisableyes='mpxio-disable[ ]*=[ ]*"yes"[ ]*;'
318 satadisableno='disable-sata-mpxio[ ]*=[ ]*"no"[ ]*;'
319 satadisableyes='disable-sata-mpxio[ ]*=[ ]*"yes"[ ]*;'
320
321 if [ "$cmd" = "enable" ]; then
322 mpxiodisable_cur_entry=$mpxiodisableyes
323 satadisable_cur_entry=$satadisableyes
324 propval=no
325 msg=`gettext "STMS already enabled"`
326 else
327 mpxiodisable_cur_entry=$mpxiodisableno
328 satadisable_cur_entry=$satadisableno
329 propval=yes
330 msg=`gettext "STMS already disabled"`
331 fi
332
333 DRVCONF=$d.conf
334 KDRVCONF=/kernel/drv/$d.conf
335 TMPDRVCONF=/var/run/tmp.$d.conf.$$
336 TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$;
337 TMPDRVCONF_SATA_ENTRY=/var/run/tmp.$d.conf.sataentry.$$;
338
339 if delete_mpxio_disable_entries $KDRVCONF $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY; then
340
341 if [ -s $TMPDRVCONF_MPXIO_ENTRY ]; then
342 # $DRVCONF does have mpxiodisable entries
343 $EGREP -s "$mpxiodisable_cur_entry" $TMPDRVCONF_MPXIO_ENTRY
344 if [ $? -eq 0 ]; then
345 reboot_needed=`$EXPR $reboot_needed + 1`
346 else
347 # if all mpxiodisable entries are no/yes for
348 # enable/disable mpxio, notify the user
349 $EGREP -s "$satadisable_cur_entry" $TMPDRVCONF_SATA_ENTRY
350 if [ $? -eq 0 -a "$d" = "mpt" ]; then
351 reboot_needed=`$EXPR $reboot_needed + 1`
352 else
353 $RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1
354 return 0;
355 fi
356 fi
357
358 # If mpxiodisable entries do not exist, always continue update
359 fi
360 else
361 $RM -f $TMPDRVCONF $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1
362 gettext "failed to update " 1>&2
363 echo "$KDRVCONF." 1>&2
364 gettext "No changes were made to your STMS configuration.\n" 1>&2
365 return 1
366 fi
367
368 rm $TMPDRVCONF_MPXIO_ENTRY $TMPDRVCONF_SATA_ENTRY > /dev/null 2>&1
369 echo "mpxio-disable=\"${propval}\";" >> $TMPDRVCONF
370 if [ "$d" = "mpt" ]; then
371 echo "disable-sata-mpxio=\"${propval}\";" >> $TMPDRVCONF
372 fi
373
374 }
375
376 setcmd()
377 {
378 if [ "$cmd" = "none" ]; then
379 cmd=$1
380 else
381 echo "$USAGE" 1>&2
382 exit 2
383 fi
384 }
385
386 #
387 # Need to update bootpath on x86 if boot system from FC disk
388 # Only update bootpath here when mpxio is enabled
389 # If mpxio is currently disabled, then we'll update bootpath in the
390 # mpxio-upgrade service method on reboot.
391 #
392
393 get_newbootpath_for_stmsdev() {
394 if [ "$cmd" = "enable" ]; then
395 return 0
396 fi
397
398 cur_bootpath=`$STMSBOOTUTIL -b`
399 if [ $? != 0 ]; then
400 return 1
401 fi
402
403 # Since on x64 platforms the eeprom command doesn't update the
404 # kernel, the file /boot/solaris/bootenv.rc and the kernel's
405 # bootpath variable have a good chance of differing. We do some
406 # extra handwaving to get the correct bootpath variable setting.
407
408 ONDISKVER=`$AWK '/bootpath/ {print $3}' /boot/solaris/bootenv.rc|\
409 $SED -e"s,',,g"`
410 if [ "$ONDISKVER" != "$cur_bootpath" ]; then
411 cur_bootpath="$ONDISKVER"
412 fi
413
414 NEWBOOTPATH=""
415 for path in $cur_bootpath; do
416 mapped=`$STMSBOOTUTIL -p $path`
417 if [ "$mapped" != "NOT_MAPPED" ]; then
418 if [ "$mapped" != "$path" ]; then
419 NEWBOOTPATH=`echo "$path " | \
420 $SED -e"s|$path|$mapped|"`" $NEWBOOTPATH"
421 else
422 NEWBOOTPATH="$NEWBOOTPATH $path"
423 fi
424 fi
425 done
426 # now strip off leading and trailing space chars
427 new_bootpath=`echo $NEWBOOTPATH`
428 return 0
429 }
430
431 #
432 # Emit a warning message to the user that by default we
433 # operate on all multipath-capable controllers that are
434 # attached to the system, and that if they want to operate
435 # on only a specific controller type (fp|mpt|mpt_sas|pmcs|....) then
436 # they need to re-invoke stmsboot with "-D $driver" in
437 # their argument list
438 #
439
440 emit_driver_warning_msg() {
441
442 # for each driver that we support, grab the list
443 # of controllers attached to the system.
444
445 echo ""
446 gettext "WARNING: stmsboot operates on each supported multipath-capable controller\n"
447 gettext " detected in a host. In your system, these controllers are\n\n"
448
449 for WARNDRV in `echo $SUPPORTED_DRIVERS| $SED -e"s,|, ,g"`; do
450 $STMSBOOTUTIL -D $WARNDRV -n
451 done;
452
453 echo ""
454 gettext "If you do NOT wish to operate on these controllers, please quit stmsboot\n"
455 gettext "and re-invoke with -D { fp | mpt | mpt_sas | pmcs} to specify which controllers you wish\n"
456 gettext "to modify your multipathing configuration for.\n"
457
458 echo ""
459 gettext "Do you wish to continue? [y/n] (default: y) "
460 read response
461
462 if [ -n "$response" -a "$response" != "Y" -a \
463 "$response" != "y" ]; then
464 exit
465 fi
466 }
467
468
469 #
470 #
471 # main starts here
472 #
473
474 cmd=none
475 # process options
476 while getopts D:geduLl: c
477 do
478 case $c in
479 e) setcmd enable;;
480 d) setcmd disable;;
481 u) setcmd update;;
482 L) setcmd listall;;
483 l) setcmd list
484 controller=$OPTARG;;
485 D) DRV=$OPTARG;;
486 g) GUID="-g";;
487 \?) echo "$USAGE" 1>&2
488 exit 2;;
489 esac
490 done
491
492 if [ "$cmd" = "none" ]; then
493 echo "$USAGE" 1>&2
494 exit 2
495 fi
496
497 if [ -z "$DRV" ]; then
498 DRVLIST="fp mpt mpt_sas pmcs"
499 else
500 DRVLIST=$DRV
501 fi
502
503 USERID=`id | $EGREP "uid=0"`
504 if [ -z "$USERID" ]; then
505 gettext "You must be super-user to run this script.\n" 1>&2
506 exit 1
507 fi
508
509 # just a sanity check
510 if [ ! -f $STMSBOOTUTIL -o ! -f $STMSMETHODSCRIPT ]; then
511 fmt=`gettext "Can't find %s and/or %s"`
512 printf "$fmt\n" "$STMSBOOTUTIL" "$STMSMETHODSCRIPT" 1>&2
513 exit 1
514 fi
515
516 # If the old sun4u-specific SMF method is found, remove it
517 $SVCCFG -s "platform/sun4u/mpxio-upgrade:default" < /dev/null > /dev/null 2>&1
518 if [ $? -eq 0 ]; then
519 $SVCCFG delete "platform/sun4u/mpxio-upgrade:default" > /dev/null 2>&1
520 fi
521
522 # now import the new service, if necessary
523 $SVCPROP -q $STMSINSTANCE < /dev/null > /dev/null 2>&1
524 if [ $? -ne 0 ]; then
525 if [ -f /lib/svc/manifest/system/device/mpxio-upgrade.xml ]; then
526 $SVCCFG import /lib/svc/manifest/system/device/mpxio-upgrade.xml
527 if [ $? -ne 0 ]; then
528
529 fmt=`gettext "Unable to import the %s service"`
530 printf "$fmt\n" "$STMSINSTANCE" 1>&2
531 exit 1
532 else
533 fmt=`gettext "Service %s imported successfully, continuing"`
534 printf "$fmt\n" "$STMSINSTANCE" 1>&2
535 fi
536 else
537 fmt=`gettext "Service %s does not exist on this host"`
538 printf "$fmt\n" "$STMSINSTANCE" 1>&2
539 exit 1
540 fi
541 fi
542
543
544 # make sure we can stash our data somewhere private
545 if [ ! -d $SAVEDIR ]; then
546 $MKDIR -p $SAVEDIR
547 fi
548 # prime the cache
549 $STMSBOOTUTIL -i
550
551
552 if [ "$cmd" = "enable" -o "$cmd" = "disable" -o "$cmd" = "update" ]; then
553 if $MOUNT -v | $EGREP -s " on / type nfs "; then
554 gettext "This command option is not supported on systems with an nfs mounted root filesystem.\n" 1>&2
555 exit 1
556 fi
557
558 # if the user has left the system with the mpxio-upgrade service
559 # in a temporarily disabled state (ie, service is armed for the next
560 # reboot), then let them know. We need to ensure that the system is
561 # is in a sane state before allowing any further invocations, so
562 # try to get the system admin to do so
563
564 ISARMED=`$SVCS -l $STMSINSTANCE|$GREP "enabled.*false.*temporary"`
565 if [ ! $? ]; then
566 echo ""
567 gettext "You need to reboot the system in order to complete\n"
568 gettext "the previous invocation of stmsboot.\n"
569 echo ""
570 gettext "Do you wish to reboot the system now? (y/n, default y) "
571 read response
572
573 if [ -z "$response" -o "x$response" = "Y" -o \
574 "$response" = "y" ]; then
575 $REBOOT
576 else
577 echo ""
578 gettext "Please reboot this system before continuing\n"
579 echo ""
580 exit 1
581 fi
582 fi
583
584 #
585 # keep a copy of the last saved files, useful for manual
586 # recovery in case of a problem.
587 #
588 for d in $DRVLIST; do
589 DRVCONF=$d.conf
590 KDRVCONF=/kernel/drv/$d.conf
591 TMPDRVCONF=/var/run/tmp.$d.conf.$$
592 TMPDRVCONF_MPXIO_ENTRY=/var/run/tmp.$d.conf.mpxioentry.$$;
593 if [ "$MACH" = "sparc" ]; then
594 backup_lastsaved $KDRVCONF $VFSTAB
595 else
596 backup_lastsaved $KDRVCONF $VFSTAB /boot/solaris/$BOOTENV_FILE
597 fi
598 done
599 fi
600
601 if [ "$cmd" = "enable" -o "$cmd" = "disable" ]; then
602
603 msgneeded=`echo "$DRVLIST" |$GREP " "`
604 if [ -n "$msgneeded" ]; then
605 emit_driver_warning_msg
606 fi
607 for d in $DRVLIST; do
608 configure_mpxio $cmd $d
609 done
610
611 if [ $reboot_needed -ne 0 ]; then
612 # Need to update bootpath on x86 if our boot device is
613 # now accessed through mpxio.
614 # Only update bootpath before reboot when mpxio is enabled
615 # If mpxio is currently disabled, we will update bootpath
616 # on reboot in the mpxio-upgrade service
617
618 if [ "$cmd" = "disable" ]; then
619 if [ "$MACH" = "i386" ]; then
620 get_newbootpath_for_stmsdev
621 if [ $? -ne 0 ]; then
622 $RM -f $TMPDRVCONF > /dev/null 2>&1
623 gettext "failed to update bootpath.\n" 1>&2
624 gettext "No changes were made to your STMS configuration.\n" 1>&2
625 return 1
626 fi
627 fi
628 # If we're not using ZFS root then we need
629 # to keep track of what / maps to in case
630 # it's an active-active device and we boot from
631 # the other path
632 HASZFSROOT=`$DF -g / |$GREP zfs`
633 if [ -z "$HASZFSROOT" ]; then
634 ROOTSCSIVHCI=`$DF /|$AWK -F":" '{print $1}' | \
635 $AWK -F"(" '{print $2}'| $SED -e"s,),,"`
636 TMPROOTDEV=`$LS -l $ROOTSCSIVHCI |$AWK -F">" '{print $2}' | \
637 $SED -e"s, ../../devices,,"`
638 $STMSBOOTUTIL -q $TMPROOTDEV > $BOOTDEVICES
639 fi
640 fi
641 update_sysfiles
642 else
643 echo "STMS is already ${cmd}d. No changes or reboots needed"
644 fi
645
646
647 elif [ "$cmd" = "update" ]; then
648 if [ "$MACH" = "i386" ]; then
649 # In this case we always change the bootpath to phci-based
650 # path first. bootpath will later be modified in mpxio-upgrade
651 # to the vhci-based path if mpxio is enabled on root.
652 get_newbootpath_for_stmsdev
653 if [ $? -ne 0 ]; then
654 gettext "failed to update bootpath.\n" 1>&2
655 return 1
656 fi
657 fi
658 update_sysfiles
659
660 elif [ "$cmd" = "list" ]; then
661 $STMSBOOTUTIL $GUID -l $controller
662 else
663 $STMSBOOTUTIL $GUID -L
664 fi
665
666 exit $?