Accepting request 569425 from home:michael-chang:branches:Base:System

- Check if default entry need to be corrected for updated distributor version
  and/or use fallback entry if default kernel entry removed (bsc#1065349)
  * grub2-check-default.sh
  * grub2-mkconfig-default-entry-correction.patch
- Fix grub2-mkconfig warning when disk is LVM PV (bsc#1071239)
  * grub2-getroot-scan-disk-pv.patch

OBS-URL: https://build.opensuse.org/request/show/569425
OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=287
This commit is contained in:
Michael Chang 2018-02-01 04:09:06 +00:00 committed by Git OBS Bridge
parent ab2abe9cbe
commit c7ddc4afcf
5 changed files with 204 additions and 1 deletions

125
grub2-check-default.sh Normal file
View File

@ -0,0 +1,125 @@
#!/bin/sh
set -e
fallback_entry () {
local saved=$1
local FALLBACK_MATCH=`echo $saved | sed -e '/>/!d' -e '/>/s/>.*$//'`
if [ -n "$FALLBACK_MATCH" ]; then
for i in $MENU_ENTRIES; do
if expr match "$i" "^$FALLBACK_MATCH" >/dev/null ; then
echo "$i"
return 0
fi
done
fi
return 0
}
run_command () {
[ x"$DEBUG_RUN" = x1 ] && echo $@ || $@
}
debug_print () {
[ x"$DEBUG_RUN" = x1 ] && echo $@ || true
}
case $1 in
-d|--debug)
DEBUG_RUN=1
;;
esac
GRUB_EDITENV="/usr/bin/grub2-editenv"
GRUB_SET_DEFAULT="/usr/sbin/grub2-set-default"
SAVED_ENTRY=`${GRUB_EDITENV} list | sed -ne "/^saved_entry=/{s@\"\(.*\)\"@\1@;t 1;s@'\(.*\)'@\1@;: 1;s@^[^=]\+=@@;p;b}"`
debug_print "SAVED_ENTRY=$SAVED_ENTRY"
[ -z "$SAVED_ENTRY" ] && exit 0
MENU_ENTRIES=`awk '
BEGIN {
bracket = 0
}
{
patsplit($0, words, "([^[:blank:]]+)|(\"[^\"]+\")|('\''[^'\'']*'\'')", sep)
cmd = words[1]
arg1 = words[2]
if (substr(arg1, 1, 1) == "\"" || substr(arg1, 1, 1) == "'\''") {
len = length(arg1)
arg1 = substr(arg1, 2, len - 2)
}
if (cmd == "submenu") {
submenu[bracket] = arg1
} else if (cmd == "menuentry") {
title = ""
for (i = 0; i < bracket; i++) {
if (i in submenu)
title = title submenu[i] ">"
}
print title arg1
}
for (w in words) {
if (words[w] == "{") {
bracket++
} else if (words[w] == "}") {
bracket--
}
}
}
' /boot/grub2/grub.cfg`
IFS=$'\n'
debug_print "MENU_ENTRIES="
for i in $MENU_ENTRIES; do
debug_print "$i"
done
for i in $MENU_ENTRIES; do
if [ "$SAVED_ENTRY" = "$i" ]; then
exit 0
fi
done
FALLBACK=`fallback_entry $SAVED_ENTRY`
if [ -n "$FALLBACK" ]; then
run_command ${GRUB_SET_DEFAULT} "$FALLBACK"
exit 0
fi
source /etc/os-release
NEW_SAVED_ENTRY=`echo $SAVED_ENTRY | sed -ne "s/$NAME [0-9a-zA-Z_.-]\\+/$NAME $VERSION/pg"`
debug_print "NEW_SAVED_ENTRY=$NEW_SAVED_ENTRY"
if [ "$NEW_SAVED_ENTRY" = "$SAVED_ENTRY" ]; then
exit 0
fi
IFS=$'\n'
for i in $MENU_ENTRIES; do
if [ $NEW_SAVED_ENTRY = $i ]; then
run_command ${GRUB_SET_DEFAULT} "$NEW_SAVED_ENTRY"
exit 0
fi
done
FALLBACK=`fallback_entry $NEW_SAVED_ENTRY`
if [ -n "$FALLBACK" ]; then
run_command ${GRUB_SET_DEFAULT} "$FALLBACK"
exit 0
fi
exit 0

View File

@ -0,0 +1,43 @@
From: Michael Chang <mchang@suse.com>
Subject: Fix grub2-mkconfig warning when disk is LVM PV
References: bsc#1071239
When a disk device was found in grub_util_biosdisk_get_grub_dev, its grub
hostdisk device name just returned. Since the disk could also be used as PV
disk, use grub_util_get_ldm to kick scanning of on disk metadata and adding it
to VG array.
---
Index: grub-2.02/util/getroot.c
===================================================================
--- grub-2.02.orig/util/getroot.c
+++ grub-2.02/util/getroot.c
@@ -272,8 +272,28 @@ grub_util_biosdisk_get_grub_dev (const c
grub_util_info ("%s is a parent of %s", sys_disk, os_dev);
if (!is_part)
{
+#if defined(__APPLE__)
free (sys_disk);
return make_device_name (drive);
+#else
+ char *name, *ldm_name;
+ grub_disk_t disk;
+
+ free (sys_disk);
+ name = make_device_name (drive);
+ disk = grub_disk_open (name);
+ if (!disk)
+ return name;
+ ldm_name = grub_util_get_ldm (disk, 0);
+ if (ldm_name)
+ {
+ grub_disk_close (disk);
+ grub_free (name);
+ return ldm_name;
+ }
+ grub_disk_close (disk);
+ return name;
+#endif
}
free (sys_disk);

View File

@ -0,0 +1,16 @@
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
@@ -311,6 +311,11 @@ and /etc/grub.d/* files or please file a
else
# none of the children aborted with error, install the new grub.cfg
mv -f ${grub_cfg}.new ${grub_cfg}
+ # check if default entry need to be corrected for updated distributor version
+ # and/or use fallback entry if default kernel entry removed
+ if test -x /usr/sbin/grub2-check-default; then
+ /usr/sbin/grub2-check-default >&2
+ fi
fi
fi

View File

@ -1,3 +1,13 @@
-------------------------------------------------------------------
Tue Jan 23 04:41:22 UTC 2018 - mchang@suse.com
- Check if default entry need to be corrected for updated distributor version
and/or use fallback entry if default kernel entry removed (bsc#1065349)
* grub2-check-default.sh
* grub2-mkconfig-default-entry-correction.patch
- Fix grub2-mkconfig warning when disk is LVM PV (bsc#1071239)
* grub2-getroot-scan-disk-pv.patch
-------------------------------------------------------------------
Fri Dec 8 09:30:46 UTC 2017 - mchang@suse.com

View File

@ -1,7 +1,7 @@
#
# spec file for package grub2
#
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -160,6 +160,7 @@ Source15: grub2-once.service
Source16: grub2-xen-pv-firmware.cfg
# required hook for systemd-sleep (bsc#941758)
Source17: grub2-systemd-sleep.sh
Source18: grub2-check-default.sh
Source1000: PATCH_POLICY
Patch1: rename-grub-info-file-to-grub2.patch
Patch2: grub2-linux.patch
@ -213,6 +214,7 @@ Patch82: grub2-diskfilter-support-pv-without-metadatacopies.patch
Patch83: grub2-efi-uga-64bit-fb.patch
Patch84: grub2-s390x-09-improve-zipl-setup.patch
Patch85: grub2-install-remove-useless-check-PReP-partition-is-empty.patch
Patch86: grub2-getroot-scan-disk-pv.patch
# Btrfs snapshot booting related patches
Patch101: grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch
Patch102: grub2-btrfs-02-export-subvolume-envvars.patch
@ -273,6 +275,9 @@ Patch412: 0013-tpm-i386-pc-diskboot-img.patch
# UEFI HTTP and related network protocol support (FATE#320130)
Patch420: 0001-add-support-for-UEFI-network-protocols.patch
Patch421: 0002-AUDIT-0-http-boot-tracker-bug.patch
# check if default entry need to be corrected for updated distributor version
# and/or use fallback entry if default kernel entry removed (bsc#1065349)
Patch430: grub2-mkconfig-default-entry-correction.patch
Requires: gettext-runtime
%if 0%{?suse_version} >= 1140
@ -487,6 +492,7 @@ swap partition while in resuming
%patch83 -p1
%patch84 -p1
%patch85 -p1
%patch86 -p1
%patch101 -p1
%patch102 -p1
%patch103 -p1
@ -537,6 +543,7 @@ swap partition while in resuming
%patch412 -p1
%patch420 -p1
%patch421 -p1
%patch430 -p1
# patches above may update the timestamp of grub.texi
# and via build-aux/mdate-sh they end up in grub2.info, breaking build-compare
[ -z "$SOURCE_DATE_EPOCH" ] ||\
@ -795,6 +802,7 @@ install -m 755 -D %{SOURCE14} $RPM_BUILD_ROOT%{_sysconfdir}/grub.d/80_suse_btrfs
install -m 644 -D %{SOURCE15} $RPM_BUILD_ROOT%{_unitdir}/grub2-once.service
install -m 755 -D %{SOURCE17} $RPM_BUILD_ROOT%{_libdir}/systemd/system-sleep/grub2.sleep
%endif
install -m 755 -D %{SOURCE18} $RPM_BUILD_ROOT%{_sbindir}/grub2-check-default
R=$RPM_BUILD_ROOT
%ifarch %{ix86} x86_64
@ -1018,6 +1026,7 @@ fi
%{_sbindir}/%{name}-probe
%{_sbindir}/%{name}-reboot
%{_sbindir}/%{name}-set-default
%{_sbindir}/%{name}-check-default
%{_bindir}/%{name}-editenv
%{_bindir}/%{name}-file
%{_bindir}/%{name}-fstest