Exclude /etc/grub.d/01_fallback_counting until we work through some design

questions.
  Resolves: rhbz#1614637

Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
Peter Jones 2018-10-04 17:10:15 -04:00
parent 8cce506787
commit 7c415d8287
32 changed files with 221 additions and 134 deletions

View file

@ -1,48 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Christian Glombek <lorbus@fedoraproject.org>
Date: Tue, 31 Jul 2018 11:12:06 +0200
Subject: [PATCH] Boot Counting
Adds 01_fallback_counting.in script to support boot counting before
falling back to the previous menu entry automatically
---
Makefile.util.def | 6 ++++++
util/grub.d/01_fallback_counting.in | 12 ++++++++++++
2 files changed, 18 insertions(+)
create mode 100644 util/grub.d/01_fallback_counting.in
diff --git a/Makefile.util.def b/Makefile.util.def
index cba4d500198..c8cb91308d9 100644
--- a/Makefile.util.def
+++ b/Makefile.util.def
@@ -448,6 +448,12 @@ script = {
installdir = grubconf;
};
+script = {
+ name = '01_fallback_counting';
+ common = util/grub.d/01_fallback_counting.in;
+ installdir = grubconf;
+};
+
script = {
name = '01_menu_auto_hide';
common = util/grub.d/01_menu_auto_hide.in;
diff --git a/util/grub.d/01_fallback_counting.in b/util/grub.d/01_fallback_counting.in
new file mode 100644
index 00000000000..ecfc7401474
--- /dev/null
+++ b/util/grub.d/01_fallback_counting.in
@@ -0,0 +1,12 @@
+#! /bin/sh -e
+
+# Boot Counting
+if [ "\${boot_counter}" -a "\${boot_success}" = "0" ]; then
+ if [ "\${boot_counter}" = "0" -o "\${boot_counter}" = "-1" ]; then
+ set default=1
+ set boot_counter=-1
+ else
+ set boot_counter=$((\${boot_counter}-1))
+ fi
+ save_env boot_counter
+fi

View file

@ -0,0 +1,187 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 4 Oct 2018 14:22:09 -0400
Subject: [PATCH] Reimplement boot_counter
This adds "increment" and "decrement" commands, and uses them to maintain our
variables in 01_fallback_counter. It also simplifies the counter logic, so
that there are no nested tests that conflict with each other.
Apparently, this *really* wasn't tested well enough.
Resolves: rhbz#1614637
Signed-off-by: Peter Jones <pjones@redhat.com>
---
Makefile.util.def | 6 +++
grub-core/Makefile.core.def | 5 ++
grub-core/commands/increment.c | 105 ++++++++++++++++++++++++++++++++++++
util/grub.d/01_fallback_counting.in | 15 ++++++
4 files changed, 131 insertions(+)
create mode 100644 grub-core/commands/increment.c
create mode 100644 util/grub.d/01_fallback_counting.in
diff --git a/Makefile.util.def b/Makefile.util.def
index cba4d500198..c8cb91308d9 100644
--- a/Makefile.util.def
+++ b/Makefile.util.def
@@ -448,6 +448,12 @@ script = {
installdir = grubconf;
};
+script = {
+ name = '01_fallback_counting';
+ common = util/grub.d/01_fallback_counting.in;
+ installdir = grubconf;
+};
+
script = {
name = '01_menu_auto_hide';
common = util/grub.d/01_menu_auto_hide.in;
diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index 701e5d32fa2..1bf666b5ec1 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -364,6 +364,11 @@ kernel = {
extra_dist = kern/mips/cache_flush.S;
};
+module = {
+ name = increment;
+ common = commands/increment.c;
+};
+
program = {
name = grub-emu;
mansection = 1;
diff --git a/grub-core/commands/increment.c b/grub-core/commands/increment.c
new file mode 100644
index 00000000000..79cf137656c
--- /dev/null
+++ b/grub-core/commands/increment.c
@@ -0,0 +1,105 @@
+/* increment.c - Commands to increment and decrement variables. */
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
+ *
+ * GRUB is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GRUB is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/dl.h>
+#include <grub/term.h>
+#include <grub/time.h>
+#include <grub/types.h>
+#include <grub/misc.h>
+#include <grub/extcmd.h>
+#include <grub/i18n.h>
+#include <grub/env.h>
+
+GRUB_MOD_LICENSE ("GPLv3+");
+
+typedef enum {
+ INCREMENT,
+ DECREMENT,
+} operation;
+
+static grub_err_t
+incr_decr(operation op, int argc, char **args)
+{
+ const char *old;
+ char *new;
+ long value;
+
+ if (argc < 1)
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, N_ ("no variable specified"));
+ if (argc > 1)
+ return grub_error (GRUB_ERR_BAD_ARGUMENT, N_ ("too many arguments"));
+
+ old = grub_env_get (*args);
+ if (!old)
+ return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("No such variable \"%s\""),
+ *args);
+
+ value = grub_strtol (old, NULL, 0);
+ if (grub_errno != GRUB_ERR_NONE)
+ return grub_errno;
+
+ switch (op)
+ {
+ case INCREMENT:
+ value += 1;
+ break;
+ case DECREMENT:
+ value -= 1;
+ break;
+ }
+
+ new = grub_xasprintf ("%ld", value);
+ if (!new)
+ return grub_errno;
+
+ grub_env_set (*args, new);
+ grub_free (new);
+
+ return GRUB_ERR_NONE;
+}
+
+static grub_err_t
+grub_cmd_incr(struct grub_command *cmd UNUSED,
+ int argc, char **args)
+{
+ return incr_decr(INCREMENT, argc, args);
+}
+
+static grub_err_t
+grub_cmd_decr(struct grub_command *cmd UNUSED,
+ int argc, char **args)
+{
+ return incr_decr(DECREMENT, argc, args);
+}
+
+static grub_command_t cmd_incr, cmd_decr;
+
+GRUB_MOD_INIT(increment)
+{
+ cmd_incr = grub_register_command ("increment", grub_cmd_incr, N_("VARIABLE"),
+ N_("increment VARIABLE"));
+ cmd_decr = grub_register_command ("decrement", grub_cmd_decr, N_("VARIABLE"),
+ N_("decrement VARIABLE"));
+}
+
+GRUB_MOD_FINI(increment)
+{
+ grub_unregister_command (cmd_incr);
+ grub_unregister_command (cmd_decr);
+}
diff --git a/util/grub.d/01_fallback_counting.in b/util/grub.d/01_fallback_counting.in
new file mode 100644
index 00000000000..6ca13da03df
--- /dev/null
+++ b/util/grub.d/01_fallback_counting.in
@@ -0,0 +1,15 @@
+#! /bin/sh -e
+
+# Boot Counting
+cat << EOF
+insmod increment
+if [ -z "\${boot_counter}" ]; then
+ set boot_counter=0
+elif [ "\${boot_counter}" = "0" -o "\${boot_counter}" = "-1" ]; then
+ increment default
+ set boot_counter=-1
+else
+ decrement boot_counter
+fi
+save_env boot_counter
+EOF

View file

@ -1,27 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Christian Glombek <lorbus@fedoraproject.org>
Date: Tue, 2 Oct 2018 15:41:18 +0200
Subject: [PATCH] Fix boot counting grub.cfg snippet creation Fixes BZ1614637
---
util/grub.d/01_fallback_counting.in | 2 ++
1 file changed, 2 insertions(+)
diff --git a/util/grub.d/01_fallback_counting.in b/util/grub.d/01_fallback_counting.in
index ecfc7401474..afe06199a93 100644
--- a/util/grub.d/01_fallback_counting.in
+++ b/util/grub.d/01_fallback_counting.in
@@ -1,6 +1,7 @@
#! /bin/sh -e
# Boot Counting
+cat << EOF
if [ "\${boot_counter}" -a "\${boot_success}" = "0" ]; then
if [ "\${boot_counter}" = "0" -o "\${boot_counter}" = "-1" ]; then
set default=1
@@ -10,3 +11,4 @@ if [ "\${boot_counter}" -a "\${boot_success}" = "0" ]; then
fi
save_env boot_counter
fi
+EOF
\ No newline at end of file

View file

@ -1,29 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Wed, 3 Oct 2018 15:53:18 -0400
Subject: [PATCH] Fix the fallback counting script even harder.
Apparently, this wasn't tested well enough.
Resolves: rhbz#1614637
Signed-off-by: Peter Jones <pjones@redhat.com>
---
util/grub.d/01_fallback_counting.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/util/grub.d/01_fallback_counting.in b/util/grub.d/01_fallback_counting.in
index afe06199a93..31e8981887b 100644
--- a/util/grub.d/01_fallback_counting.in
+++ b/util/grub.d/01_fallback_counting.in
@@ -7,8 +7,8 @@ if [ "\${boot_counter}" -a "\${boot_success}" = "0" ]; then
set default=1
set boot_counter=-1
else
- set boot_counter=$((\${boot_counter}-1))
+ set boot_counter=\$((\${boot_counter}-1))
fi
save_env boot_counter
fi
-EOF
\ No newline at end of file
+EOF

View file

@ -368,7 +368,7 @@ GRUB_MODULES=" all_video boot blscfg btrfs \\\
cat configfile \\\
echo efi_netfs efifwsetup efinet ext2 \\\
fat font gfxmenu gfxterm gzio \\\
halt hfsplus http iso9660 jpeg \\\
halt hfsplus http increment iso9660 jpeg \\\
loadenv loopback linux lvm lsefi lsefimmap \\\
mdraid09 mdraid1x minicmd net \\\
normal part_apple part_msdos part_gpt \\\

View file

@ -213,31 +213,29 @@ Patch0212: 0212-blscfg-Fallback-to-search-BLS-snippets-in-boot-loade.patch
Patch0213: 0213-blscfg-Don-t-attempt-to-sort-by-version-if-not-prese.patch
Patch0214: 0214-blscfg-remove-logic-to-read-the-grubenv-file-and-set.patch
Patch0215: 0215-Rename-00_menu_auto_hide.in-to-01_menu_auto_hide.in.patch
Patch0216: 0216-Boot-Counting.patch
Patch0217: 0217-efinet-also-use-the-firmware-acceleration-for-http.patch
Patch0218: 0218-efi-http-Make-root_url-reflect-the-protocol-hostname.patch
Patch0219: 0219-Disable-multiboot-multiboot2-and-linux16-modules-on-.patch
Patch0220: 0220-Force-everything-to-use-python3.patch
Patch0221: 0221-Fix-an-8-year-old-typo.patch
Patch0222: 0222-autogen-don-t-run-autoreconf-in-the-topdir.patch
Patch0223: 0223-Make-it-so-we-can-tell-configure-which-cflags-utils-.patch
Patch0224: 0224-module-verifier-make-it-possible-to-run-checkers-on-.patch
Patch0225: 0225-grub-module-verifier-report-the-filename-or-modname-.patch
Patch0226: 0226-Make-efi_netfs-not-duplicate-symbols-from-efinet.patch
Patch0227: 0227-Rework-how-the-fdt-command-builds.patch
Patch0228: 0228-Disable-non-wordsize-allocations-on-arm.patch
Patch0229: 0229-strip-R-.note.gnu.property-at-more-places.patch
Patch0230: 0230-Prepend-prefix-when-HTTP-path-is-relative.patch
Patch0231: 0231-Make-linux_arm_kernel_header.hdr_offset-be-at-the-ri.patch
Patch0232: 0232-Mark-some-unused-stuff-unused.patch
Patch0233: 0233-Make-grub_error-more-verbose.patch
Patch0234: 0234-Make-reset-an-alias-for-the-reboot-command.patch
Patch0235: 0235-EFI-more-debug-output-on-GOP-and-UGA-probing.patch
Patch0236: 0236-Add-a-version-command.patch
Patch0237: 0237-Add-more-dprintf-and-nerf-dprintf-in-script.c.patch
Patch0238: 0238-arm-arm64-loader-Better-memory-allocation-and-error-.patch
Patch0239: 0239-Try-to-pick-better-locations-for-kernel-and-initrd.patch
Patch0240: 0240-grub-boot-success.timer-Add-a-few-Conditions-for-run.patch
Patch0241: 0241-docs-Stop-using-polkit-pkexec-for-grub-boot-success..patch
Patch0242: 0242-Fix-boot-counting-grub.cfg-snippet-creation.patch
Patch0243: 0243-Fix-the-fallback-counting-script-even-harder.patch
Patch0216: 0216-efinet-also-use-the-firmware-acceleration-for-http.patch
Patch0217: 0217-efi-http-Make-root_url-reflect-the-protocol-hostname.patch
Patch0218: 0218-Disable-multiboot-multiboot2-and-linux16-modules-on-.patch
Patch0219: 0219-Force-everything-to-use-python3.patch
Patch0220: 0220-Fix-an-8-year-old-typo.patch
Patch0221: 0221-autogen-don-t-run-autoreconf-in-the-topdir.patch
Patch0222: 0222-Make-it-so-we-can-tell-configure-which-cflags-utils-.patch
Patch0223: 0223-module-verifier-make-it-possible-to-run-checkers-on-.patch
Patch0224: 0224-grub-module-verifier-report-the-filename-or-modname-.patch
Patch0225: 0225-Make-efi_netfs-not-duplicate-symbols-from-efinet.patch
Patch0226: 0226-Rework-how-the-fdt-command-builds.patch
Patch0227: 0227-Disable-non-wordsize-allocations-on-arm.patch
Patch0228: 0228-strip-R-.note.gnu.property-at-more-places.patch
Patch0229: 0229-Prepend-prefix-when-HTTP-path-is-relative.patch
Patch0230: 0230-Make-linux_arm_kernel_header.hdr_offset-be-at-the-ri.patch
Patch0231: 0231-Mark-some-unused-stuff-unused.patch
Patch0232: 0232-Make-grub_error-more-verbose.patch
Patch0233: 0233-Make-reset-an-alias-for-the-reboot-command.patch
Patch0234: 0234-EFI-more-debug-output-on-GOP-and-UGA-probing.patch
Patch0235: 0235-Add-a-version-command.patch
Patch0236: 0236-Add-more-dprintf-and-nerf-dprintf-in-script.c.patch
Patch0237: 0237-arm-arm64-loader-Better-memory-allocation-and-error-.patch
Patch0238: 0238-Try-to-pick-better-locations-for-kernel-and-initrd.patch
Patch0239: 0239-grub-boot-success.timer-Add-a-few-Conditions-for-run.patch
Patch0240: 0240-docs-Stop-using-polkit-pkexec-for-grub-boot-success..patch
Patch0241: 0241-Reimplement-boot_counter.patch

View file

@ -7,7 +7,7 @@
Name: grub2
Epoch: 1
Version: 2.02
Release: 61%{?dist}
Release: 62%{?dist}
Summary: Bootloader with support for Linux, Multiboot and more
Group: System Environment/Base
License: GPLv3+
@ -386,6 +386,7 @@ fi
%files tools
%attr(0644,root,root) %ghost %config(noreplace) %{_sysconfdir}/default/grub
%config %{_sysconfdir}/grub.d/??_*
%exclude %{_sysconfdir}/grub.d/01_fallback_counting
%{_sysconfdir}/grub.d/README
%{_userunitdir}/grub-boot-success.timer
%{_userunitdir}/grub-boot-success.service
@ -494,6 +495,11 @@ fi
%endif
%changelog
* Thu Oct 04 2018 Peter Jones <pjones@redhat.com> - 2.02-62
- Exclude /etc/grub.d/01_fallback_counting until we work through some design
questions.
Resolves: rhbz#1614637
* Wed Oct 03 2018 Peter Jones <pjones@redhat.com> - 2.02-61
- Fix the fallback counting script even harder. Apparently, this wasn't
tested well enough.