Hi All!

Grub2 grub-install don't auto create correct core.img for FreeBSD on chain MBR/BSDslice/UFS. Included dirty patch make auto-adding of part_msdos & part_mbr into installed core.img on FreeBSD.

WBR,
Oleg










--- ./util/grub-install.in.orig 2012-06-27 00:31:03.000000000 +0300
+++ ./util/grub-install.in      2013-12-25 20:28:58.000000000 +0300
@@ -107,6 +107,8 @@
     print_option_help "--recheck" "$(gettext "delete device map if it already 
exists")"
     print_option_help "--force" "$(gettext "install even if problems are 
detected")"
     print_option_help "--force-file-id" "$(gettext "use identifier file even 
if UUID is available")"
+    print_option_help "--force-label" "$(gettext "use filesystem label even if 
UUID is available")"
+
     print_option_help "--disk-module=$(gettext "MODULE")" "$(gettext "disk 
module to use (biosdisk or native). This option is only available on BIOS 
target.")"
     print_option_help "--no-nvram" "$(gettext "don't update the \`boot-device' 
NVRAM variable. This option is only available on IEEE1275 targets.")"
     print_option_help  "--removable" "$(gettext "the installation device is 
removable. This option is only available on EFI.")"
@@ -159,6 +161,9 @@
     --force-file-id)
        force_file_id=y ;;
 
+    --force-label)
+       force_fs_label=y ;;
+
 # Accept and ignore for compatibility
     --font)
         shift;;
@@ -585,7 +590,7 @@
 partmap_module=
 for x in `echo "${grub_device}" | xargs "$grub_probe" 
--device-map="${device_map}" --target=partmap --device 2> /dev/null`; do
    case "$x" in
-       netbsd | openbsd) 
+       netbsd | openbsd | freebsd )
           partmap_module="$partmap_module part_bsd";;
        "") ;;
        *)
@@ -593,6 +598,11 @@
    esac
 done
 
+case `uname -o` in 
+    FreeBSD)
+           partmap_module="$partmap_module part_msdos part_bsd";;
+esac
+
 # Device abstraction module, if any (lvm, raid).
 devabstraction_module="`echo "${grub_device}" | xargs "$grub_probe" 
--device-map="${device_map}" --target=abstraction --device`"
 
@@ -668,16 +678,28 @@
            echo 1>&2
            hints=
         fi
+
+       if [ x"$force_fs_label" = xy ]; then
+            fs_label="`echo "${grub_device}" | xargs "$grub_probe" 
--device-map="${device_map}" --target=fs_label --device`"
+       fi
+
+       if [ x"$fs_label" != x ]; then
+            echo "search.fs_label ${fs_label} root $hints " >> 
"${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
+           search_module=search_label
+       else
+
        if [ x"$uuid" != x ]; then
             echo "search.fs_uuid ${uuid} root $hints " >> 
"${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
            search_module=search_fs_uuid
        else
            mkdir -p "${grubdir}/uuid"
-           file="`mktemp "${grubdir}/uuid/XXXXXXXXXXXXXXXXXXXXXXXXX"`"
+           file="`mktemp "${grubdir}/uuid/XXXX-XXXX-XXXX"`"
            relfile="`${grub_mkrelpath} "$file"`"
             echo "search.file '${relfile}' root $hints " >> 
"${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
            search_module=search_fs_file
        fi
+       fi
+
        echo 'set prefix=($root)'"$(echo "${relative_grubdir}" | sed "s,\\([ 
\"'\\\\]\\),\\\\\\1,g")" >> 
"${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
        
config_opt_file="${grubdir}/${grub_modinfo_target_cpu}-$grub_modinfo_platform/load.cfg"
         modules="$modules $search_module"
_______________________________________________
Bug-grub mailing list
Bug-grub@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-grub

Reply via email to