2012-08-31 09:28:14 +02:00
|
|
|
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
|
|
|
|
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.
|
|
|
|
---
|
|
|
|
util/grub-mkconfig.in | 37 ++++++++++++++++++++++++++++++-------
|
|
|
|
1 files changed, 30 insertions(+), 7 deletions(-)
|
|
|
|
|
2014-01-10 21:19:21 +01:00
|
|
|
Index: grub-2.02~beta2/util/grub-mkconfig.in
|
|
|
|
===================================================================
|
|
|
|
--- grub-2.02~beta2.orig/util/grub-mkconfig.in
|
|
|
|
+++ grub-2.02~beta2/util/grub-mkconfig.in
|
|
|
|
@@ -128,22 +128,42 @@ else
|
2012-08-31 09:28:14 +02:00
|
|
|
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
|
|
|
|
+probe_nfsroot_device () {
|
|
|
|
+ while read line ; do
|
|
|
|
+ set -- $line
|
|
|
|
+ path=$5
|
|
|
|
+ fstype=$8
|
|
|
|
+ device=$9
|
2014-01-10 21:19:21 +01:00
|
|
|
|
|
|
|
-# 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
|
2012-08-31 09:28:14 +02:00
|
|
|
+ if [ "x${path}" = "x/" ] &&
|
|
|
|
+ [ "x${fstype}" = "xnfs" -o "x${fstype}" = "xnfs4" ] ; then
|
|
|
|
+ echo "$device"
|
|
|
|
+ return
|
|
|
|
+ fi
|
|
|
|
+ done
|
|
|
|
+} </proc/self/mountinfo
|
|
|
|
+
|
|
|
|
+NFSROOT_DEVICE="`probe_nfsroot_device`"
|
|
|
|
+
|
|
|
|
+if [ "x${NFSROOT_DEVICE}" != "x" ]; then
|
|
|
|
+ GRUB_DEVICE="$NFSROOT_DEVICE"
|
|
|
|
+ GRUB_DEVICE_UUID=""
|
|
|
|
+ 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
|
|
|
|
|
|
|
|
-# 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`"
|
2014-01-10 21:19:21 +01:00
|
|
|
|
|
|
|
-if [ x"$GRUB_FS" = xunknown ]; then
|
|
|
|
- GRUB_FS="$(stat -f --printf=%T / || echo unknown)"
|
|
|
|
+ if [ x"$GRUB_FS" = x ] || [ x"$GRUB_FS" = xunknown ]; then
|
|
|
|
+ GRUB_FS="$(stat -f --printf=%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
|
|
|
|
+
|
2012-08-31 09:28:14 +02:00
|
|
|
if test -f ${sysconfdir}/default/grub ; then
|
|
|
|
. ${sysconfdir}/default/grub
|
|
|
|
fi
|