diff mbox series

grub-efi-cfg: add GRUB_TITLE for custom GRUB titles

Message ID 20250114161114.2731934-1-simon.eu@gmail.com (mailing list archive)
State New
Headers show
Series grub-efi-cfg: add GRUB_TITLE for custom GRUB titles | expand

Commit Message

Simon Eugster Jan. 14, 2025, 4:11 p.m. UTC
Until now, the default title of a boot entry is its label. The label is
a variable which determines the script to run during an early boot stage
and is not necessarily human readable.

This patch allows to provide a human-readable title for each boot entry.
---
 documentation/ref-manual/classes.rst        | 17 ++++++++++++++++-
 meta/classes-recipe/grub-efi-cfg.bbclass    |  8 +++++++-
 meta/recipes-bsp/grub/grub-bootconf_1.00.bb |  2 +-
 3 files changed, 24 insertions(+), 3 deletions(-)

Comments

Alexander Kanavin Jan. 14, 2025, 4:31 p.m. UTC | #1
Thanks - these pieces should be split and sent to different mailing
lists. meta/* to openembedded-core@, documentation/* to docs@


Alex

On Tue, 14 Jan 2025 at 17:11, Simon A. Eugster via
lists.yoctoproject.org <simon.eu=gmail.com@lists.yoctoproject.org>
wrote:
>
> Until now, the default title of a boot entry is its label. The label is
> a variable which determines the script to run during an early boot stage
> and is not necessarily human readable.
>
> This patch allows to provide a human-readable title for each boot entry.
> ---
>  documentation/ref-manual/classes.rst        | 17 ++++++++++++++++-
>  meta/classes-recipe/grub-efi-cfg.bbclass    |  8 +++++++-
>  meta/recipes-bsp/grub/grub-bootconf_1.00.bb |  2 +-
>  3 files changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/documentation/ref-manual/classes.rst b/documentation/ref-manual/classes.rst
> index 761be7b545..460f94b232 100644
> --- a/documentation/ref-manual/classes.rst
> +++ b/documentation/ref-manual/classes.rst
> @@ -987,10 +987,14 @@ introspection. This functionality is only enabled if the
>  The :ref:`ref-classes-grub-efi` class provides ``grub-efi``-specific functions for
>  building bootable images.
>
> -This class supports several variables:
> +This class supports several variables.
> +The label specific override names are ``grub_LABEL``.
> +To specificy an override for the label ``mylabel``, the override name is ``grub_mylabel``,
> +for example ``APPEND:grub_mylabel = my-appends``.
>
>  -  :term:`INITRD`: Indicates list of filesystem images to
>     concatenate and use as an initial RAM disk (initrd) (optional).
> +   Can be specified for each ``LABEL``.
>
>  -  :term:`ROOTFS`: Indicates a filesystem image to include
>     as the root filesystem (optional).
> @@ -1004,6 +1008,9 @@ This class supports several variables:
>  -  :term:`APPEND`: An override list of append strings for
>     each ``LABEL``.
>
> +-  :term:`GRUB_TITLE`: A custom title for each ```LABEL``.
> +   Defaults to ``LABEL`` if it is not defined.
> +
>  -  :term:`GRUB_OPTS`: Additional options to add to the
>     configuration (optional). Options are delimited using semi-colon
>     characters (``;``).
> @@ -1011,6 +1018,14 @@ This class supports several variables:
>  -  :term:`GRUB_TIMEOUT`: Timeout before executing
>     the default ``LABEL`` (optional).
>
> +For the label ``factory``, a custom GRUB menu entry titled "Factory Install" with the additional parameter ``factory=yes``
> +can be achieved as follows::
> +
> +  LABELS:append = "factory"
> +  APPEND:grub_factory = "factory=yes"
> +  GRUB_TITLE:grub_factory = "Factory Install"
> +
> +
>  .. _ref-classes-gsettings:
>
>  ``gsettings``
> diff --git a/meta/classes-recipe/grub-efi-cfg.bbclass b/meta/classes-recipe/grub-efi-cfg.bbclass
> index 52e85a3bb0..9a5cb99c52 100644
> --- a/meta/classes-recipe/grub-efi-cfg.bbclass
> +++ b/meta/classes-recipe/grub-efi-cfg.bbclass
> @@ -23,6 +23,7 @@ GRUB_TIMEOUT ?= "10"
>  GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
>
>  GRUB_ROOT ?= "${ROOT}"
> +GRUB_TITLE ?= ""
>  APPEND ?= ""
>
>  # Uses MACHINE specific KERNEL_IMAGETYPE
> @@ -91,10 +92,15 @@ python build_efi_cfg() {
>          if not overrides:
>              bb.fatal('OVERRIDES not defined')
>
> +        localdata.need_overrides()
>          localdata.setVar('OVERRIDES', 'grub_' + label + ':' + overrides)
>
>          for btype in btypes:
> -            cfgfile.write('\nmenuentry \'%s%s\'{\n' % (label, btype[0]))
> +            title = localdata.getVar('GRUB_TITLE')
> +            if not title or len(title) == 0:
> +                title = label
> +
> +            cfgfile.write('\nmenuentry \'%s%s\'{\n' % (title, btype[0]))
>              lb = label
>              if label == "install":
>                  lb = "install-efi"
> diff --git a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
> index 783e30bf38..7ed0877726 100644
> --- a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
> +++ b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
> @@ -22,7 +22,7 @@ python do_configure() {
>      bb.build.exec_func('build_efi_cfg', d)
>  }
>
> -do_configure[vardeps] += "APPEND ROOT"
> +do_configure[vardeps] += "APPEND ROOT GRUB_TITLE"
>
>  do_install() {
>         install -d ${D}${EFI_FILES_PATH}
> --
> 2.43.0
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#13506): https://lists.yoctoproject.org/g/poky/message/13506
> Mute This Topic: https://lists.yoctoproject.org/mt/110610053/1686489
> Group Owner: poky+owner@lists.yoctoproject.org
> Unsubscribe: https://lists.yoctoproject.org/g/poky/unsub [alex.kanavin@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Simon Eugster Jan. 15, 2025, 8:15 a.m. UTC | #2
Hi Alex, thanks for the hint. In a few years I will probably understand
what to send to which of all those mailing lists. I'm more familiar with
modern workflows as on GitLab and similar.

I sent the separate patches to oe-core and docs.

Simon

On Tue, Jan 14, 2025 at 5:31 PM Alexander Kanavin <alex.kanavin@gmail.com>
wrote:

> Thanks - these pieces should be split and sent to different mailing
> lists. meta/* to openembedded-core@, documentation/* to docs@
>
>
> Alex
>
> On Tue, 14 Jan 2025 at 17:11, Simon A. Eugster via
> lists.yoctoproject.org <simon.eu=gmail.com@lists.yoctoproject.org>
> wrote:
> >
> > Until now, the default title of a boot entry is its label. The label is
> > a variable which determines the script to run during an early boot stage
> > and is not necessarily human readable.
> >
> > This patch allows to provide a human-readable title for each boot entry.
> > ---
> >  documentation/ref-manual/classes.rst        | 17 ++++++++++++++++-
> >  meta/classes-recipe/grub-efi-cfg.bbclass    |  8 +++++++-
> >  meta/recipes-bsp/grub/grub-bootconf_1.00.bb |  2 +-
> >  3 files changed, 24 insertions(+), 3 deletions(-)
> >
> > diff --git a/documentation/ref-manual/classes.rst
> b/documentation/ref-manual/classes.rst
> > index 761be7b545..460f94b232 100644
> > --- a/documentation/ref-manual/classes.rst
> > +++ b/documentation/ref-manual/classes.rst
> > @@ -987,10 +987,14 @@ introspection. This functionality is only enabled
> if the
> >  The :ref:`ref-classes-grub-efi` class provides ``grub-efi``-specific
> functions for
> >  building bootable images.
> >
> > -This class supports several variables:
> > +This class supports several variables.
> > +The label specific override names are ``grub_LABEL``.
> > +To specificy an override for the label ``mylabel``, the override name
> is ``grub_mylabel``,
> > +for example ``APPEND:grub_mylabel = my-appends``.
> >
> >  -  :term:`INITRD`: Indicates list of filesystem images to
> >     concatenate and use as an initial RAM disk (initrd) (optional).
> > +   Can be specified for each ``LABEL``.
> >
> >  -  :term:`ROOTFS`: Indicates a filesystem image to include
> >     as the root filesystem (optional).
> > @@ -1004,6 +1008,9 @@ This class supports several variables:
> >  -  :term:`APPEND`: An override list of append strings for
> >     each ``LABEL``.
> >
> > +-  :term:`GRUB_TITLE`: A custom title for each ```LABEL``.
> > +   Defaults to ``LABEL`` if it is not defined.
> > +
> >  -  :term:`GRUB_OPTS`: Additional options to add to the
> >     configuration (optional). Options are delimited using semi-colon
> >     characters (``;``).
> > @@ -1011,6 +1018,14 @@ This class supports several variables:
> >  -  :term:`GRUB_TIMEOUT`: Timeout before executing
> >     the default ``LABEL`` (optional).
> >
> > +For the label ``factory``, a custom GRUB menu entry titled "Factory
> Install" with the additional parameter ``factory=yes``
> > +can be achieved as follows::
> > +
> > +  LABELS:append = "factory"
> > +  APPEND:grub_factory = "factory=yes"
> > +  GRUB_TITLE:grub_factory = "Factory Install"
> > +
> > +
> >  .. _ref-classes-gsettings:
> >
> >  ``gsettings``
> > diff --git a/meta/classes-recipe/grub-efi-cfg.bbclass
> b/meta/classes-recipe/grub-efi-cfg.bbclass
> > index 52e85a3bb0..9a5cb99c52 100644
> > --- a/meta/classes-recipe/grub-efi-cfg.bbclass
> > +++ b/meta/classes-recipe/grub-efi-cfg.bbclass
> > @@ -23,6 +23,7 @@ GRUB_TIMEOUT ?= "10"
> >  GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no
> --stop=1"
> >
> >  GRUB_ROOT ?= "${ROOT}"
> > +GRUB_TITLE ?= ""
> >  APPEND ?= ""
> >
> >  # Uses MACHINE specific KERNEL_IMAGETYPE
> > @@ -91,10 +92,15 @@ python build_efi_cfg() {
> >          if not overrides:
> >              bb.fatal('OVERRIDES not defined')
> >
> > +        localdata.need_overrides()
> >          localdata.setVar('OVERRIDES', 'grub_' + label + ':' + overrides)
> >
> >          for btype in btypes:
> > -            cfgfile.write('\nmenuentry \'%s%s\'{\n' % (label, btype[0]))
> > +            title = localdata.getVar('GRUB_TITLE')
> > +            if not title or len(title) == 0:
> > +                title = label
> > +
> > +            cfgfile.write('\nmenuentry \'%s%s\'{\n' % (title, btype[0]))
> >              lb = label
> >              if label == "install":
> >                  lb = "install-efi"
> > diff --git a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
> b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
> > index 783e30bf38..7ed0877726 100644
> > --- a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
> > +++ b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
> > @@ -22,7 +22,7 @@ python do_configure() {
> >      bb.build.exec_func('build_efi_cfg', d)
> >  }
> >
> > -do_configure[vardeps] += "APPEND ROOT"
> > +do_configure[vardeps] += "APPEND ROOT GRUB_TITLE"
> >
> >  do_install() {
> >         install -d ${D}${EFI_FILES_PATH}
> > --
> > 2.43.0
> >
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#13506):
> https://lists.yoctoproject.org/g/poky/message/13506
> > Mute This Topic: https://lists.yoctoproject.org/mt/110610053/1686489
> > Group Owner: poky+owner@lists.yoctoproject.org
> > Unsubscribe: https://lists.yoctoproject.org/g/poky/unsub [
> alex.kanavin@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
>
Alexander Kanavin Jan. 15, 2025, 11:55 a.m. UTC | #3
On Wed, 15 Jan 2025 at 09:15, Simon Eugster <simon.eu@gmail.com> wrote:
> Hi Alex, thanks for the hint. In a few years I will probably understand what to send to which of all those mailing lists. I'm more familiar with modern workflows as on GitLab and similar.

You can understand it much sooner by reading poky/README.md (it's a symlink to):

https://git.yoctoproject.org/poky/tree/meta-poky/README.poky.md

Alex
diff mbox series

Patch

diff --git a/documentation/ref-manual/classes.rst b/documentation/ref-manual/classes.rst
index 761be7b545..460f94b232 100644
--- a/documentation/ref-manual/classes.rst
+++ b/documentation/ref-manual/classes.rst
@@ -987,10 +987,14 @@  introspection. This functionality is only enabled if the
 The :ref:`ref-classes-grub-efi` class provides ``grub-efi``-specific functions for
 building bootable images.
 
-This class supports several variables:
+This class supports several variables.
+The label specific override names are ``grub_LABEL``.
+To specificy an override for the label ``mylabel``, the override name is ``grub_mylabel``,
+for example ``APPEND:grub_mylabel = my-appends``.
 
 -  :term:`INITRD`: Indicates list of filesystem images to
    concatenate and use as an initial RAM disk (initrd) (optional).
+   Can be specified for each ``LABEL``.
 
 -  :term:`ROOTFS`: Indicates a filesystem image to include
    as the root filesystem (optional).
@@ -1004,6 +1008,9 @@  This class supports several variables:
 -  :term:`APPEND`: An override list of append strings for
    each ``LABEL``.
 
+-  :term:`GRUB_TITLE`: A custom title for each ```LABEL``.
+   Defaults to ``LABEL`` if it is not defined.
+
 -  :term:`GRUB_OPTS`: Additional options to add to the
    configuration (optional). Options are delimited using semi-colon
    characters (``;``).
@@ -1011,6 +1018,14 @@  This class supports several variables:
 -  :term:`GRUB_TIMEOUT`: Timeout before executing
    the default ``LABEL`` (optional).
 
+For the label ``factory``, a custom GRUB menu entry titled "Factory Install" with the additional parameter ``factory=yes``
+can be achieved as follows::
+
+  LABELS:append = "factory"
+  APPEND:grub_factory = "factory=yes"
+  GRUB_TITLE:grub_factory = "Factory Install"
+
+
 .. _ref-classes-gsettings:
 
 ``gsettings``
diff --git a/meta/classes-recipe/grub-efi-cfg.bbclass b/meta/classes-recipe/grub-efi-cfg.bbclass
index 52e85a3bb0..9a5cb99c52 100644
--- a/meta/classes-recipe/grub-efi-cfg.bbclass
+++ b/meta/classes-recipe/grub-efi-cfg.bbclass
@@ -23,6 +23,7 @@  GRUB_TIMEOUT ?= "10"
 GRUB_OPTS ?= "serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
 
 GRUB_ROOT ?= "${ROOT}"
+GRUB_TITLE ?= ""
 APPEND ?= ""
 
 # Uses MACHINE specific KERNEL_IMAGETYPE
@@ -91,10 +92,15 @@  python build_efi_cfg() {
         if not overrides:
             bb.fatal('OVERRIDES not defined')
 
+        localdata.need_overrides()
         localdata.setVar('OVERRIDES', 'grub_' + label + ':' + overrides)
 
         for btype in btypes:
-            cfgfile.write('\nmenuentry \'%s%s\'{\n' % (label, btype[0]))
+            title = localdata.getVar('GRUB_TITLE')
+            if not title or len(title) == 0:
+                title = label
+
+            cfgfile.write('\nmenuentry \'%s%s\'{\n' % (title, btype[0]))
             lb = label
             if label == "install":
                 lb = "install-efi"
diff --git a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
index 783e30bf38..7ed0877726 100644
--- a/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
+++ b/meta/recipes-bsp/grub/grub-bootconf_1.00.bb
@@ -22,7 +22,7 @@  python do_configure() {
     bb.build.exec_func('build_efi_cfg', d)
 }
 
-do_configure[vardeps] += "APPEND ROOT"
+do_configure[vardeps] += "APPEND ROOT GRUB_TITLE"
 
 do_install() {
 	install -d ${D}${EFI_FILES_PATH}