All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrey Borzenkov <arvidjaar@gmail.com>
To: grub-devel@gnu.org
Subject: Re: [PATCH v0] Require human interaction to go to normal shell if grub.cfg has a problem
Date: Thu, 28 Nov 2013 21:34:55 +0400	[thread overview]
Message-ID: <20131128213455.2aa3d691@opensuse.site> (raw)
In-Reply-To: <1385423208-18212-1-git-send-email-jonmccune@google.com>

В Mon, 25 Nov 2013 15:46:48 -0800
Jon McCune <jonmccune@google.com> пишет:

> The rescue prompt is very useful for human operators, but not so
> useful in unattended environments.  Add a facility for rebooting
> after a delay, so that, e.g., the system can still PXE boot if
> there is no console attached.
> 
> Signed-off-by: Jon McCune <jonmccune@google.com>
> ---
>  grub-core/normal/main.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c

You get rescue prompt when you can *not* launch normal.mod. 

> index ad36273..f8953d5 100644
> --- a/grub-core/normal/main.c
> +++ b/grub-core/normal/main.c
> @@ -32,6 +32,7 @@
>  #include <grub/i18n.h>
>  #include <grub/charset.h>
>  #include <grub/script_sh.h>
> +#include <grub/time.h>
>  
>  GRUB_MOD_LICENSE ("GPLv3+");
>  
> @@ -333,6 +334,21 @@ grub_normal_execute (const char *config, int nested, int batch)
>      }
>  }
>  
> +/* Copied from grub-core/commands/sleep.c. */
> +static int
> +grub_interruptible_millisleep (grub_uint32_t ms)
> +{
> +  grub_uint64_t start;
> +
> +  start = grub_get_time_ms ();
> +
> +  while (grub_get_time_ms () - start < ms)
> +    if (grub_getkey_noblock () == GRUB_TERM_ESC)
> +      return 1;
> +
> +  return 0;
> +}
> +
>  /* This starts the normal mode.  */
>  void
>  grub_enter_normal_mode (const char *config)
> @@ -340,6 +356,15 @@ grub_enter_normal_mode (const char *config)
>    grub_boot_time ("Entering normal mode");
>    nested_level++;
>    grub_normal_execute (config, 0, 0);
> +  /* Control only returns from grub_normal_execute() if there is some kind of
> +   * problem with grub.cfg, like it does not exist.  Reboot by default unless
> +   * ESC is pressed within 5 seconds. */

grub-mkrescue creates CD that starts normal CLI without grub.cfg. So
please - not as default. You can make it dependent on variable which
can be set in embedded grub.cfg for the cases when you really need it.

> +  grub_printf ("Press ESC in 5 seconds for a rescue shell.\n");

"for a command line". This is not rescue shell.

> +  if (!grub_interruptible_millisleep (5000))
> +    {
> +      grub_printf ("Rebooting instead of going to rescue shell.\n");

Ditto.

> +      grub_reboot ();
> +    }
>    grub_boot_time ("Entering shell");
>    grub_cmdline_run (0);
>    nested_level--;



  parent reply	other threads:[~2013-11-28 17:35 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-11-25 23:46 [PATCH v0] Require human interaction to go to normal shell if grub.cfg has a problem Jon McCune
2013-11-28  6:41 ` Vladimir 'phcoder' Serbinenko
2013-11-28 17:34 ` Andrey Borzenkov [this message]
2013-12-02 20:16   ` Jonathan McCune
2013-12-02 20:38     ` Andrey Borzenkov
2013-12-02 20:49       ` Jonathan McCune
2013-12-07 12:35         ` Andrey Borzenkov
2013-12-09 15:25           ` Jonathan McCune
2013-12-09 23:33             ` Vladimir 'φ-coder/phcoder' Serbinenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20131128213455.2aa3d691@opensuse.site \
    --to=arvidjaar@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.