diff options
Diffstat (limited to 'use_grub-probe_in_grub-install.patch')
-rw-r--r-- | use_grub-probe_in_grub-install.patch | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/use_grub-probe_in_grub-install.patch b/use_grub-probe_in_grub-install.patch new file mode 100644 index 000000000000..d6d5bc78bc1d --- /dev/null +++ b/use_grub-probe_in_grub-install.patch @@ -0,0 +1,148 @@ +Index: b/util/grub-install.in +=================================================================== +--- a/util/grub-install.in ++++ b/util/grub-install.in +@@ -137,106 +137,12 @@ + exit 1 + fi + +- # Break the device name into the disk part and the partition part. +- case "$host_os" in +- linux*) + # Find an actual physical device if we're passed a RAID device + case $1 in +- /dev/md*) set -- `getraid_mdadm $1` ++ /dev/md* | /dev/md/*) set -- `getraid_mdadm $1` + esac +- tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \ +- -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \ +- -e 's%\(fd[0-9]*\)$%\1%' \ +- -e 's%/part[0-9]*$%/disc%' \ +- -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \ +- -e 's%\(e[0-9]\.[0-9]*\).*$%\1%'` +- tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \ +- -e 's%.*d[0-9]*p%%' \ +- -e 's%.*/fd[0-9]*$%%' \ +- -e 's%.*/floppy/[0-9]*$%%' \ +- -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \ +- -e 's%.*c[0-7]d[0-9]*p*%%' \ +- -e 's%.*e[0-9]\.[0-9]*p%%' \ +- -e 's%.*e[0-9]\.[0-9]*\$%%'` +- ;; +- gnu*) +- tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'` +- tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; +- freebsd* | kfreebsd*-gnu) +- tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \ +- | sed 's%r\{0,1\}\(da[0-9]*\).*$%\1%'` +- tmp_part=`echo "$1" \ +- | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \ +- | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"` +- ;; +- netbsd* | knetbsd*-gnu) +- tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([sw]d[0-9]*\).*$%r\1d%' \ +- | sed 's%r\{0,1\}\(fd[0-9]*\).*$%r\1a%'` +- tmp_part=`echo "$1" \ +- | sed "s%.*/r\{0,1\}[sw]d[0-9]\([abe-p]\)%\1%"` +- ;; +- *) +- echo "grub-install does not support your OS yet." 1>&2 +- exit 1 ;; +- esac +- +- # Get the drive name. +- tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \ +- | sed 's%.*\(([hf]d[0-9][a-z0-9,]*)\).*%\1%'` +- +- # If not found, print an error message and exit. +- if test "x$tmp_drive" = x; then +- echo "$1 does not have any corresponding BIOS drive." 1>&2 +- exit 1 +- fi + +- if test "x$tmp_part" != x; then +- # If a partition is specified, we need to translate it into the +- # GRUB's syntax. +- case "$host_os" in +- linux*) +- echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;; +- gnu*) +- if echo $tmp_part | grep "^s" >/dev/null; then +- tmp_pc_slice=`echo $tmp_part \ +- | sed "s%s\([0-9]*\)[a-z]*$%\1%"` +- tmp_drive=`echo "$tmp_drive" \ +- | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` +- fi +- if echo $tmp_part | grep "[a-z]$" >/dev/null; then +- tmp_bsd_partition=`echo "$tmp_part" \ +- | sed "s%[^a-z]*\([a-z]\)$%\1%"` +- tmp_drive=`echo "$tmp_drive" \ +- | sed "s%)%,$tmp_bsd_partition)%"` +- fi +- echo "$tmp_drive" ;; +- freebsd* | kfreebsd*-gnu) +- if echo $tmp_part | grep "^s" >/dev/null; then +- tmp_pc_slice=`echo $tmp_part \ +- | sed "s%s\([0-9]*\)[a-h]*$%\1%"` +- tmp_drive=`echo "$tmp_drive" \ +- | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"` +- fi +- if echo $tmp_part | grep "[a-h]$" >/dev/null; then +- tmp_bsd_partition=`echo "$tmp_part" \ +- | sed "s%s\{0,1\}[0-9]*\([a-h]\)$%\1%"` +- tmp_drive=`echo "$tmp_drive" \ +- | sed "s%)%,$tmp_bsd_partition)%"` +- fi +- echo "$tmp_drive" ;; +- netbsd* | knetbsd*-gnu) +- if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then +- tmp_bsd_partition=`echo "$tmp_part" \ +- | sed "s%\([a-p]\)$%\1%"` +- tmp_drive=`echo "$tmp_drive" \ +- | sed "s%)%,$tmp_bsd_partition)%"` +- fi +- echo "$tmp_drive" ;; +- esac +- else +- # If no partition is specified, just print the drive name. +- echo "$tmp_drive" +- fi ++ GRUB_LEGACY_0_BASED_PARTITIONS=1 grub-probe --device-map=${device_map} -t drive -d "$1" + } + + # Usage: resolve_symlink file +@@ -265,9 +171,7 @@ + # Usage: find_device file + # Find block device on which the file resides. + find_device () { +- # For now, this uses the program `df' to get the device name, but is +- # this really portable? +- tmp_fname=`df $1/ | sed -n 's%.*\(/dev/[^ ]*\).*%\1%p'` ++ tmp_fname=`grub-probe --device-map=${device_map} -t device $1/` + + if test -z "$tmp_fname"; then + echo "Could not find device for $1" 2>&1 +@@ -384,22 +288,7 @@ + if test -f "$device_map"; then + : + else +- # 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 +- +- $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file +-quit +-EOF +- if grep "Error [0-9]*: " $log_file >/dev/null; then +- cat $log_file 1>&2 +- exit 1 +- fi +- +- rm -f $log_file ++ grub-mkdevicemap $no_floppy --device-map=$device_map + fi + + # Make sure that there is no duplicated entry. |