From 5ccf9d553388b9581816156530d310034bcc420c6ee654b4eedce16138d3498f Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Fri, 31 Oct 2014 10:03:23 +0000 Subject: [PATCH 1/2] Accepting request 258927 from home:michael-chang:branches:Base:System - fix errors when boot is btrfs with Windows partition scheme. The first partition is created on cylinder boundary that can't offer enough room for core.img and also the installation has to be in logical paritition which made MBR the only location to install. (bnc#841247) * add grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch OBS-URL: https://build.opensuse.org/request/show/258927 OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=123 --- ...up-try-fs-embed-if-mbr-gap-too-small.patch | 60 +++++++++++++++++++ grub2.changes | 10 ++++ grub2.spec | 2 + 3 files changed, 72 insertions(+) create mode 100644 grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch diff --git a/grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch b/grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch new file mode 100644 index 0000000..7ab0b77 --- /dev/null +++ b/grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch @@ -0,0 +1,60 @@ +Index: grub-2.02~beta2/util/setup.c +=================================================================== +--- grub-2.02~beta2.orig/util/setup.c ++++ grub-2.02~beta2/util/setup.c +@@ -501,8 +501,44 @@ SETUP (const char *dir, + err = grub_util_ldm_embed (dest_dev->disk, &nsec, maxsec, + GRUB_EMBED_PCBIOS, §ors); + else if (ctx.dest_partmap) +- err = ctx.dest_partmap->embed (dest_dev->disk, &nsec, maxsec, +- GRUB_EMBED_PCBIOS, §ors); ++ { ++ err = ctx.dest_partmap->embed (dest_dev->disk, &nsec, maxsec, ++ GRUB_EMBED_PCBIOS, §ors); ++#ifdef GRUB_SETUP_BIOS ++ if (err == GRUB_ERR_OUT_OF_RANGE ++ && strcmp (ctx.dest_partmap->name, "msdos") == 0 ++ && dest_dev->disk->id == root_dev->disk->id ++ && dest_dev->disk->dev->id == root_dev->disk->dev->id) ++ { ++ grub_fs_t root_fs; ++ ++ root_fs = grub_fs_probe (root_dev); ++ if (root_fs && root_fs->embed) ++ { ++ grub_disk_addr_t *fs_sectors; ++ unsigned int fs_nsec; ++ ++ fs_sectors = NULL; ++ fs_nsec = core_sectors; ++ err = root_fs->embed (root_dev, &fs_nsec, maxsec, ++ GRUB_EMBED_PCBIOS, &fs_sectors); ++ if (!err && fs_nsec >= core_sectors) ++ { ++ grub_util_info ("Your msdos embedding area is too small, will use file system embedding area instead"); ++ sectors = fs_sectors; ++ nsec = fs_nsec; ++ ctx.container = root_dev->disk->partition; ++ core_dev = root_dev; ++ } ++ else ++ { ++ if (fs_sectors) ++ grub_free (fs_sectors); ++ } ++ } ++ } ++#endif ++ } + else + err = fs->embed (dest_dev, &nsec, maxsec, + GRUB_EMBED_PCBIOS, §ors); +@@ -584,7 +620,7 @@ SETUP (const char *dir, + + /* Write the core image onto the disk. */ + for (i = 0; i < nsec; i++) +- grub_disk_write (dest_dev->disk, sectors[i], 0, ++ grub_disk_write (core_dev->disk, sectors[i], 0, + GRUB_DISK_SECTOR_SIZE, + core_img + i * GRUB_DISK_SECTOR_SIZE); + diff --git a/grub2.changes b/grub2.changes index b96dc4b..d94ab3c 100644 --- a/grub2.changes +++ b/grub2.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Thu Oct 30 07:36:15 UTC 2014 - mchang@suse.com + +- fix errors when boot is btrfs with Windows partition scheme. The + first partition is created on cylinder boundary that can't offer + enough room for core.img and also the installation has to be in + logical paritition which made MBR the only location to install. + (bnc#841247) + * add grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch + ------------------------------------------------------------------- Tue Sep 30 03:45:04 UTC 2014 - mchang@suse.com diff --git a/grub2.spec b/grub2.spec index f25b274..2ee34c8 100644 --- a/grub2.spec +++ b/grub2.spec @@ -158,6 +158,7 @@ Patch45: grub2-efinet-reopen-SNP-protocol-for-exclusive-use-by-grub.patch Patch46: grub2-xen-legacy-config-device-name.patch Patch47: grub2-Initialized-initrd_ctx-so-we-don-t-free-a-random-poi.patch Patch48: grub2-btrfs-fix-get_root-key-comparison-failures-due-to-en.patch +Patch49: grub2-setup-try-fs-embed-if-mbr-gap-too-small.patch # Btrfs snapshot booting related patches Patch101: grub2-btrfs-01-add-ability-to-boot-from-subvolumes.patch Patch102: grub2-btrfs-02-export-subvolume-envvars.patch @@ -364,6 +365,7 @@ mv po/grub.pot po/%{name}.pot %patch46 -p1 %patch47 -p1 %patch48 -p1 +%patch49 -p1 %patch101 -p1 %patch102 -p1 %patch103 -p1 From 3c587e0e68c34fd2d01e5324147d8b98525351256ca2401c477e9b6140818e85 Mon Sep 17 00:00:00 2001 From: Andrei Borzenkov Date: Fri, 31 Oct 2014 14:00:39 +0000 Subject: [PATCH 2/2] Accepting request 259152 from home:jdelvare:branches:Base:System grub2.spec: Fix conditional construct which wasn't supported by older versions of rpmbuild (caused error message "parseExpressionBoolean returns -1".) OBS-URL: https://build.opensuse.org/request/show/259152 OBS-URL: https://build.opensuse.org/package/show/Base:System/grub2?expand=0&rev=124 --- grub2.changes | 7 +++++++ grub2.spec | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/grub2.changes b/grub2.changes index d94ab3c..3e9405e 100644 --- a/grub2.changes +++ b/grub2.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Thu Oct 30 15:18:16 CET 2014 - jdelvare@suse.de + +- grub2.spec: Fix conditional construct which wasn't supported by + older versions of rpmbuild (caused error message + "parseExpressionBoolean returns -1".) + ------------------------------------------------------------------- Thu Oct 30 07:36:15 UTC 2014 - mchang@suse.com diff --git a/grub2.spec b/grub2.spec index 2ee34c8..0b1b10d 100644 --- a/grub2.spec +++ b/grub2.spec @@ -79,7 +79,7 @@ BuildRequires: xen-devel %define grubarch %{grubcpu}-%{platform} # build efi bootloader on some platforms only: -%if ! 0%{?efi} +%if ! 0%{?efi:1} %global efi %{ix86} x86_64 ia64 aarch64 %endif %ifarch aarch64