floppym 14/09/09 21:59:41
Added:
0005-Fix-typo-gettext_print-instead-of-gettext_printf.patch
0001-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch
0002-grub-install-support-for-partitioned-partx-loop-devi.patch
0004-Fix-partmap-cryptodisk-and-abstraction-handling-in-g.patch
0003-Fix-grub-probe-0-option.patch
Log:
Backport several patches to resolve issues with grub-probe and grub-mkconfig.
Bug 522428, thanks to Coacher.
(Portage version: 2.2.12/cvs/Linux x86_64, signed Manifest commit with key
0BBEEA1FEA4843A4)
Revision Changes Path
1.1
sys-boot/grub/files/2.02_beta2/0005-Fix-typo-gettext_print-instead-of-gettext_printf.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0005-Fix-typo-gettext_print-instead-of-gettext_printf.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0005-Fix-typo-gettext_print-instead-of-gettext_printf.patch?rev=1.1&content-type=text/plain
Index: 0005-Fix-typo-gettext_print-instead-of-gettext_printf.patch
===================================================================
>From 61dcf8704027844fbcad45ef13452e996ca02c41 Mon Sep 17 00:00:00 2001
From: Andrey Borzenkov <[email protected]>
Date: Thu, 14 Aug 2014 21:02:31 +0400
Subject: [PATCH 5/5] Fix typo (gettext_print instead of gettext_printf)
Conflicts:
ChangeLog
---
util/grub-mkconfig.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
index ca040dd..d1fae49 100644
--- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in
@@ -124,7 +124,7 @@ set $grub_probe dummy
if test -f "$1"; then
:
else
- gettext_print "%s: Not found.\n" "$1" 1>&2
+ gettext_printf "%s: Not found.\n" "$1" 1>&2
exit 1
fi
--
2.1.0
1.1
sys-boot/grub/files/2.02_beta2/0001-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0001-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0001-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch?rev=1.1&content-type=text/plain
Index: 0001-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch
===================================================================
>From fd5146df14bdcb3fcae4ba8c72d816124a4598af Mon Sep 17 00:00:00 2001
From: Mike Gilbert <[email protected]>
Date: Sat, 18 Jan 2014 19:41:15 +0100
Subject: [PATCH 1/5] * Makefile.util.def: Link grub-ofpathname with zfs
libs.
Conflicts:
ChangeLog
---
Makefile.util.def | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile.util.def b/Makefile.util.def
index 985e76c..9bfe47e 100644
--- a/Makefile.util.def
+++ b/Makefile.util.def
@@ -384,7 +384,7 @@ program = {
ldadd = libgrubgcry.a;
ldadd = libgrubkern.a;
ldadd = grub-core/gnulib/libgnu.a;
- ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBGEOM)';
+ ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR)
$(LIBGEOM)';
};
program = {
--
2.1.0
1.1
sys-boot/grub/files/2.02_beta2/0002-grub-install-support-for-partitioned-partx-loop-devi.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0002-grub-install-support-for-partitioned-partx-loop-devi.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0002-grub-install-support-for-partitioned-partx-loop-devi.patch?rev=1.1&content-type=text/plain
Index: 0002-grub-install-support-for-partitioned-partx-loop-devi.patch
===================================================================
>From e407b6f1e9bf71877104eee2ed513b4065667f60 Mon Sep 17 00:00:00 2001
From: Mike Gilbert <[email protected]>
Date: Sun, 26 Jan 2014 02:56:04 +0100
Subject: [PATCH 2/5] grub-install: support for partitioned partx loop
devices.
* grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Detect
/dev/loopX as being the parent of /dev/loopXpY.
Conflicts:
ChangeLog
---
grub-core/osdep/linux/getroot.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/grub-core/osdep/linux/getroot.c b/grub-core/osdep/linux/getroot.c
index 772de0a..19581d3 100644
--- a/grub-core/osdep/linux/getroot.c
+++ b/grub-core/osdep/linux/getroot.c
@@ -883,6 +883,19 @@ grub_util_part_to_disk (const char *os_dev, struct stat
*st,
*pp = '\0';
return path;
}
+
+ /* If this is a loop device */
+ if ((strncmp ("loop", p, 4) == 0) && p[4] >= '0' && p[4] <= '9')
+ {
+ char *pp = p + 4;
+ while (*pp >= '0' && *pp <= '9')
+ pp++;
+ if (*pp == 'p')
+ *is_part = 1;
+ /* /dev/loop[0-9]+p[0-9]* */
+ *pp = '\0';
+ return path;
+ }
}
return path;
--
2.1.0
1.1
sys-boot/grub/files/2.02_beta2/0004-Fix-partmap-cryptodisk-and-abstraction-handling-in-g.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0004-Fix-partmap-cryptodisk-and-abstraction-handling-in-g.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0004-Fix-partmap-cryptodisk-and-abstraction-handling-in-g.patch?rev=1.1&content-type=text/plain
Index: 0004-Fix-partmap-cryptodisk-and-abstraction-handling-in-g.patch
===================================================================
>From 04461ee8175e18ea784301fd416b6e0dc574a288 Mon Sep 17 00:00:00 2001
From: Colin Watson <[email protected]>
Date: Mon, 31 Mar 2014 14:48:33 +0100
Subject: [PATCH 4/5] Fix partmap, cryptodisk, and abstraction handling in
grub-mkconfig.
Commit 588744d0dc655177d5883bdcb8f72ff5160109ed caused grub-mkconfig
no longer to be forgiving of trailing spaces on grub-probe output
lines, which among other things means that util/grub.d/10_linux.in
no longer detects LVM. To fix this, make grub-probe's output
delimiting more consistent. As a bonus, this improves the coverage
of the -0 option.
Fixes Debian bug #735935.
* grub-core/disk/cryptodisk.c
(grub_util_cryptodisk_get_abstraction): Add a user-data argument.
* grub-core/disk/diskfilter.c (grub_diskfilter_get_partmap):
Likewise.
* include/grub/cryptodisk.h (grub_util_cryptodisk_get_abstraction):
Update prototype.
* include/grub/diskfilter.h (grub_diskfilter_get_partmap): Likewise.
* util/grub-install.c (push_partmap_module, push_cryptodisk_module,
probe_mods): Adjust for extra user-data arguments.
* util/grub-probe.c (do_print, probe_partmap, probe_cryptodisk_uuid,
probe_abstraction): Use configured delimiter. Update callers.
Conflicts:
ChangeLog
---
grub-core/disk/cryptodisk.c | 19 ++++++++++---------
grub-core/disk/diskfilter.c | 5 +++--
include/grub/cryptodisk.h | 3 ++-
include/grub/diskfilter.h | 3 ++-
util/grub-install.c | 14 ++++++++++----
util/grub-probe.c | 46 ++++++++++++++++++++++-----------------------
6 files changed, 49 insertions(+), 41 deletions(-)
diff --git a/grub-core/disk/cryptodisk.c b/grub-core/disk/cryptodisk.c
index 75c6e1f..f0e3a90 100644
--- a/grub-core/disk/cryptodisk.c
+++ b/grub-core/disk/cryptodisk.c
@@ -762,25 +762,26 @@ grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev,
const char *name,
void
grub_util_cryptodisk_get_abstraction (grub_disk_t disk,
- void (*cb) (const char *val))
+ void (*cb) (const char *val, void *data),
+ void *data)
{
grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data;
- cb ("cryptodisk");
- cb (dev->modname);
+ cb ("cryptodisk", data);
+ cb (dev->modname, data);
if (dev->cipher)
- cb (dev->cipher->cipher->modname);
+ cb (dev->cipher->cipher->modname, data);
if (dev->secondary_cipher)
- cb (dev->secondary_cipher->cipher->modname);
+ cb (dev->secondary_cipher->cipher->modname, data);
if (dev->essiv_cipher)
- cb (dev->essiv_cipher->cipher->modname);
+ cb (dev->essiv_cipher->cipher->modname, data);
if (dev->hash)
- cb (dev->hash->modname);
+ cb (dev->hash->modname, data);
if (dev->essiv_hash)
- cb (dev->essiv_hash->modname);
+ cb (dev->essiv_hash->modname, data);
if (dev->iv_hash)
- cb (dev->iv_hash->modname);
+ cb (dev->iv_hash->modname, data);
}
const char *
diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c
index 28b70c6..e8a3bcb 100644
--- a/grub-core/disk/diskfilter.c
+++ b/grub-core/disk/diskfilter.c
@@ -354,7 +354,8 @@ grub_diskfilter_memberlist (grub_disk_t disk)
void
grub_diskfilter_get_partmap (grub_disk_t disk,
- void (*cb) (const char *pm))
+ void (*cb) (const char *pm, void *data),
+ void *data)
{
struct grub_diskfilter_lv *lv = disk->data;
struct grub_diskfilter_pv *pv;
@@ -376,7 +377,7 @@ grub_diskfilter_get_partmap (grub_disk_t disk,
continue;
}
for (s = 0; pv->partmaps[s]; s++)
- cb (pv->partmaps[s]);
+ cb (pv->partmaps[s], data);
}
}
diff --git a/include/grub/cryptodisk.h b/include/grub/cryptodisk.h
index 66f3e1e..f2ad2a7 100644
--- a/include/grub/cryptodisk.h
+++ b/include/grub/cryptodisk.h
@@ -145,7 +145,8 @@ grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev,
const char *name,
grub_disk_t source, const char *cheat);
void
grub_util_cryptodisk_get_abstraction (grub_disk_t disk,
- void (*cb) (const char *val));
+ void (*cb) (const char *val, void *data),
+ void *data);
char *
grub_util_get_geli_uuid (const char *dev);
diff --git a/include/grub/diskfilter.h b/include/grub/diskfilter.h
index 042fe04..1aedcd3 100644
--- a/include/grub/diskfilter.h
+++ b/include/grub/diskfilter.h
@@ -202,7 +202,8 @@ grub_diskfilter_get_pv_from_disk (grub_disk_t disk,
struct grub_diskfilter_vg **vg);
void
grub_diskfilter_get_partmap (grub_disk_t disk,
- void (*cb) (const char *val));
+ void (*cb) (const char *val, void *data),
+ void *data);
#endif
#endif /* ! GRUB_RAID_H */
diff --git a/util/grub-install.c b/util/grub-install.c
index 8cfe0ea..663166f 100644
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -381,7 +381,7 @@ probe_raid_level (grub_disk_t disk)
}
static void
-push_partmap_module (const char *map)
+push_partmap_module (const char *map, void *data __attribute__ ((unused)))
{
char buf[50];
@@ -396,6 +396,12 @@ push_partmap_module (const char *map)
}
static void
+push_cryptodisk_module (const char *mod, void *data __attribute__ ((unused)))
+{
+ grub_install_push_module (mod);
+}
+
+static void
probe_mods (grub_disk_t disk)
{
grub_partition_t part;
@@ -406,11 +412,11 @@ probe_mods (grub_disk_t disk)
grub_util_info ("no partition map found for %s", disk->name);
for (part = disk->partition; part; part = part->parent)
- push_partmap_module (part->partmap->name);
+ push_partmap_module (part->partmap->name, NULL);
if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID)
{
- grub_diskfilter_get_partmap (disk, push_partmap_module);
+ grub_diskfilter_get_partmap (disk, push_partmap_module, NULL);
have_abstractions = 1;
}
@@ -426,7 +432,7 @@ probe_mods (grub_disk_t disk)
if (disk->dev->id == GRUB_DISK_DEVICE_CRYPTODISK_ID)
{
grub_util_cryptodisk_get_abstraction (disk,
- grub_install_push_module);
+ push_cryptodisk_module, NULL);
have_abstractions = 1;
have_cryptodisk = 1;
}
diff --git a/util/grub-probe.c b/util/grub-probe.c
index 80509be..ecb7b6b 100644
--- a/util/grub-probe.c
+++ b/util/grub-probe.c
@@ -130,13 +130,14 @@ get_targets_string (void)
}
static void
-do_print (const char *x)
+do_print (const char *x, void *data)
{
- grub_printf ("%s ", x);
+ char delim = *(const char *) data;
+ grub_printf ("%s%c", x, delim);
}
static void
-probe_partmap (grub_disk_t disk)
+probe_partmap (grub_disk_t disk, char delim)
{
grub_partition_t part;
grub_disk_memberlist_t list = NULL, tmp;
@@ -147,10 +148,10 @@ probe_partmap (grub_disk_t disk)
}
for (part = disk->partition; part; part = part->parent)
- printf ("%s ", part->partmap->name);
+ printf ("%s%c", part->partmap->name, delim);
if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID)
- grub_diskfilter_get_partmap (disk, do_print);
+ grub_diskfilter_get_partmap (disk, do_print, &delim);
/* In case of LVM/RAID, check the member devices as well. */
if (disk->dev->memberlist)
@@ -159,7 +160,7 @@ probe_partmap (grub_disk_t disk)
}
while (list)
{
- probe_partmap (list->disk);
+ probe_partmap (list->disk, delim);
tmp = list->next;
free (list);
list = tmp;
@@ -167,7 +168,7 @@ probe_partmap (grub_disk_t disk)
}
static void
-probe_cryptodisk_uuid (grub_disk_t disk)
+probe_cryptodisk_uuid (grub_disk_t disk, char delim)
{
grub_disk_memberlist_t list = NULL, tmp;
@@ -178,7 +179,7 @@ probe_cryptodisk_uuid (grub_disk_t disk)
}
while (list)
{
- probe_cryptodisk_uuid (list->disk);
+ probe_cryptodisk_uuid (list->disk, delim);
tmp = list->next;
free (list);
list = tmp;
@@ -186,7 +187,7 @@ probe_cryptodisk_uuid (grub_disk_t disk)
if (disk->dev->id == GRUB_DISK_DEVICE_CRYPTODISK_ID)
{
const char *uu = grub_util_cryptodisk_get_uuid (disk);
- grub_printf ("%s ", uu);
+ grub_printf ("%s%c", uu, delim);
}
}
@@ -210,7 +211,7 @@ probe_raid_level (grub_disk_t disk)
}
static void
-probe_abstraction (grub_disk_t disk)
+probe_abstraction (grub_disk_t disk, char delim)
{
grub_disk_memberlist_t list = NULL, tmp;
int raid_level;
@@ -219,7 +220,7 @@ probe_abstraction (grub_disk_t disk)
list = disk->dev->memberlist (disk);
while (list)
{
- probe_abstraction (list->disk);
+ probe_abstraction (list->disk, delim);
tmp = list->next;
free (list);
@@ -229,26 +230,26 @@ probe_abstraction (grub_disk_t disk)
if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID
&& (grub_memcmp (disk->name, "lvm/", sizeof ("lvm/") - 1) == 0 ||
grub_memcmp (disk->name, "lvmid/", sizeof ("lvmid/") - 1) == 0))
- printf ("lvm ");
+ printf ("lvm%c", delim);
if (disk->dev->id == GRUB_DISK_DEVICE_DISKFILTER_ID
&& grub_memcmp (disk->name, "ldm/", sizeof ("ldm/") - 1) == 0)
- printf ("ldm ");
+ printf ("ldm%c", delim);
if (disk->dev->id == GRUB_DISK_DEVICE_CRYPTODISK_ID)
- grub_util_cryptodisk_get_abstraction (disk, do_print);
+ grub_util_cryptodisk_get_abstraction (disk, do_print, &delim);
raid_level = probe_raid_level (disk);
if (raid_level >= 0)
{
- printf ("diskfilter ");
+ printf ("diskfilter%c", delim);
if (disk->dev->raidname)
- printf ("%s ", disk->dev->raidname (disk));
+ printf ("%s%c", disk->dev->raidname (disk), delim);
}
if (raid_level == 5)
- printf ("raid5rec ");
+ printf ("raid5rec%c", delim);
if (raid_level == 6)
- printf ("raid6rec ");
+ printf ("raid6rec%c", delim);
}
static void
@@ -630,16 +631,14 @@ probe (const char *path, char **device_names, char delim)
if (print == PRINT_ABSTRACTION)
{
- probe_abstraction (dev->disk);
- putchar (delim);
+ probe_abstraction (dev->disk, delim);
grub_device_close (dev);
continue;
}
if (print == PRINT_CRYPTODISK_UUID)
{
- probe_cryptodisk_uuid (dev->disk);
- putchar (delim);
+ probe_cryptodisk_uuid (dev->disk, delim);
grub_device_close (dev);
continue;
}
@@ -647,8 +646,7 @@ probe (const char *path, char **device_names, char delim)
if (print == PRINT_PARTMAP)
{
/* Check if dev->disk itself is contained in a partmap. */
- probe_partmap (dev->disk);
- putchar (delim);
+ probe_partmap (dev->disk, delim);
grub_device_close (dev);
continue;
}
--
2.1.0
1.1
sys-boot/grub/files/2.02_beta2/0003-Fix-grub-probe-0-option.patch
file :
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0003-Fix-grub-probe-0-option.patch?rev=1.1&view=markup
plain:
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-boot/grub/files/2.02_beta2/0003-Fix-grub-probe-0-option.patch?rev=1.1&content-type=text/plain
Index: 0003-Fix-grub-probe-0-option.patch
===================================================================
>From ed2d3ef84e798d42ec361d109485ec20eafe9831 Mon Sep 17 00:00:00 2001
From: Colin Watson <[email protected]>
Date: Mon, 31 Mar 2014 13:51:17 +0100
Subject: [PATCH 3/5] Fix grub-probe -0 option
* util/grub-probe,c (options): Make -0 work again (broken by
conversion to argp).
(main): Simplify logic.
Conflicts:
ChangeLog
---
util/grub-probe.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/util/grub-probe.c b/util/grub-probe.c
index 1f3b59f..80509be 100644
--- a/util/grub-probe.c
+++ b/util/grub-probe.c
@@ -711,6 +711,7 @@ static struct argp_option options[] = {
N_("use FILE as the device map [default=%s]"), 0},
{"target", 't', N_("TARGET"), 0, 0, 0},
{"verbose", 'v', 0, 0, N_("print verbose messages."), 0},
+ {0, '0', 0, 0, N_("separate items in output using ASCII NUL characters"), 0},
{ 0, 0, 0, 0, 0, 0 }
};
@@ -884,11 +885,7 @@ main (int argc, char *argv[])
else
probe (arguments.devices[0], NULL, delim);
- if (!arguments.zero_delim && (print == PRINT_BIOS_HINT
- || print == PRINT_IEEE1275_HINT
- || print == PRINT_BAREMETAL_HINT
- || print == PRINT_EFI_HINT
- || print == PRINT_ARC_HINT))
+ if (delim == ' ')
putchar ('\n');
/* Free resources. */
--
2.1.0