mirror of
https://src.fedoraproject.org/rpms/grub2.git
synced 2024-12-01 00:48:18 +00:00
Two more BLS fixes
Only set blsdir if /boot/loader/entries is in a btrfs or zfs partition Related: rhbz#1688453 Fix some BLS snippets not being displayed in the GRUB menu Resolves: rhbz#1691232 Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
This commit is contained in:
parent
bbe7d2e505
commit
89b65757a9
4 changed files with 140 additions and 1 deletions
|
@ -0,0 +1,55 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
|
Date: Tue, 19 Mar 2019 01:27:57 +0100
|
||||||
|
Subject: [PATCH] Only set blsdir if /boot/loader/entries is in a btrfs or zfs
|
||||||
|
partition
|
||||||
|
|
||||||
|
Commit bfc756f8d86 ("Set blsdir if the BLS directory path isn't one of the
|
||||||
|
looked up by default") attempted to set blsdir if /boot/loader/entries was
|
||||||
|
not the real path of the directory containing the BLS snippets. Which may
|
||||||
|
be the case if for example /boot/loader/entries is in a btrfs subvolume.
|
||||||
|
|
||||||
|
But in the case of ostree, /boot/loader is a symlink to the directory with
|
||||||
|
the entries for the current deployment. So with ostree the blsdir will be
|
||||||
|
wrongly set, since GRUB is able to follow the symlinks just fine. In fact,
|
||||||
|
it has to follow the symlink since otherwise GRUB will always use the BLS
|
||||||
|
files for the deployment that the symlink pointed out when blsdir was set.
|
||||||
|
|
||||||
|
So only set blsdir if /boot/loader/entries is in a btrfs or zfs partition.
|
||||||
|
|
||||||
|
Related: rhbz#1688453
|
||||||
|
|
||||||
|
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
|
---
|
||||||
|
util/grub.d/10_linux.in | 3 ++-
|
||||||
|
util/grub.d/10_linux_bls.in | 3 ++-
|
||||||
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
|
||||||
|
index 2547dd52115..8f7ecf65df9 100644
|
||||||
|
--- a/util/grub.d/10_linux.in
|
||||||
|
+++ b/util/grub.d/10_linux.in
|
||||||
|
@@ -169,7 +169,8 @@ EOF
|
||||||
|
|
||||||
|
if [ "x${GRUB_GRUBENV_UPDATE}" = "xyes" ]; then
|
||||||
|
blsdir="/boot/loader/entries"
|
||||||
|
- if [ -d "${blsdir}" ]; then
|
||||||
|
+ [ -d "${blsdir}" ] && GRUB_BLS_FS="$(${grub_probe} --target=fs ${blsdir})"
|
||||||
|
+ if [ "x${GRUB_BLS_FS}" = "xbtrfs" ] || [ "x${GRUB_BLS_FS}" = "xzfs" ]; then
|
||||||
|
blsdir=$(make_system_path_relative_to_its_root "${blsdir}")
|
||||||
|
if [ "x${blsdir}" != "x/loader/entries" ] && [ "x${blsdir}" != "x/boot/loader/entries" ]; then
|
||||||
|
${grub_editenv} - set blsdir="${blsdir}"
|
||||||
|
diff --git a/util/grub.d/10_linux_bls.in b/util/grub.d/10_linux_bls.in
|
||||||
|
index 47b87c8a14b..1707e86f2d3 100644
|
||||||
|
--- a/util/grub.d/10_linux_bls.in
|
||||||
|
+++ b/util/grub.d/10_linux_bls.in
|
||||||
|
@@ -227,7 +227,8 @@ linux_entry ()
|
||||||
|
|
||||||
|
if [ "x${GRUB_GRUBENV_UPDATE}" = "xyes" ]; then
|
||||||
|
blsdir="/boot/loader/entries"
|
||||||
|
- if [ -d "${blsdir}" ]; then
|
||||||
|
+ [ -d "${blsdir}" ] && GRUB_BLS_FS="$(${grub_probe} --target=fs ${blsdir})"
|
||||||
|
+ if [ "x${GRUB_BLS_FS}" = "xbtrfs" ] || [ "x${GRUB_BLS_FS}" = "xzfs" ]; then
|
||||||
|
blsdir=$(make_system_path_relative_to_its_root "${blsdir}")
|
||||||
|
if [ "x${blsdir}" != "x/loader/entries" ] && [ "x${blsdir}" != "x/boot/loader/entries" ]; then
|
||||||
|
${grub_editenv} - set blsdir="${blsdir}"
|
|
@ -0,0 +1,76 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
|
Date: Fri, 22 Mar 2019 11:14:26 +0100
|
||||||
|
Subject: [PATCH] blscfg: don't use grub_list_t and the GRUB_AS_LIST() macro
|
||||||
|
|
||||||
|
We are not using GRUB's list functions anyways since we want to add new
|
||||||
|
items in the middle ot the list but GRUB's grub_list_push() only allows
|
||||||
|
to add new items at the beginning of the list. So don't use grub_list_t
|
||||||
|
and GRUB_AS_LIST() macro and just reference struct bls_entry * directly.
|
||||||
|
|
||||||
|
We can't change GRUB lists API because we want the blscfg module to not
|
||||||
|
need external symbols so it can be updated without updating GRUB's core.
|
||||||
|
|
||||||
|
This also solves a bug where the struct bls_entry .next field wasn't set
|
||||||
|
correctly which caused some entries to not be populated in the grub menu.
|
||||||
|
|
||||||
|
Resolves: rhbz#1691232
|
||||||
|
|
||||||
|
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||||
|
---
|
||||||
|
grub-core/commands/blscfg.c | 10 +++++-----
|
||||||
|
include/grub/menu.h | 2 +-
|
||||||
|
2 files changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c
|
||||||
|
index 5635066e3eb..bb93b7f4904 100644
|
||||||
|
--- a/grub-core/commands/blscfg.c
|
||||||
|
+++ b/grub-core/commands/blscfg.c
|
||||||
|
@@ -350,13 +350,13 @@ static int bls_cmp(const struct bls_entry *e0, const struct bls_entry *e1)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void list_add_tail(grub_list_t head, grub_list_t item)
|
||||||
|
+static void list_add_tail(struct bls_entry *head, struct bls_entry *item)
|
||||||
|
{
|
||||||
|
item->next = head;
|
||||||
|
if (head->prev)
|
||||||
|
- (*head->prev)->next = item;
|
||||||
|
+ head->prev->next = item;
|
||||||
|
item->prev = head->prev;
|
||||||
|
- head->prev = &item;
|
||||||
|
+ head->prev = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int bls_add_entry(struct bls_entry *entry)
|
||||||
|
@@ -378,7 +378,7 @@ static int bls_add_entry(struct bls_entry *entry)
|
||||||
|
|
||||||
|
if (rc == 1) {
|
||||||
|
grub_dprintf ("blscfg", "Add entry with id \"%s\"\n", entry->filename);
|
||||||
|
- list_add_tail (GRUB_AS_LIST (e), GRUB_AS_LIST (entry));
|
||||||
|
+ list_add_tail (e, entry);
|
||||||
|
if (e == entries) {
|
||||||
|
entries = entry;
|
||||||
|
entry->prev = NULL;
|
||||||
|
@@ -391,7 +391,7 @@ static int bls_add_entry(struct bls_entry *entry)
|
||||||
|
if (last) {
|
||||||
|
grub_dprintf ("blscfg", "Add entry with id \"%s\"\n", entry->filename);
|
||||||
|
last->next = entry;
|
||||||
|
- entry->prev = &last;
|
||||||
|
+ entry->prev = last;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
diff --git a/include/grub/menu.h b/include/grub/menu.h
|
||||||
|
index eea493f74b1..0acdc2aa6bf 100644
|
||||||
|
--- a/include/grub/menu.h
|
||||||
|
+++ b/include/grub/menu.h
|
||||||
|
@@ -23,7 +23,7 @@
|
||||||
|
struct bls_entry
|
||||||
|
{
|
||||||
|
struct bls_entry *next;
|
||||||
|
- struct bls_entry **prev;
|
||||||
|
+ struct bls_entry *prev;
|
||||||
|
struct keyval **keyvals;
|
||||||
|
int nkeyvals;
|
||||||
|
char *filename;
|
|
@ -283,3 +283,5 @@ Patch0282: 0282-Set-blsdir-if-the-BLS-directory-path-isn-t-one-of-th.patch
|
||||||
Patch0283: 0283-Check-if-blsdir-exists-before-attempting-to-get-it-s.patch
|
Patch0283: 0283-Check-if-blsdir-exists-before-attempting-to-get-it-s.patch
|
||||||
Patch0284: 0284-blscfg-fallback-to-default_kernelopts-if-BLS-option-.patch
|
Patch0284: 0284-blscfg-fallback-to-default_kernelopts-if-BLS-option-.patch
|
||||||
Patch0285: 0285-grub-switch-to-blscfg-copy-increment.mod-for-legacy-.patch
|
Patch0285: 0285-grub-switch-to-blscfg-copy-increment.mod-for-legacy-.patch
|
||||||
|
Patch0286: 0286-Only-set-blsdir-if-boot-loader-entries-is-in-a-btrfs.patch
|
||||||
|
Patch0287: 0287-blscfg-don-t-use-grub_list_t-and-the-GRUB_AS_LIST-ma.patch
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
Name: grub2
|
Name: grub2
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 2.02
|
Version: 2.02
|
||||||
Release: 73%{?dist}
|
Release: 74%{?dist}
|
||||||
Summary: Bootloader with support for Linux, Multiboot and more
|
Summary: Bootloader with support for Linux, Multiboot and more
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
URL: http://www.gnu.org/software/grub/
|
URL: http://www.gnu.org/software/grub/
|
||||||
|
@ -476,6 +476,12 @@ rm -r /boot/grub2.tmp/ || :
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Mar 22 2019 Javier Martinez Canillas <javierm@redhat.com> 2.02-74
|
||||||
|
- Only set blsdir if /boot/loader/entries is in a btrfs or zfs partition
|
||||||
|
Related: rhbz#1688453
|
||||||
|
- Fix some BLS snippets not being displayed in the GRUB menu
|
||||||
|
Resolves: rhbz#1691232
|
||||||
|
|
||||||
* Tue Mar 12 2019 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.02-73
|
* Tue Mar 12 2019 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.02-73
|
||||||
- Never remove boot loader configuration for other boot loaders from the ESP.
|
- Never remove boot loader configuration for other boot loaders from the ESP.
|
||||||
This would render machines with sd-boot unbootable (#1648907).
|
This would render machines with sd-boot unbootable (#1648907).
|
||||||
|
|
Loading…
Reference in a new issue