forked from pool/grub2
8ee92f5194
- Implement NV index mode for TPM 2.0 key protector 0001-protectors-Implement-NV-index.patch - Fall back to passphrase mode when the key protector fails to unlock the disk 0002-cryptodisk-Fallback-to-passphrase.patch - Wipe out the cached key cleanly 0003-cryptodisk-wipe-out-the-cached-keys-from-protectors.patch - Make diskfiler to look up cryptodisk devices first 0004-diskfilter-look-up-cryptodisk-devices-first.patch - Version bump to 2.12~rc1 * Added: - grub-2.12~rc1.tar.xz * Removed: - grub-2.06.tar.xz * Patch dropped merged by new version: - grub2-GRUB_CMDLINE_LINUX_RECOVERY-for-recovery-mode.patch - grub2-s390x-02-kexec-module-added-to-emu.patch - grub2-efi-chainloader-root.patch - grub2-Fix-incorrect-netmask-on-ppc64.patch - 0001-osdep-Introduce-include-grub-osdep-major.h-and-use-i.patch - 0002-osdep-linux-hostdisk-Use-stat-instead-of-udevadm-for.patch - 0002-net-read-bracketed-ipv6-addrs-and-port-numbers.patch - grub2-s390x-10-keep-network-at-kexec.patch - 0001-Fix-build-error-in-binutils-2.36.patch - 0001-emu-fix-executable-stack-marking.patch - 0046-squash-verifiers-Move-verifiers-API-to-kernel-image.patch - 0001-30_uefi-firmware-fix-printf-format-with-null-byte.patch - 0001-tpm-Pass-unknown-error-as-non-fatal-but-debug-print-.patch - 0001-Filter-out-POSIX-locale-for-translation.patch OBS-URL: https://build.opensuse.org/request/show/1105405 OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=458
118 lines
3.7 KiB
Diff
118 lines
3.7 KiB
Diff
From: Michael Chang <mchang@suse.com>
|
|
References: bsc#1085842
|
|
Patch-Mainline: no
|
|
|
|
The grub can be installed with removable option to support booting from
|
|
removable media with standard UEFI default file path of the form:
|
|
\EFI\BOOT\BOOT{machine type short-name}.EFI
|
|
|
|
It does not make use of distributor directory, which becomes a problem for UEFI
|
|
Xen installation as it requires that directory to be present for storing xen
|
|
stuff like chainloaded hypervisor, xen kernel and so on. Moreover it makes bad
|
|
assumption that hypervisor will be chainloaded by grub under the same
|
|
directory, which is also not always true.
|
|
|
|
This patch fixes the problem by ensuring the directory available to Xen
|
|
installation if any Xen hypervisor found and independent to grub boot path
|
|
$cmdpath to work.
|
|
|
|
---
|
|
util/grub.d/20_linux_xen.in | 62 ++++++++++++++++++++++++--------------------
|
|
1 file changed, 35 insertions(+), 27 deletions(-)
|
|
|
|
--- a/util/grub.d/20_linux_xen.in
|
|
+++ b/util/grub.d/20_linux_xen.in
|
|
@@ -113,32 +113,6 @@
|
|
|
|
title_correction_code=
|
|
|
|
-if [ -d /sys/firmware/efi ]; then
|
|
- is_efi=true
|
|
- err_msg=""
|
|
- efi_dir="/boot/efi/efi/${os}"
|
|
- grub_dir=/boot/@PACKAGE@
|
|
- xen_dir=/usr/share/efi/$machine
|
|
- [ -d $xen_dir ] || xen_dir=/usr/lib64/efi
|
|
- for d in $grub_dir $efi_dir $xen_dir; do
|
|
- [ ! -d "$d" ] || continue
|
|
- err_msg="${err_msg}$ME: Essential directory '$d' not found!\n"
|
|
- done
|
|
- if ! [ -d "$efi_dir" -a -d "$grub_dir" -a -d "$xen_dir" ]; then
|
|
- err_msg="${err_msg}$ME: XEN configuration skipped!\n"
|
|
- else
|
|
- rm -f $grub_dir/xen*.cfg
|
|
- if [ -s $efi_dir/grub.xen-files ]; then
|
|
- for f in $(sort $efi_dir/grub.xen-files| uniq); do
|
|
- rm -f $efi_dir/$f
|
|
- done
|
|
- : > $efi_dir/grub.xen-files
|
|
- fi
|
|
- fi
|
|
-else
|
|
- is_efi=false
|
|
-fi
|
|
-
|
|
grub2_unquote ()
|
|
{
|
|
awk '
|
|
@@ -264,10 +238,15 @@
|
|
kernel=${basename} root=${linux_root_device_thisversion} ${args_unq}
|
|
ramdisk=${initrd_real}
|
|
EOF
|
|
+ if [ -z "${prepare_efi_cache}" ]; then
|
|
+ grub_device_efi="`${grub_probe} --target=device /boot/efi`"
|
|
+ prepare_efi_cache="$(prepare_grub_to_access_device ${grub_device_efi} | grub_add_tab)"
|
|
+ fi
|
|
+ printf '%s\n' "${prepare_efi_cache}" | sed "s/^/$submenu_indentation/"
|
|
message="$(gettext_printf "Loading Xen %s with Linux %s ..." ${xen_version} ${version})"
|
|
sed "s/^/$submenu_indentation/" <<-EOF
|
|
echo '$(echo "$message" | grub_quote)'
|
|
- chainloader \$cmdpath/${xen_basename} ${xen_basename} ${SUSE_CMDLINE_XENEFI} $section
|
|
+ chainloader ${rel_efi_dir}/${xen_basename} ${xen_basename} ${SUSE_CMDLINE_XENEFI} $section
|
|
}
|
|
EOF
|
|
for f in ${grub_dir}/$xen_cfg ${xen_dir}/${xen_basename} ${dirname}/${basename} ${dirname}/${initrd_real}; do
|
|
@@ -363,6 +342,7 @@
|
|
done
|
|
fi
|
|
prepare_boot_cache=
|
|
+prepare_efi_cache=
|
|
boot_device_id=
|
|
|
|
title_correction_code=
|
|
@@ -432,6 +412,34 @@
|
|
|
|
is_top_level=true
|
|
|
|
+if [ -d /sys/firmware/efi ] && [ "x${xen_list}" != "x" ]; then
|
|
+ is_efi=true
|
|
+ err_msg=""
|
|
+ efi_dir="/boot/efi/efi/${os}"
|
|
+ grub_dir=/boot/grub2
|
|
+ xen_dir=/usr/share/efi/$machine
|
|
+ [ -d $xen_dir ] || xen_dir=/usr/lib64/efi
|
|
+ for d in $grub_dir $xen_dir; do
|
|
+ [ ! -d "$d" ] || continue
|
|
+ err_msg="${err_msg}$ME: Essential directory '$d' not found!\n"
|
|
+ done
|
|
+ if ! [ -d "$grub_dir" -a -d "$xen_dir" ]; then
|
|
+ err_msg="${err_msg}$ME: XEN configuration skipped!\n"
|
|
+ else
|
|
+ mkdir -p $efi_dir
|
|
+ rel_efi_dir=`make_system_path_relative_to_its_root $efi_dir`
|
|
+ rm -f $grub_dir/xen*.cfg
|
|
+ if [ -s $efi_dir/grub.xen-files ]; then
|
|
+ for f in $(sort $efi_dir/grub.xen-files| uniq); do
|
|
+ rm -f $efi_dir/$f
|
|
+ done
|
|
+ : > $efi_dir/grub.xen-files
|
|
+ fi
|
|
+ fi
|
|
+else
|
|
+ is_efi=false
|
|
+fi
|
|
+
|
|
for current_xen in ${reverse_sorted_xen_list}; do
|
|
xen_basename=`basename ${current_xen}`
|
|
xen_dirname=`dirname ${current_xen}`
|