[rhel6] Only set GPT boot flag on ESP partition (#1139606)

Vratislav Podzimek vpodzime at redhat.com
Thu Sep 11 06:30:16 UTC 2014


On Wed, 2014-09-10 at 16:25 -0700, Brian C. Lane wrote:
> Flags on GPT partitions are GUIDs, so only one can be set. The boot flag
> should only be set for the EFI System Partition, for everything else
> let the flags be set by the partition type (eg. prepboot).
> ---
>  storage/__init__.py | 48 ++++++++++++++++++++++++++++++------------------
>  1 file changed, 30 insertions(+), 18 deletions(-)
> 
> diff --git a/storage/__init__.py b/storage/__init__.py
> index 8e227c5..2984337 100644
> --- a/storage/__init__.py
> +++ b/storage/__init__.py
> @@ -367,24 +367,36 @@ class Storage(object):
>              bootDevs = []
>          else:
>              for dev in bootDevs:
> -                if hasattr(dev, "bootable"):
> -                    # Dos labels can only have one partition marked as active
> -                    # and unmarking ie the windows partition is not a good idea
> -                    skip = False
> -                    if dev.disk.format.partedDisk.type == "msdos":
> -                        for p in dev.disk.format.partedDisk.partitions:
> -                            if p.type == parted.PARTITION_NORMAL and \
> -                               p.getFlag(parted.PARTITION_BOOT):
> -                                skip = True
> -                                break
> -                    if skip:
> -                         log.info("not setting boot flag on %s as there is"
> -                                  "another active partition" % dev.name)
> -                         continue
> -                    log.info("setting boot flag on %s" % dev.name)
> -                    dev.bootable = True
> -                    dev.disk.setup()
> -                    dev.disk.format.commitToDisk()
> +                if not hasattr(dev, "bootable"):
> +                    log.info("Skipping %s, not bootable", dev)
> +                    continue
> +
> +                # Dos labels can only have one partition marked as active
> +                # and unmarking ie the windows partition is not a good idea
> +                skip = False
> +                if dev.disk.format.partedDisk.type == "msdos":
> +                    for p in dev.disk.format.partedDisk.partitions:
> +                        if p.type == parted.PARTITION_NORMAL and \
> +                           p.getFlag(parted.PARTITION_BOOT):
> +                            skip = True
> +                            break
> +
> +                # GPT labeled disks should only have bootable set on the
> +                # EFI system partition (parted sets the EFI System GUID on
> +                # GPT partitions with the boot flag, overwriting any other
> +                # GUID that has already been set)
> +                if dev.disk.format.type == "gpt" and \
> +                   dev.format.type != "efi":
> +                    skip = True
> +
> +                if skip:
> +                    log.info("Skipping setting bootable on %s", dev.name)
> +                    continue
> +
> +                log.info("setting boot flag on %s" % dev.name)
> +                dev.bootable = True
> +                dev.disk.setup()
> +                dev.disk.format.commitToDisk()
>  
>          self.dumpState("final")
>  
Looks good to me.

-- 
Vratislav Podzimek

Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic



More information about the anaconda-patches mailing list