Re: [PATCH] F2FS support

2018-03-18 Thread Pete Batard
+1 for F2FS integration, which I also requested a few months back and 
which I know has also been requested by other people before that.


While I understand that the GRUB project's priorities might be 
elsewhere, I'm just going to point out that I am growing a bit tired of 
having had to keep and maintain an additional patch for F2FS in my GRUB 
derived UEFI file system driver project 
(https://github.com/pbatard/efifs), for the past few years now, so I 
really hope F2FS support can be integrated soon.


Thank you,

/Pete

On 2018.03.17 09:08, 林博仁 wrote:

"F2FS (Flash-Friendly File System) is flash-friendly file system which was
merged into Linux kernel v3.8 in 2013.



Any update on this patch?  F2FS really help much on my system's performance on
a dirt-cheap flash storage key.

林博仁(Buo-ren, Lin)
buo.ren@gmail.com



___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel




___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH 3/7] cryptomount luks allow multiple passphrase attempts

2018-03-18 Thread John Lane
On 17/03/18 11:10, TJ wrote:
> On 14/03/18 09:45, John Lane wrote:
>> --- a/grub-core/disk/luks.c
>> +++ b/grub-core/disk/luks.c
>> @@ -321,10 +321,10 @@ configure_ciphers (grub_disk_t disk, const char 
>> *check_uuid,
>>  
>>  static grub_err_t
>>  luks_recover_key (grub_disk_t source,
>> -  grub_cryptodisk_t dev,
>> -  grub_file_t hdr,
>> -  grub_uint8_t *keyfile_bytes,
>> -  grub_size_t keyfile_bytes_size)
>> +  grub_cryptodisk_t dev,
>> +  grub_file_t hdr,
>> +  grub_uint8_t *keyfile_bytes,
>> +  grub_size_t keyfile_bytes_size)
> 
> ---8-<--- snip
> 
> Much of this patch is moving existing code around, could it be
> refactored to avoid that so as to make the new code stand out?
> 

The code that was moved was just indented into a while loop.
Most of it pre-existed prior to my patches (#357-464), a small part was
added by patch#2. I'm not sure how I would refactor it - any change
would result in 100-ish lines changing position and/or indent and would
lead to a similarly sized patch.

The way the patch presents the changes is confusing but I am not sure
how to control that.

If it helps, all this patch did was add a while loop around the
passphrase reading code to allow the user 3 attempts. i.e

  while (attempts)
{

  

  grub_printf_ (N_("Failed to decrypt master key.\n"));
  if (--attempts) grub_printf_ (N_("%u attempt%s remaining.\n"),
attempts,
(attempts==1) ? "" : "s");
}




___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH 2/7] Cryptomount support key files

2018-03-18 Thread John Lane
On 17/03/18 11:10, TJ wrote:
> On 14/03/18 09:44, John Lane wrote:
>> --- a/grub-core/disk/cryptodisk.c
>> +++ b/grub-core/disk/cryptodisk.c
>> @@ -949,6 +954,45 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int 
>> argc, char **args)
>>  hdr = NULL;
>>  
>>have_it = 0;
>> +  key = NULL;
>> +
>> +  if (state[4].set) /* Key file; fails back to passphrase entry */
>> +{
>> +  grub_file_t keyfile;
>> +  int keyfile_offset;
>> +  grub_size_t requested_keyfile_size;
>> +
>> +  requested_keyfile_size = state[6].set ? grub_strtoul(state[6].arg, 0, 
>> 0) : 0;
>> +
>> +  if (requested_keyfile_size > GRUB_CRYPTODISK_MAX_KEYFILE_SIZE)
>> +grub_printf (N_("Key file size exceeds maximum (%llu)\n"), \
>> + (unsigned long long) 
>> GRUB_CRYPTODISK_MAX_KEYFILE_SIZE);
>> +  else
>> +{
>> +  keyfile_offset = state[5].set ? grub_strtoul (state[5].arg, 0, 0) 
>> : 0;
>> +  keyfile_size = requested_keyfile_size ? requested_keyfile_size : \
>> + GRUB_CRYPTODISK_MAX_KEYFILE_SIZE;
>> +
>> +  keyfile = grub_file_open (state[4].arg);
>> +  if (!keyfile)
>> +grub_printf (N_("Unable to open key file %s\n"), state[4].arg);
>> +  else if (grub_file_seek (keyfile, keyfile_offset) == 
>> (grub_off_t)-1)
>> +grub_printf (N_("Unable to seek to offset %d in key file\n"), 
>> keyfile_offset);
>> +  else
>> +{
>> +  keyfile_size = grub_file_read (keyfile, keyfile_buffer, 
>> keyfile_size);
>> +  if (keyfile_size == (grub_size_t)-1)
> 
> grub_file_read() returns grub_ssize_t (signed). Is casting to
> grub_size_t (unsigned) required or going to work as intended?
> 
> Is the only possible error -1? Underlying readwrite functions can return
> error codes via grub_error() that are > 0: see include/grub/err.h
> 
> ___
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
> 


I have applied these changes. Builds clean but I need to test it. I
might have time to do that tomorrow, otherwise next weekend will be soonest.

___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [PATCH 1/7] Cryptomount support LUKS detached header

2018-03-18 Thread John Lane
On 17/03/18 11:09, TJ wrote:
> On 14/03/18 09:44, John Lane wrote:
>> --- a/grub-core/disk/cryptodisk.c
>> +++ b/grub-core/disk/cryptodisk.c
>> @@ -880,7 +882,7 @@ grub_cryptodisk_cheat_mount (const char *sourcedev, 
>> const char *cheat)
>>  
>>FOR_CRYPTODISK_DEVS (cr)
>>{
>> -dev = cr->scan (source, search_uuid, check_boot);
>> +dev = cr->scan (source, search_uuid, check_boot,0);
> 
> Minor nit; "boot,0" > "boot, 0"
> 
>> @@ -934,6 +936,18 @@ grub_cmd_cryptomount (grub_extcmd_context_t ctxt, int 
>> argc, char **args)
>>if (argc < 1 && !state[1].set && !state[2].set)
>>  return grub_error (GRUB_ERR_BAD_ARGUMENT, "device name required");
>>  
>> +  if (state[3].set) /* LUKS detached header */
>> +{
>> +  if (state[0].set) /* Cannot use UUID lookup with detached header */
> 
> Should there be specific warning for the user here, at least for #ifdef
> GRUB_UTIL
> 
>> --- a/grub-core/disk/luks.c
>> +++ b/grub-core/disk/luks.c
>> @@ -391,13 +415,18 @@ luks_recover_key (grub_disk_t source,
>>return grub_crypto_gcry_error (gcry_err);
>>  }
>>  
>> +  sector = grub_be_to_cpu32 (header.keyblock[i].keyMaterialOffset);
>>length = (keysize * grub_be_to_cpu32 (header.keyblock[i].stripes));
>>  
>>/* Read and decrypt the key material from the disk.  */
>> -  err = grub_disk_read (source,
>> -grub_be_to_cpu32 (header.keyblock
>> -  [i].keyMaterialOffset), 0,
>> -length, split_key);
>> +  if (hdr)
>> +{
>> +  grub_file_seek (hdr, sector * 512);
> 
> Shouldn't 512 be GRUB_DISK_SECTOR_SIZE ?
> 
> ___
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
> 

I have applied these changes. Builds clean but I need to test it. I
might have time to do that tomorrow, otherwise next weekend will be soonest.

___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


[GRUB PARTUUID PATCH V6 3/4] Add PARTUUID detection support to grub-probe

2018-03-18 Thread Nicholas Vinson
Add PARTUUID detection support grub-probe for MBR and GPT partition
schemes.

Signed-off-by: Nicholas Vinson 
---
 util/grub-probe.c | 51 +++
 1 file changed, 51 insertions(+)

diff --git a/util/grub-probe.c b/util/grub-probe.c
index 21cb80fbe..0ae73c591 100644
--- a/util/grub-probe.c
+++ b/util/grub-probe.c
@@ -28,6 +28,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -62,6 +63,7 @@ enum {
   PRINT_DRIVE,
   PRINT_DEVICE,
   PRINT_PARTMAP,
+  PRINT_PARTUUID,
   PRINT_ABSTRACTION,
   PRINT_CRYPTODISK_UUID,
   PRINT_HINT_STR,
@@ -85,6 +87,7 @@ static const char *targets[] =
 [PRINT_DRIVE]  = "drive",
 [PRINT_DEVICE] = "device",
 [PRINT_PARTMAP]= "partmap",
+[PRINT_PARTUUID]   = "partuuid",
 [PRINT_ABSTRACTION]= "abstraction",
 [PRINT_CRYPTODISK_UUID]= "cryptodisk_uuid",
 [PRINT_HINT_STR]   = "hints_string",
@@ -181,6 +184,48 @@ probe_partmap (grub_disk_t disk, char delim)
 }
 }
 
+static void
+probe_partuuid (grub_disk_t disk, char delim)
+{
+  /*
+   * Nested partitions not supported for now.
+   * Non-nested partitions must have disk->partition->parent == NULL
+   */
+  if (disk->partition && disk->partition->parent == NULL)
+{
+  if (strcmp(disk->partition->partmap->name, "msdos") == 0)
+   {
+   /*
+* The partition GUID for MSDOS is the partition number (starting
+* with 1) prepended with the NT disk signature.
+*/
+grub_uint32_t nt_disk_sig;
+   grub_partition_t p = disk->partition;
+   disk->partition = p->parent;
+
+   if (grub_disk_read (disk, 0, GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC,
+   sizeof(nt_disk_sig), _disk_sig) == 0)
+
+   grub_printf ("%08x-%02x",
+grub_le_to_cpu32(nt_disk_sig), 1 + p->number);
+   disk->partition = p;
+   }
+  else if (strcmp(disk->partition->partmap->name, "gpt") == 0)
+   {
+ grub_partition_t p = disk->partition;
+ struct grub_gpt_partentry gptdata;
+
+ disk->partition = p->parent;
+
+ if (grub_disk_read (disk, p->offset, p->index,
+ sizeof(gptdata), ) == 0)
+   print_gpt_guid(gptdata.guid);
+
+ disk->partition = p;
+   }
+}
+}
+
 static void
 probe_cryptodisk_uuid (grub_disk_t disk, char delim)
 {
@@ -635,6 +680,12 @@ probe (const char *path, char **device_names, char delim)
/* Check if dev->disk itself is contained in a partmap.  */
probe_partmap (dev->disk, delim);
 
+  else if (print == PRINT_PARTUUID)
+   {
+ probe_partuuid (dev->disk, delim);
+ putchar (delim);
+   }
+
   else if (print == PRINT_MSDOS_PARTTYPE)
{
  if (dev->disk->partition
-- 
2.16.2


___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


[GRUB PARTUUID PATCH V6 2/4] Update grub_gpt_partentry

2018-03-18 Thread Nicholas Vinson
Rename grub_gpt_part_type to grub_gpt_part_guid and update
grub_gpt_partentry to use this type for both the partition type GUID
string and the partition GUID string entries.  This change ensures that
the two GUID fields are handled more consistently and helps to simplify
the changes needed to add Linux partition GUID support.

Signed-off-by: Nicholas Vinson 
---
 grub-core/disk/ldm.c | 2 +-
 grub-core/partmap/gpt.c  | 4 ++--
 include/grub/gpt_partition.h | 8 
 util/grub-install.c  | 2 +-
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c
index 0f978ad05..2a22d2d6c 100644
--- a/grub-core/disk/ldm.c
+++ b/grub-core/disk/ldm.c
@@ -135,7 +135,7 @@ msdos_has_ldm_partition (grub_disk_t dsk)
   return has_ldm;
 }
 
-static const grub_gpt_part_type_t ldm_type = GRUB_GPT_PARTITION_TYPE_LDM;
+static const grub_gpt_part_guid_t ldm_type = GRUB_GPT_PARTITION_TYPE_LDM;
 
 /* Helper for gpt_ldm_sector.  */
 static int
diff --git a/grub-core/partmap/gpt.c b/grub-core/partmap/gpt.c
index 83bcba779..103f6796f 100644
--- a/grub-core/partmap/gpt.c
+++ b/grub-core/partmap/gpt.c
@@ -33,10 +33,10 @@ static grub_uint8_t grub_gpt_magic[8] =
 0x45, 0x46, 0x49, 0x20, 0x50, 0x41, 0x52, 0x54
   };
 
-static const grub_gpt_part_type_t grub_gpt_partition_type_empty = 
GRUB_GPT_PARTITION_TYPE_EMPTY;
+static const grub_gpt_part_guid_t grub_gpt_partition_type_empty = 
GRUB_GPT_PARTITION_TYPE_EMPTY;
 
 #ifdef GRUB_UTIL
-static const grub_gpt_part_type_t grub_gpt_partition_type_bios_boot = 
GRUB_GPT_PARTITION_TYPE_BIOS_BOOT;
+static const grub_gpt_part_guid_t grub_gpt_partition_type_bios_boot = 
GRUB_GPT_PARTITION_TYPE_BIOS_BOOT;
 #endif
 
 /* 512 << 7 = 65536 byte sectors.  */
diff --git a/include/grub/gpt_partition.h b/include/grub/gpt_partition.h
index 1b32f6725..354fe2246 100644
--- a/include/grub/gpt_partition.h
+++ b/include/grub/gpt_partition.h
@@ -22,14 +22,14 @@
 #include 
 #include 
 
-struct grub_gpt_part_type
+struct grub_gpt_part_guid
 {
   grub_uint32_t data1;
   grub_uint16_t data2;
   grub_uint16_t data3;
   grub_uint8_t data4[8];
 } __attribute__ ((aligned(8)));
-typedef struct grub_gpt_part_type grub_gpt_part_type_t;
+typedef struct grub_gpt_part_guid grub_gpt_part_guid_t;
 
 #define GRUB_GPT_PARTITION_TYPE_EMPTY \
   { 0x0, 0x0, 0x0, \
@@ -70,8 +70,8 @@ struct grub_gpt_header
 
 struct grub_gpt_partentry
 {
-  grub_gpt_part_type_t type;
-  grub_uint8_t guid[16];
+  grub_gpt_part_guid_t type;
+  grub_gpt_part_guid_t guid;
   grub_uint64_t start;
   grub_uint64_t end;
   grub_uint64_t attrib;
diff --git a/util/grub-install.c b/util/grub-install.c
index 690f180c5..78d0138cb 100644
--- a/util/grub-install.c
+++ b/util/grub-install.c
@@ -714,7 +714,7 @@ is_prep_partition (grub_device_t dev)
   if (grub_disk_read (dev->disk, p->offset, p->index,
  sizeof (gptdata), ) == 0)
{
- const grub_gpt_part_type_t template = {
+ const grub_gpt_part_guid_t template = {
grub_cpu_to_le32_compile_time (0x9e1a2d38),
grub_cpu_to_le16_compile_time (0xc612),
grub_cpu_to_le16_compile_time (0x4316),
-- 
2.16.2


___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


[GRUB PARTUUID PATCH V6 4/4] Update grub script template files

2018-03-18 Thread Nicholas Vinson
Update grub-mkconfig.in and 10_linux.in to support grub-probe's new
partuuid target.  Update grub.texi documenation.

Signed-off-by: Nicholas Vinson 
---
 docs/grub.texi  |  9 +
 util/grub-mkconfig.in   |  3 +++
 util/grub.d/10_linux.in | 12 +---
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/docs/grub.texi b/docs/grub.texi
index 65b4bbeda..b6a44eb6b 100644
--- a/docs/grub.texi
+++ b/docs/grub.texi
@@ -1424,6 +1424,15 @@ the Linux kernel, using a @samp{root=UUID=...} kernel 
parameter.  This is
 usually more reliable, but in some cases it may not be appropriate.  To
 disable the use of UUIDs, set this option to @samp{true}.
 
+@item GRUB_ENABLE_LINUX_PARTUUID
+Setting this option to @samp{true} changes the behavior of
+@command{grub-mkconfig} so that it identifies the device containing the root
+filesystem by the partition UUID via the @samp{root=PARTUUID=...} kernel
+parameter.  This is desirable for Linux systems where identifying the root
+filesystem by its filesystem UUID or device name is imappropriate.  However,
+this option is only supported in Linux kernel versions least 2.6.37 (3.10 for
+systems using the MSDOS partition scheme) or newer.
+
 @item GRUB_DISABLE_RECOVERY
 If this option is set to @samp{true}, disable the generation of recovery
 mode menu entries.
diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
index 35ef583b0..9a1f92bdf 100644
--- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in
@@ -134,6 +134,7 @@ fi
 # Device containing our userland.  Typically used for root= parameter.
 GRUB_DEVICE="`${grub_probe} --target=device /`"
 GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> 
/dev/null`" || true
+GRUB_DEVICE_PARTUUID="`${grub_probe} --device ${GRUB_DEVICE} --target=partuuid 
2> /dev/null`" || true
 
 # Device containing our /boot partition.  Usually the same as GRUB_DEVICE.
 GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
@@ -188,6 +189,7 @@ if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then 
GRUB_ACTUAL_DEFAULT="`"${grub
 # override them.
 export GRUB_DEVICE \
   GRUB_DEVICE_UUID \
+  GRUB_DEVICE_PARTUUID \
   GRUB_DEVICE_BOOT \
   GRUB_DEVICE_BOOT_UUID \
   GRUB_FS \
@@ -223,6 +225,7 @@ export GRUB_DEFAULT \
   GRUB_TERMINAL_OUTPUT \
   GRUB_SERIAL_COMMAND \
   GRUB_DISABLE_LINUX_UUID \
+  GRUB_ENABLE_LINUX_PARTUUID \
   GRUB_DISABLE_RECOVERY \
   GRUB_VIDEO_BACKEND \
   GRUB_GFXMODE \
diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
index faedf74e1..53de33bea 100644
--- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in
@@ -45,12 +45,18 @@ esac
 
 # btrfs may reside on multiple devices. We cannot pass them as value of root= 
parameter
 # and mounting btrfs requires user space scanning, so force UUID in this case.
-if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = 
"xtrue" ] \
-|| ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
+if [ "x${GRUB_DEVICE_UUID}" = "x" ] && [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
+|| [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
+|| ( ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
+&& ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}" ) \
 || ( test -e "${GRUB_DEVICE}" && uses_abstraction "${GRUB_DEVICE}" lvm ); 
then
   LINUX_ROOT_DEVICE=${GRUB_DEVICE}
-else
+elif [ "x${GRUB_ENABLE_LINUX_PARTUUID}" != "xtrue" ] \
+|| [ "x${GRUB_DEVICE_PARTUUID}" = "x" ] \
+|| ! test -e "/dev/disk/by-partuuid/${GRUB_DEVICE_PARTUUID}"; then
   LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
+else
+  LINUX_ROOT_DEVICE=PARTUUID=${GRUB_DEVICE_PARTUUID}
 fi
 
 case x"$GRUB_FS" in
-- 
2.16.2


___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


[GRUB PARTUUID PATCH V6 0/4] Add PARTUUID detection support

2018-03-18 Thread Nicholas Vinson
Changes from Patch v5:
- Added sign-off by lines
- Fixed formatting errors found by Daniel Kiper

Changes from Patch v4:
- Updated grub.texi to reflect new behavior for
  GRUB_ENABLE_LINUX_PARTUUID

- Updated 10_linux.in logic to favor the PARTUUID when
  GRUB_ENABLE_LINUX_PARTUUID is enabled and GRUB_DISABLE_LINUX_UUID
  is disabled.

Changes from Patch v3:
- Removed flex-2.6.3 compatibility patch

- Removed Steve Kenton's patch

Changes from Patch v2:
- Added flex-2.6.3 compatibility patch

- Fixed a GPT partition read error

- Added Steve Kenton's patch

- Changed struct grub_part_gpt_type name to struct
  grub_part_gpt_part_guid

- Changed grub_part_gpt_type_t typedef name to grub_part_gpt_guid_t

- Added sprint_gpt_guid to Steve Kenton's patch

- Updated v1 and Steve Kenton's patch to use similar methods when
  reading partition GUIDs.

Changes from Patch v1:
- Added GRUB_ENABLE_LINUX_PARTUUID variable description to grub.texi

- Removed added gpt_part_guid copy logic from
  grub_gpt_partition_map_iterate()

- Removed added NT disk signature copy logic from
  grub_partition_msdos_iterate()

- Removed modifications to partition number increment logic

- Removed added guid union definition.

- Added GRUB_ENABLE_LINUX_PARTUUID to grub-mkconfig.in export list

- Moved PRINT_GPT_PARTTYPE printing logic to print_gpt_guid()
  function in grub-probe.c

- Updated PRINT_GPT_PARTTYPE case to call print_gpt_guid() function
  in grub-probe.c.

- Created probe_partuuid() function in grub-probe.c

- Updated print == PRINT_PARTUUID check logic in probe() to call
  probe_partuuid().

- Updated UUID logic in 10_linux.in to enable root=PARTUUID feature
  only if GRUB_DISABLE_LINUX_UUID is not set to true,
  and GRUB_DEVICE_PARTUUID is not empty, GRUB_ENABLE_LINUX_PARTUUID
  is set to true.

Hello,

This is a request to add PARTUUID detection support grub-probe for MBR
and GPT partition schemes.  The Linux kernel supports mounting the root
filesystem by Linux device name or by the Partition [GU]UID.  GRUB's
mkconfig, however, currently only supports specifying the rootfs in the
kernel command-line by Linux device name unless an initramfs is also
present.  When an initramfs is present GRUB's mkconfig will set the
kernel's root parameter value to either the Linux device name or to the
filesystem [GU]UID.

Therefore, the only way to protect a Linux system from failing to boot
when its Linux storage device names change is to either manually edit
grub.cfg or /etc/default/grub and append root=PARTUUID=xxx to the
command-line or create an initramfs that understands how to mount
devices by filesystem [G]UID and let grub-mkconfig pass the filesystem
[GU]UID to the initramfs.

The goal of this patch set is to enable root=PARTUUID=xxx support in
grub-mkconfig, so that users don't have to manually edit
/etc/default/grub or grub.cfg, or create an initramfs for the sole
purpose of having a robust bootloader configuration for Linux.

Thanks,
Nicholas Vinson

Nicholas Vinson (4):
  Centralize guid prints
  Update grub_gpt_partentry
  Add PARTUUID detection support to grub-probe
  Update grub script template files

 docs/grub.texi   |  9 +
 grub-core/disk/ldm.c |  2 +-
 grub-core/partmap/gpt.c  |  4 +--
 include/grub/gpt_partition.h |  8 ++---
 util/grub-install.c  |  2 +-
 util/grub-mkconfig.in|  3 ++
 util/grub-probe.c| 81 
 util/grub.d/10_linux.in  | 12 +--
 8 files changed, 95 insertions(+), 26 deletions(-)

-- 
2.16.2


___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


[GRUB PARTUUID PATCH V6 1/4] Centralize guid prints

2018-03-18 Thread Nicholas Vinson
Define print_gpt_guid(), so there is a central function for printing
GUID strings.  This change is a precursor for later patches which rely
on this logic.

Signed-off-by: Nicholas Vinson 
---
 util/grub-probe.c | 30 +++---
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/util/grub-probe.c b/util/grub-probe.c
index 8ac527d2f..21cb80fbe 100644
--- a/util/grub-probe.c
+++ b/util/grub-probe.c
@@ -129,6 +129,20 @@ get_targets_string (void)
   return str;
 }
 
+static int
+print_gpt_guid (grub_gpt_part_guid_t guid)
+{
+  guid.data1 = grub_le_to_cpu32 (guid.data1);
+  guid.data2 = grub_le_to_cpu16 (guid.data2);
+  guid.data3 = grub_le_to_cpu16 (guid.data3);
+
+  return grub_printf ("%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ guid.data1, guid.data2, guid.data3, guid.data4[0],
+ guid.data4[1], guid.data4[2], guid.data4[3],
+ guid.data4[4], guid.data4[5], guid.data4[6],
+ guid.data4[7]);
+}
+
 static void
 do_print (const char *x, void *data)
 {
@@ -641,21 +655,7 @@ probe (const char *path, char **device_names, char delim)
 
   if (grub_disk_read (dev->disk, p->offset, p->index,
   sizeof (gptdata), ) == 0)
-{
-  grub_gpt_part_type_t gpttype;
-  gpttype.data1 = grub_le_to_cpu32 (gptdata.type.data1);
-  gpttype.data2 = grub_le_to_cpu16 (gptdata.type.data2);
-  gpttype.data3 = grub_le_to_cpu16 (gptdata.type.data3);
-  grub_memcpy (gpttype.data4, gptdata.type.data4, 8);
-
-  grub_printf 
("%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
-   gpttype.data1, gpttype.data2,
-   gpttype.data3, gpttype.data4[0], 
-   gpttype.data4[1], gpttype.data4[2],
-   gpttype.data4[3], gpttype.data4[4],
-   gpttype.data4[5], gpttype.data4[6],
-   gpttype.data4[7]);
-}
+   print_gpt_guid(gptdata.type);
   dev->disk->partition = p;
 }
   putchar (delim);
-- 
2.16.2


___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [GRUB PARTUUID PATCH V5 3/3] Update grub script template files

2018-03-18 Thread Nick Vinson
On 02/20/2018 09:45 AM, Daniel Kiper wrote:
> On Sun, Feb 04, 2018 at 11:47:37AM -0800, Nicholas Vinson wrote:
>> Update grub-mkconfig.in and 10_linux.in to support grub-probe's new
>> partuuid target.  Update grub.texi documenation.
> 
> As earlier lack of SOB. Otherwise LGTM.

Will be added in V6.

Thanks,
Nicholas Vinson
> 
> Daniel
> 



signature.asc
Description: OpenPGP digital signature
___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [GRUB PARTUUID PATCH V5 2/3] Add PARTUUID detection support to grub-probe

2018-03-18 Thread Nick Vinson
On 02/20/2018 09:41 AM, Daniel Kiper wrote:
> On Sun, Feb 04, 2018 at 11:47:36AM -0800, Nicholas Vinson wrote:
>> Add PARTUUID detection support grub-probe for MBR and GPT partition
>> schemes.  The Linux kernel supports mounting the root filesystem by
>> Linux device name or by the Partition [GU]UID.  GRUB's mkconfig,
>> however, currently only supports specifing the rootfs in the kernel
>> command-line by Linux device name unless an initramfs is also present.
>> When an initramfs is present GRUB's mkconfig will set the kernel's root
>> parameter value to either the Linux device name or to the filesystem
>> [GU]UID.
>>
>> Therefore, the only way to protect a Linux system from failing to boot
>> when its Linux storage device names change is to either manually edit
>> grub.cfg or /etc/default/grub and append root=PARTUUID=xxx to the
>> command-line or create an initramfs that understands how to mount
>> devices by filesystem [G]UID and let grub-mkconfig pass the filesystem
>> [GU]UID to the initramfs.
>>
>> The goal of this patch set is to enable root=PARTUUID=xxx support in
>> grub-mkconfig, so that users don't have to manually edit
>> /etc/default/grub or grub.cfg, or create an initramfs for the sole
>> purpose of having a robust bootloader configuration for Linux.
>> ---
>>  util/grub-probe.c | 51 +++
>>  1 file changed, 51 insertions(+)
>>
>> diff --git a/util/grub-probe.c b/util/grub-probe.c
>> index 21cb80fbe..3656e32e8 100644
>> --- a/util/grub-probe.c
>> +++ b/util/grub-probe.c
>> @@ -28,6 +28,7 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>>  #include 
>>  #include 
>>  #include 
>> @@ -62,6 +63,7 @@ enum {
>>PRINT_DRIVE,
>>PRINT_DEVICE,
>>PRINT_PARTMAP,
>> +  PRINT_PARTUUID,
>>PRINT_ABSTRACTION,
>>PRINT_CRYPTODISK_UUID,
>>PRINT_HINT_STR,
>> @@ -85,6 +87,7 @@ static const char *targets[] =
>>  [PRINT_DRIVE]  = "drive",
>>  [PRINT_DEVICE] = "device",
>>  [PRINT_PARTMAP]= "partmap",
>> +[PRINT_PARTUUID]   = "partuuid",
>>  [PRINT_ABSTRACTION]= "abstraction",
>>  [PRINT_CRYPTODISK_UUID]= "cryptodisk_uuid",
>>  [PRINT_HINT_STR]   = "hints_string",
>> @@ -181,6 +184,48 @@ probe_partmap (grub_disk_t disk, char delim)
>>  }
>>  }
>>
>> +static void
>> +probe_partuuid (grub_disk_t disk, char delim)
>> +{
>> +  /*
>> +   * Nested partitions not supported for now.
>> +   * Non-nested partitions must have disk->partition->parent == NULL
>> +   */
>> +  if (disk->partition && disk->partition->parent == NULL)
>> +{
>> +  if (strcmp(disk->partition->partmap->name, "msdos") == 0)
>> +{
>> +/*
>> + * The partition GUID for MSDOS is the partition number (starting
>> + * with 1) prepended with the NT disk signature.
>> + */
>> +grub_uint32_t nt_disk_sig;
> 
> Here you use spaces...
> 
>> +grub_partition_t p = disk->partition;
> 
> ...and here tab and spaces. I prefer the latter.
> Please fix this.
> 

Fixed.

>> +disk->partition = p->parent;
>> +
>> +if (grub_disk_read (disk, 0, GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC,
>> +sizeof(nt_disk_sig), _disk_sig) == 0)
>> +  {
>> +grub_printf ("%08x-%02x",
>> + grub_le_to_cpu32(nt_disk_sig), 1 + p->number);
>> +  }
> 
> These curly brackets are not needed. Please remove them and leave empty
> line before next instruction.
> 

Curly braces removed and a new line added.

>> +disk->partition = p;
>> +}
>> +  else if (strcmp(disk->partition->partmap->name, "gpt") == 0)
>> +{
>> +  grub_partition_t p = disk->partition;
>> +  struct grub_gpt_partentry gptdata;
>> +
>> +  disk->partition = p->parent;
>> +
>> +  if (grub_disk_read (disk, p->offset, p->index,
>> +  sizeof(gptdata), ) == 0)
>> +print_gpt_guid(gptdata.guid);
> 
> Please add empty line here.
> 

Added.  These changes will also be included in version 6.
Thanks,
Nicholas Vinson

>> +  disk->partition = p;
>> +}
>> +}
>> +}
>> +
> 
> Otherwise patch LGMT.
> 
> Daniel
> 



signature.asc
Description: OpenPGP digital signature
___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel


Re: [GRUB PARTUUID PATCH V5 1/3] Update grub_gpt_partentry; centralize guid prints

2018-03-18 Thread Nick Vinson
Sorry for the delay in responding.  I just now saw these replies.

On 02/20/2018 09:30 AM, Daniel Kiper wrote:
> On Sun, Feb 04, 2018 at 11:47:35AM -0800, Nicholas Vinson wrote:
>> To help clean the code and simplify the code in util/grub-probe.c, this
>> patch renames grub_gpt_part_type to grub_gpt_part_guid and updates
>> grub_gpt_partentry to use this type for both the partition type GUID
>> string and the partition GUID string entries.
>>
>> This patch also moves the GUID printing logic in util/grub-probe.c to a
>> separate function.  This change allows the partuuid logic in the next
>> commit to use the same printing logic without having to completely
>> duplicate it.
> 
> One logical change per patch please...

Done.  I've split this patch into two.

> And please add your SOB next time.

Done.  I'll submit a version 6 shortly.

Thanks,
Nicholas Vinson
> 
> Daniel
> 



signature.asc
Description: OpenPGP digital signature
___
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel