grub2/grub2-pass-corret-root-for-nfsroot.patch
Michael Chang a3bdb368a2 Accepting request 904721 from home:michael-chang:grub:2.06
- Version bump to 2.06
  * rediff
    - 0001-add-support-for-UEFI-network-protocols.patch
    - 0002-net-read-bracketed-ipv6-addrs-and-port-numbers.patch
    - 0003-Make-grub_error-more-verbose.patch
    - 0003-bootp-New-net_bootp6-command.patch
    - 0005-grub.texi-Add-net_bootp6-doument.patch
    - 0006-bootp-Add-processing-DHCPACK-packet-from-HTTP-Boot.patch
    - 0006-efi-Set-image-base-address-before-jumping-to-the-PE-.patch
    - 0008-efinet-Setting-DNS-server-from-UEFI-protocol.patch
    - 0046-squash-verifiers-Move-verifiers-API-to-kernel-image.patch
    - grub-install-force-journal-draining-to-ensure-data-i.patch
    - grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
    - grub2-diskfilter-support-pv-without-metadatacopies.patch
    - grub2-efi-HP-workaround.patch
    - grub2-efi-xen-cfg-unquote.patch
    - grub2-efi-xen-chainload.patch
    - grub2-fix-menu-in-xen-host-server.patch
    - grub2-gfxmenu-support-scrolling-menu-entry-s-text.patch
    - grub2-install-remove-useless-check-PReP-partition-is-empty.patch
    - grub2-lvm-allocate-metadata-buffer-from-raw-contents.patch
    - grub2-mkconfig-default-entry-correction.patch
    - grub2-pass-corret-root-for-nfsroot.patch
    - grub2-s390x-03-output-7-bit-ascii.patch
    - grub2-s390x-04-grub2-install.patch
    - grub2-secureboot-install-signed-grub.patch
    - grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch
    - use-grub2-as-a-package-name.patch
  * update by patch squashed:
    - 0001-Add-support-for-Linux-EFI-stub-loading-on-aarch64.patch

OBS-URL: https://build.opensuse.org/request/show/904721
OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=386
2021-07-08 09:03:14 +00:00

141 lines
5.5 KiB
Diff

From 340fd0c8717c2bf33163a18bfec72243b0e51862 Mon Sep 17 00:00:00 2001
From: Michael Chang <mchang@suse.com>
Date: Thu, 30 Aug 2012 15:43:17 +0800
Subject: [PATCH] Pass corret root= for nfsroot
References: bnc#774548, bsc#1069094
Patch-Mainline: no
Fix / is mounted on nfs. The fix is to pass kernel parameters
with correct root= for nfs. However since grub2 doesn't support
nfs file system module, the /boot on nfs is not possible and
grub2-probe not work in probing nfs mounted path. The fix is merely
on the script level and not use grub2-probe for above reasons.
v2: Filter out autofs and securityfs from /proc/self/mountinfo (bsc#1069094)
---
util/grub-mkconfig.in | 37 ++++++++++++++++++++++++++++++-------
1 files changed, 30 insertions(+), 7 deletions(-)
Index: grub-2.06~rc1/util/grub-mkconfig.in
===================================================================
--- grub-2.06~rc1.orig/util/grub-mkconfig.in
+++ grub-2.06~rc1/util/grub-mkconfig.in
@@ -131,14 +131,27 @@ else
exit 1
fi
-# Device containing our userland. Typically used for root= parameter.
-GRUB_DEVICE="`${grub_probe} --target=device /`"
-GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true
-GRUB_DEVICE_PARTUUID="`${grub_probe} --device ${GRUB_DEVICE} --target=partuuid 2> /dev/null`" || true
+probe_nfsroot_device () {
+ while read line ; do
+ part1=`echo $line | sed -e 's! - .*$!!'`
+ part2=`echo $line | sed -n -e 's! - \(.*\)$!\n\1!p' | sed 1d`
+
+ set -- $part1
+ path=$5
+
+ set -- $part2
+ fstype=$1
+ device=$2
+
+ if [ "x${path}" = "x/" ] &&
+ [ "x${fstype}" = "xnfs" -o "x${fstype}" = "xnfs4" ] ; then
+ echo "${fstype}:$device"
+ return
+ fi
+ done
+}
-# Device containing our /boot partition. Usually the same as GRUB_DEVICE.
-GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
-GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true
+NFSROOT_DEVICE="`awk '($9!="autofs")&&($9!="securityfs")' /proc/self/mountinfo | probe_nfsroot_device`"
# Disable os-prober by default due to security reasons.
GRUB_DISABLE_OS_PROBER="true"
@@ -146,11 +159,26 @@ GRUB_DISABLE_OS_PROBER="true"
# Filesystem for the device containing our userland. Used for stuff like
# choosing Hurd filesystem module.
GRUB_FS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2> /dev/null || echo unknown`"
-
-if [ x"$GRUB_FS" = xunknown ]; then
- GRUB_FS="$(stat -f -c %T / || echo unknown)"
+if [ "x${NFSROOT_DEVICE}" != "x" ]; then
+ GRUB_DEVICE=""
+ GRUB_DEVICE_UUID=""
+ GRUB_DEVICE_PARTUUID=""
+ GRUB_FS="unknown"
+else
+ # Device containing our userland. Typically used for root= parameter.
+ GRUB_DEVICE="`${grub_probe} --target=device /`"
+ GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true
+ GRUB_DEVICE_PARTUUID="`${grub_probe} --device ${GRUB_DEVICE} --target=partuuid 2> /dev/null`" || true
+
+ if [ x"$GRUB_FS" = x ] || [ x"$GRUB_FS" = xunknown ]; then
+ GRUB_FS="$(stat -f -c %T / || echo unknown)"
+ fi
fi
+# Device containing our /boot partition. Usually the same as GRUB_DEVICE.
+GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
+GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true
+
# Provide a default set of stock linux early initrd images.
# Define here so the list can be modified in the sourced config file.
if [ "x${GRUB_EARLY_INITRD_LINUX_STOCK}" = "x" ]; then
Index: grub-2.06~rc1/util/grub.d/10_linux.in
===================================================================
--- grub-2.06~rc1.orig/util/grub.d/10_linux.in
+++ grub-2.06~rc1/util/grub.d/10_linux.in
@@ -86,6 +86,12 @@ linux_entry ()
type="$3"
args="$4"
+ if [ -n "${linux_root_device_thisversion}" ]; then
+ root_device="root=${linux_root_device_thisversion}"
+ else
+ root_device=""
+ fi
+
if [ -z "$boot_device_id" ]; then
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
fi
@@ -141,7 +147,7 @@ linux_entry ()
message="$(gettext_printf "Loading Linux %s ..." ${version})"
sed "s/^/$submenu_indentation/" << EOF
echo '$(echo "$message" | grub_quote)'
- linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ${args}
+ linux ${rel_dirname}/${basename} ${root_device} ${args}
EOF
if test -n "${initrd}" ; then
# TRANSLATORS: ramdisk isn't identifier. Should be translated.
Index: grub-2.06~rc1/util/grub.d/20_linux_xen.in
===================================================================
--- grub-2.06~rc1.orig/util/grub.d/20_linux_xen.in
+++ grub-2.06~rc1/util/grub.d/20_linux_xen.in
@@ -107,6 +107,11 @@ linux_entry_xsm ()
args="$5"
xen_args="$6"
xsm="$7"
+ if [ -n "${linux_root_device_thisversion}" ]; then
+ root_device="root=${linux_root_device_thisversion}"
+ else
+ root_device=""
+ fi
# If user wants to enable XSM support, make sure there's
# corresponding policy file.
if ${xsm} ; then
@@ -157,7 +162,7 @@ linux_entry_xsm ()
fi
${xen_loader} ${rel_xen_dirname}/${xen_basename} placeholder ${xen_args} \${xen_rm_opts}
echo '$(echo "$lmessage" | grub_quote)'
- ${module_loader} ${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ${args}
+ ${module_loader} ${rel_dirname}/${basename} placeholder ${root_device} ${args}
EOF
if test -n "${initrd}" ; then
# TRANSLATORS: ramdisk isn't identifier. Should be translated.