[Bug 1918736] Re: update-grub uses the wrong timout for efi system

Mate Kukri 1918736 at bugs.launchpad.net
Wed Jun 19 08:43:46 UTC 2024


The long timeout only happens when boot fails and GRUB must show the
menu for kernel selection.

Otherwise your set timeout is respected.

As per the above command, GRUB drivers cannot write the environment
block to certain filesystems and recordfail doesn't work, so the timeout
is always shown.

** Changed in: grub2 (Ubuntu)
   Importance: Undecided => Wishlist

** Summary changed:

- update-grub uses the wrong timout for efi system
+ recordfail timeout always forced on FS without writable envblocks

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub2 in Ubuntu.
https://bugs.launchpad.net/bugs/1918736

Title:
  recordfail timeout always forced on FS without writable envblocks

Status in grub2 package in Ubuntu:
  Confirmed

Bug description:
  # What is happening
  When `GRUB_TIMEOUT=1` is set in `/etc/default/grub` and `update-grub` is run, the desired grub boot menu timeout of 1 second is not acknowledged. 
  This is on an EFI system.

  The following is the relevant snippet of `/boot/grub/grub.cfg`:
  ```
  if [ "${recordfail}" = 1 ] ; then
    set timeout=30
  else
    if [ x$feature_timeout_style = xy ] ; then
      set timeout_style=hidden
      set timeout=1
    # Fallback hidden-timeout code in case the timeout_style feature is
    # unavailable.
    elif sleep --interruptible 1 ; then
      set timeout=0
    fi
  fi
  if [ $grub_platform = efi ]; then
    set timeout=30
    if [ x$feature_timeout_style = xy ] ; then
      set timeout_style=menu
    fi
  fi
  ```

  The issue here is that on an EFI system, the `timeout` is overridden
  by the later test to 30 seconds.

  # What is expected
  I expect that when I set `GRUB_TIMEOUT=1` in `/etc/default/grub` that the grub menu will timeout (continue to boot) in 1 second.

  # Workaround
  The EFI timeout is taken from `GRUB_HIDDEN_TIMEOUT_QUIET` in `/etc/grub.d/00_header`. Adding `GRUB_HIDDEN_TIMEOUT_QUIET=1` solves the problem, but is the wrong approach.

  # Possible solutions
  As a user I do not see why on an EFI system there should be a separate timeout, or indeed that the timeout should even depend on the system type. i.e As a user I don't care.

  Looking at the generated grub config I would expect that the generated output would be:
  ```
  if [ "${recordfail}" = 1 ] ; then
    set timeout=30
  else
    if [ x$feature_timeout_style = xy ] ; then
      set timeout_style=hidden
      set timeout=1
    # Fallback hidden-timeout code in case the timeout_style feature is
    # unavailable.
    elif sleep --interruptible 1 ; then
      set timeout=0
    fi
  fi
  if [ $grub_platform = efi ]; then
    set timeout=1
    if [ x$feature_timeout_style = xy ] ; then
      set timeout_style=menu
    fi
  fi
  ```

  but am confused as to why the EFI detection is in a separate `if...`

  Clearly the code in `/etc/grub.d/00_header` should be changed from:
  ```
  413 if [ \$grub_platform = efi ]; then
  414   set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
  415   if [ x\$feature_timeout_style = xy ] ; then
  416     set timeout_style=menu
  417   fi
  418 fi
  ```
  to
  ```
  413 if [ \$grub_platform = efi ]; then
  414   set timeout=${GRUB_TIMEOUT:-30}
  415   if [ x\$feature_timeout_style = xy ] ; then
  416     set timeout_style=menu
  417   fi
  418 fi
  ```

  # Additional information

  Ubunutu version:
  ```
  lsb_release -r
  Release:	20.10
  ```

  Package version
  ```
  dpkg -l grub2-common 
  Desired=Unknown/Install/Remove/Purge/Hold
  | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
  |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
  ||/ Name           Version          Architecture Description
  +++-==============-================-============-=====================================================
  ii  grub2-common   2.04-1ubuntu35.4 amd64        GRand Unified Bootloader (common files for version 2)
  ```

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1918736/+subscriptions




More information about the foundations-bugs mailing list