Blob Blame History Raw
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Colin Watson <cjwatson@ubuntu.com>
Date: Thu, 10 Apr 2014 16:54:33 +0100
Subject: [PATCH] Tolerate devices with no filesystem UUID returned by
 os-prober

* util/grub.d/30_os-prober.in: Tolerate devices with no filesystem
UUID.  Other parts of grub-mkconfig tolerate these, they were
previously allowed here up to commit
55e706c918922def17f5012c23cfe88c4c645208, and they can arise in
practice when the system has active LVM snapshots.
Fixes Ubuntu bug #1287436.
---
 ChangeLog                   |  9 +++++++++
 util/grub.d/30_os-prober.in | 23 +++++++++++++----------
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7f0c57dc0ae..35564681a4d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2014-04-10  Colin Watson  <cjwatson@ubuntu.com>
+
+	* util/grub.d/30_os-prober.in: Tolerate devices with no filesystem
+	UUID.  Other parts of grub-mkconfig tolerate these, they were
+	previously allowed here up to commit
+	55e706c918922def17f5012c23cfe88c4c645208, and they can arise in
+	practice when the system has active LVM snapshots.
+	Fixes Ubuntu bug #1287436.
+
 2014-04-10  Colin Watson  <cjwatson@ubuntu.com>
 
 	* grub-core/disk/lvm.c (grub_lvm_detect): Search for
diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in
index 7cf8487d63a..6f38c82a554 100644
--- a/util/grub.d/30_os-prober.in
+++ b/util/grub.d/30_os-prober.in
@@ -112,16 +112,17 @@ for OS in ${OSPROBED} ; do
   LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
   LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
   BOOT="`echo ${OS} | cut -d ':' -f 4`"
-  UUID="`${grub_probe} --target=fs_uuid --device ${DEVICE%@*}`"
-  EXPUUID="$UUID"
+  if UUID="`${grub_probe} --target=fs_uuid --device ${DEVICE%@*}`"; then
+    EXPUUID="$UUID"
 
-  if [ x"${DEVICE#*@}" != x ] ; then
+    if [ x"${DEVICE#*@}" != x ] ; then
       EXPUUID="${EXPUUID}@${DEVICE#*@}"
-  fi
+    fi
 
-  if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" ] && [ "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then
-    echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2
-    continue
+    if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" ] && [ "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then
+      echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2
+      continue
+    fi
   fi
 
   BTRFS="`echo ${OS} | cut -d ':' -f 5`"
@@ -277,9 +278,11 @@ EOF
       echo "$title_correction_code"
     ;;
     macosx)
-      OSXUUID="${UUID}"
-      osx_entry xnu_kernel 32
-      osx_entry xnu_kernel64 64
+      if [ "${UUID}" ]; then
+	OSXUUID="${UUID}"
+	osx_entry xnu_kernel 32
+	osx_entry xnu_kernel64 64
+      fi
     ;;
     hurd)
       onstr="$(gettext_printf "(on %s)" "${DEVICE}")"