[elbe-devel] [PATCH v2 4/4] Add support for hybrid images (UEFI+Bios)

John Ogness john.ogness at linutronix.de
Thu Mar 29 09:32:02 CEST 2018


Hi Martin,

On 2018-03-28, Martin Kaistra <martin.kaistra at linutronix.de> wrote:
> This patch adds the possibility to create images which
> can boot from UEFI as well as Bios.
>
> How to use:
> You need to add the packages grub-efi-amd64-bin and grub-pc
> and a small (1MiB should be enough) partition with <biosgrub> in
> addition to a standard UEFI image.

Could you also add an example? Maybe:

    examples/x86_64-pc-hdimg-grub-hybrid-stretch.xml

Nobody will see the "How to use" in the git comments.

> Signed-off-by: Martin Kaistra <martin.kaistra at linutronix.de>
> ---
>  elbepack/elbeproject.py | 6 +++++-
>  elbepack/hdimg.py       | 9 ++++++---
>  2 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/elbepack/elbeproject.py b/elbepack/elbeproject.py
> index 047020bc..1cb22ef5 100644
> --- a/elbepack/elbeproject.py
> +++ b/elbepack/elbeproject.py
> @@ -466,7 +466,11 @@ class ElbeProject (object):
>          # jessie and wheezy grubs are 2.0 but differ in behaviour
>          #
>          # We might also want support for legacy grub
> -        if self.get_rpcaptcache().is_installed('grub-pc'):
> +        if (self.get_rpcaptcache().is_installed('grub-pc') and
> +                self.get_rpcaptcache().is_installed('grub-efi-amd64-bin')):
> +            grub_version = 202
> +            grub_fw_type = "hybrid"
> +        elif self.get_rpcaptcache().is_installed('grub-pc'):
>              if self.codename == "wheezy":
>                  grub_version = 199
>              else:
> diff --git a/elbepack/hdimg.py b/elbepack/hdimg.py
> index 2fc042d9..e0aab938 100644
> --- a/elbepack/hdimg.py
> +++ b/elbepack/hdimg.py
> @@ -186,7 +186,7 @@ def size_to_int(size):
>  
>  
>  class grubinstaller_base(object):
> -    def __init__(self, outf, fw_type="bios"):
> +    def __init__(self, outf, fw_type=None):

I would prefer "bios" was kept. Otherwise, we have to look through the
code to remember what None means.

>          self.outf = outf
>          self.root = None
>          self.boot = None
> @@ -260,12 +260,13 @@ class grubinstaller202(grubinstaller_base):
>              self.outf.do("chroot %s  update-initramfs -u -k all" % imagemnt)
>              self.outf.do("chroot %s  update-grub2" % imagemnt)
>  
> -            if self.fw_type == "efi":
> +            if self.fw_type == "efi" or self.fw_type == "hybrid":
>                  self.outf.do(
>                      "chroot %s grub-install --target=x86_64-efi --removable "
>                      "--no-floppy /dev/poop0" %
>                      (imagemnt))
> -            else:
> +            if self.fw_type == "hybrid" or self.fw_type is None:
> +                # when we are in hybrid mode, install grub also into MBR
>                  self.outf.do(
>                      "chroot %s grub-install --no-floppy /dev/poop0" %
>                      (imagemnt))
> @@ -526,6 +527,8 @@ def do_image_hd(outf, hd, fslabel, target, grub_version, grub_fw_type):
>          grub = grubinstaller199(outf)
>      elif grub_version == 202 and grub_fw_type == "efi":
>          grub = grubinstaller202(outf, "efi")
> +    elif grub_version == 202 and grub_fw_type == "hybrid":
> +        grub = grubinstaller202(outf, "hybrid")
>      elif grub_version == 202:
>          grub = grubinstaller202(outf)
>      else:

John Ogness



More information about the elbe-devel mailing list