ec4acbb
From 2d588223e2beb9af35ed05e57d19563f9aaf19ac Mon Sep 17 00:00:00 2001
bc092b9
From: Michael Chang <mchang@suse.com>
bc092b9
Date: Thu, 21 Aug 2014 03:39:11 +0000
ec4acbb
Subject: [PATCH 178/206] grub2-btrfs-05-grub2-mkconfig
bc092b9
bc092b9
---
bc092b9
 util/grub-mkconfig.in       |  3 ++-
bc092b9
 util/grub-mkconfig_lib.in   |  4 ++++
bc092b9
 util/grub.d/00_header.in    | 24 +++++++++++++++++++++++-
bc092b9
 util/grub.d/10_linux.in     |  4 ++++
bc092b9
 util/grub.d/20_linux_xen.in |  4 ++++
bc092b9
 5 files changed, 37 insertions(+), 2 deletions(-)
bc092b9
bc092b9
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
ec4acbb
index e32de5ef361..3b0bfe40308 100644
bc092b9
--- a/util/grub-mkconfig.in
bc092b9
+++ b/util/grub-mkconfig.in
bc092b9
@@ -239,7 +239,8 @@ export GRUB_DEFAULT \
bc092b9
   GRUB_BADRAM \
bc092b9
   GRUB_OS_PROBER_SKIP_LIST \
bc092b9
   GRUB_DISABLE_SUBMENU \
bc092b9
-  GRUB_DEFAULT_DTB
bc092b9
+  GRUB_DEFAULT_DTB \
bc092b9
+  SUSE_BTRFS_SNAPSHOT_BOOTING
bc092b9
 
bc092b9
 if test "x${grub_cfg}" != "x"; then
bc092b9
   rm -f "${grub_cfg}.new"
bc092b9
diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in
ec4acbb
index 9c410eae493..2fb4f4f8143 100644
bc092b9
--- a/util/grub-mkconfig_lib.in
bc092b9
+++ b/util/grub-mkconfig_lib.in
bc092b9
@@ -52,7 +52,11 @@ grub_warn ()
bc092b9
 
bc092b9
 make_system_path_relative_to_its_root ()
bc092b9
 {
bc092b9
+  if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ] ; then
bc092b9
+  "${grub_mkrelpath}" -r "$1"
bc092b9
+  else
bc092b9
   "${grub_mkrelpath}" "$1"
bc092b9
+  fi
bc092b9
 }
bc092b9
 
bc092b9
 is_path_readable_by_grub ()
bc092b9
diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in
ec4acbb
index 858b526c925..e2a53300126 100644
bc092b9
--- a/util/grub.d/00_header.in
bc092b9
+++ b/util/grub.d/00_header.in
bc092b9
@@ -27,6 +27,14 @@ export TEXTDOMAINDIR="@localedir@"
bc092b9
 
bc092b9
 . "$pkgdatadir/grub-mkconfig_lib"
bc092b9
 
bc092b9
+if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ] &&
bc092b9
+   [ "x${GRUB_FS}" = "xbtrfs" ] ; then
bc092b9
+    cat <
bc092b9
+set btrfs_relative_path="y"
bc092b9
+export btrfs_relative_path
bc092b9
+EOF
bc092b9
+fi
bc092b9
+
bc092b9
 # Do this as early as possible, since other commands might depend on it.
bc092b9
 # (e.g. the `loadfont' command might need lvm or raid modules)
bc092b9
 for i in ${GRUB_PRELOAD_MODULES} ; do
bc092b9
@@ -45,7 +53,9 @@ if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT
bc092b9
 cat << EOF
bc092b9
 set pager=1
bc092b9
 
bc092b9
-if [ -s \$prefix/grubenv ]; then
bc092b9
+if [ -f \${config_directory}/grubenv ]; then
bc092b9
+  load_env -f \${config_directory}/grubenv
bc092b9
+elif [ -s \$prefix/grubenv ]; then
bc092b9
   load_env
bc092b9
 fi
bc092b9
 EOF
bc092b9
@@ -356,3 +366,15 @@ fi
bc092b9
 if [ "x${GRUB_BADRAM}" != "x" ] ; then
bc092b9
   echo "badram ${GRUB_BADRAM}"
bc092b9
 fi
bc092b9
+
bc092b9
+if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ] &&
bc092b9
+   [ "x${GRUB_FS}" = "xbtrfs" ] ; then
bc092b9
+    # Note: No $snapshot_num on *read-only* rollback!  (bsc#901487)
bc092b9
+    cat <
bc092b9
+if [ -n "\$extra_cmdline" ]; then
bc092b9
+  submenu "Bootable snapshot #\$snapshot_num" {
bc092b9
+    menuentry "If OK, run 'snapper rollback' and reboot." { true; }
bc092b9
+  }
bc092b9
+fi
bc092b9
+EOF
bc092b9
+fi
bc092b9
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
ec4acbb
index c9bf223f273..7e78ad33636 100644
bc092b9
--- a/util/grub.d/10_linux.in
bc092b9
+++ b/util/grub.d/10_linux.in
bc092b9
@@ -56,10 +56,14 @@ fi
bc092b9
 
bc092b9
 case x"$GRUB_FS" in
bc092b9
     xbtrfs)
bc092b9
+	if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ]; then
bc092b9
+	GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} \${extra_cmdline}"
bc092b9
+	else
bc092b9
 	rootsubvol="`make_system_path_relative_to_its_root /`"
bc092b9
 	rootsubvol="${rootsubvol#/}"
bc092b9
 	if [ "x${rootsubvol}" != x ]; then
bc092b9
 	    GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
bc092b9
+	fi
bc092b9
 	fi;;
bc092b9
     xzfs)
bc092b9
 	rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
bc092b9
diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in
ec4acbb
index 54f1ec8a2fd..462f8e1f819 100644
bc092b9
--- a/util/grub.d/20_linux_xen.in
bc092b9
+++ b/util/grub.d/20_linux_xen.in
bc092b9
@@ -63,10 +63,14 @@ fi
bc092b9
 
bc092b9
 case x"$GRUB_FS" in
bc092b9
     xbtrfs)
bc092b9
+	if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ]; then
bc092b9
+	GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} \${extra_cmdline}"
bc092b9
+	else
bc092b9
 	rootsubvol="`make_system_path_relative_to_its_root /`"
bc092b9
 	rootsubvol="${rootsubvol#/}"
bc092b9
 	if [ "x${rootsubvol}" != x ]; then
bc092b9
 	    GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
bc092b9
+	fi
bc092b9
 	fi;;
bc092b9
     xzfs)
bc092b9
 	rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
bc092b9
-- 
ec4acbb
2.15.0
bc092b9