+++ /dev/null
---- grub-0.95/util/grub-install.in.support_md 2004-12-17 17:50:45.000000000 -0500
-+++ grub-0.95/util/grub-install.in 2004-12-19 19:19:20.509409160 -0500
-@@ -207,6 +207,43 @@
- echo "$tmp_fname"
- }
-
-+# Usage: is_raid1_device devicename
-+# Returns 0 if devicename is a raid1 md device, 1 if it is not.
-+is_raid1_device () {
-+ case "$host_os" in
-+ linux*)
-+ level=`mdadm --query --detail $1 2>/dev/null | \
-+ awk '/Raid Level :/ {print $4}'`
-+ if [ "$level" = "raid1" ]; then
-+ return 0
-+ fi
-+ ;;
-+ esac
-+ return 1
-+}
-+
-+# Usage: find_real_devs device
-+# Returns space separated list of devices for linux if device is
-+# a raid1 device. In all other cases, the provided value is returned.
-+find_real_devs () {
-+ source_device=$1
-+ case "$host_os" in
-+ linux*)
-+ if is_raid1_device $source_device ; then
-+ list=""
-+ for device in `mdadm --query --detail "${source_device}" | \
-+ awk '/\/dev\/[^(md)]/ {print $7}'` ; do
-+ list="$list $device"
-+ done
-+ echo $list
-+ return 0
-+ fi
-+ ;;
-+ esac
-+ echo $source_device
-+ return 0
-+}
-+
- # Usage: find_device file
- # Find block device on which the file resides.
- find_device () {
-@@ -219,7 +256,7 @@
- exit 1
- fi
-
-- tmp_fname=`resolve_symlink $tmp_fname`
-+ tmp_fname=`resolve_symlink $tmp_fname`
-
- echo "$tmp_fname"
- }
-@@ -379,7 +416,11 @@
- # Check for INSTALL_DEVICE.
- case "$install_device" in
- /dev/*)
-+ # If we are running md on a Linux box, just use the first physical device
-+ # at this point.
- install_device=`resolve_symlink "$install_device"`
-+ install_device=`find_real_devs $install_device | awk '{print $1}'`
-+
- install_drive=`convert "$install_device"`
- # I don't know why, but some shells wouldn't die if exit is
- # called in a function.
-@@ -408,14 +449,7 @@
- grub_prefix="/grub"
- fi
-
--# Convert the root device to a GRUB drive.
--root_drive=`convert "$root_device"`
--if test "x$root_drive" = x; then
-- exit 1
--fi
--
--# Check if the root directory exists in the same device as the grub
--# directory.
-+# Check if the root directory exists in the same device as the grub directory.
- grubdir_device=`find_device ${grubdir}`
-
- if test "x$grubdir_device" != "x$root_device"; then
-@@ -431,30 +465,40 @@
- test -n "$mkimg" && img_file=`$mkimg`
- test -n "$mklog" && log_file=`$mklog`
-
--for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
-- count=5
-- tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"`
-- while test $count -gt 0; do
-- $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
-+for real_device in `find_real_devs $root_device`; do
-+ # Convert the root deviceto a GRUB drive.
-+ root_drive=`convert "$real_device"`
-+ if [ "x$root_drive" = x ]; then
-+ exit 1
-+ fi
-+
-+ for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
-+ count=5
-+ tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"`
-+ while test $count -gt 0; do
-+ sync
-+ $grub_shell --batch $no_floppy --device-map=$device_map \
-+ <<EOF >$log_file
- dump ${root_drive}${tmp} ${img_file}
- quit
- EOF
-- if grep "Error [0-9]*: " $log_file >/dev/null; then
-- :
-- elif cmp $file $img_file >/dev/null; then
-- break
-+ if grep "Error [0-9]*: " $log_file >/dev/null; then
-+ :
-+ elif cmp $file $img_file >/dev/null; then
-+ break
-+ fi
-+ sleep 1
-+ count=`expr $count - 1`
-+ done
-+ if test $count -eq 0; then
-+ echo "The file $file not read correctly." 1>&2
-+ exit 1
- fi
-- sleep 1
-- count=`expr $count - 1`
- done
-- if test $count -eq 0; then
-- echo "The file $file not read correctly." 1>&2
-- exit 1
-- fi
--done
-
--rm -f $img_file
--rm -f $log_file
-+ rm -f $img_file
-+ rm -f $log_file
-+done
-
- if ! test -e ${grubdir}/grub.conf ; then
- test -e ${grubdir}/menu.lst && ln -s ./menu.lst ${grubdir}/grub.conf
-@@ -463,21 +507,33 @@
- # Create a safe temporary file.
- test -n "$mklog" && log_file=`$mklog`
-
--# Before all invocations of the grub shell, call sync to make sure
--# the raw device is in sync with any bufferring in filesystems.
--sync
-+for real_device in `find_real_devs $root_device`; do
-+ # Convert the root deviceto a GRUB drive.
-+ root_drive=`convert "$real_device"`
-+ if [ "x$root_drive" = x ]; then
-+ exit 1
-+ fi
-+
-+ # Before all invocations of the grub shell, call sync to make sure
-+ # the raw device is in sync with any bufferring in filesystems.
-+ sync
-
--# Now perform the installation.
--$grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
-+ # Now perform the installation.
-+ $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >>$log_file
- root $root_drive
--setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive
-+setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $root_drive
- quit
- EOF
-
--if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then
-+done
-+
-+if grep "Error [0-9]*: " $log_file >/dev/null ; then
- cat $log_file 1>&2
- exit 1
- fi
-+if test $debug = yes; then
-+ cat $log_file 1>&2
-+fi
-
- rm -f $log_file
-