diff mbox series

[RFC] wic: use part_name when defined

Message ID 20230322155430.31594-1-dit.kozmaj@kynetics.com
State New
Headers show
Series [RFC] wic: use part_name when defined | expand

Commit Message

Dit Kozmaj March 22, 2023, 3:54 p.m. UTC
From: Dit Kozmaj <dit.kozmaj@kynetics.com>

So far part.label has been used to define GPT partition label even if
part.part_name was defined.
Fix the code to use part.part_name whenever available, as it makes sense
to have a GPT partition label which is different from the contained
filesystem label.

Signed-off-by: Dit Kozmaj <dit.kozmaj@kynetics.com>
Signed-off-by: Diego Rondini <diego.rondini@kynetics.com>
---
 scripts/lib/wic/plugins/imager/direct.py | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

Comments

Dit Kozmaj March 22, 2023, 4:27 p.m. UTC | #1
Hi,
We tested a few combinations of --part-name and --label parameters when
creating a WIC image.

When only the --part-name is defined, the GPT partition label is correctly
set, and filesystem label is empty.

If both are defined, or only --label is defined, both the filesystem label
and the GPT partition label are set to the value of --label.


As it makes sense to have a GPT partition label which is different from the
contained filesystem label, our proposal is to fix the case when both are
set, and keep the current behavior when only --label is set for
compatibility reasons.

If this proposal is ok, we will patch the documentation to document that
the GPT partition label is set even when only --label is defined.

Regards

On Wed, Mar 22, 2023 at 4:54 PM <dit.kozmaj@kynetics.com> wrote:

> From: Dit Kozmaj <dit.kozmaj@kynetics.com>
>
> So far part.label has been used to define GPT partition label even if
> part.part_name was defined.
> Fix the code to use part.part_name whenever available, as it makes sense
> to have a GPT partition label which is different from the contained
> filesystem label.
>
> Signed-off-by: Dit Kozmaj <dit.kozmaj@kynetics.com>
> Signed-off-by: Diego Rondini <diego.rondini@kynetics.com>
> ---
>  scripts/lib/wic/plugins/imager/direct.py | 14 ++++----------
>  1 file changed, 4 insertions(+), 10 deletions(-)
>
> diff --git a/scripts/lib/wic/plugins/imager/direct.py
> b/scripts/lib/wic/plugins/imager/direct.py
> index dfaa901567..1f06b89f8e 100644
> --- a/scripts/lib/wic/plugins/imager/direct.py
> +++ b/scripts/lib/wic/plugins/imager/direct.py
> @@ -571,11 +571,12 @@ class PartitionedImage():
>              self._create_partition(self.path, part.type,
>                                     parted_fs_type, part.start,
> part.size_sec)
>
> -            if part.part_name:
> +            if part.part_name or part.label:
> +                partition_label = part.part_name if part.part_name else
> part.label
>                  logger.debug("partition %d: set name to %s",
> -                             part.num, part.part_name)
> +                             part.num, partition_label)
>                  exec_native_cmd("sgdisk --change-name=%d:%s %s" % \
> -                                         (part.num, part.part_name,
> +                                         (part.num, partition_label,
>                                            self.path), self.native_sysroot)
>
>              if part.part_type:
> @@ -592,13 +593,6 @@ class PartitionedImage():
>                                  (part.num, part.uuid, self.path),
>                                  self.native_sysroot)
>
> -            if part.label and self.ptable_format == "gpt":
> -                logger.debug("partition %d: set name to %s",
> -                             part.num, part.label)
> -                exec_native_cmd("parted -s %s name %d %s" % \
> -                                (self.path, part.num, part.label),
> -                                self.native_sysroot)
> -
>              if part.active:
>                  flag_name = "legacy_boot" if self.ptable_format == 'gpt'
> else "boot"
>                  logger.debug("Set '%s' flag for partition '%s' on disk
> '%s'",
> --
> 2.34.1
>
>
Richard Purdie March 29, 2023, 3:55 p.m. UTC | #2
On Wed, 2023-03-22 at 16:54 +0100, dit.kozmaj@kynetics.com wrote:
> From: Dit Kozmaj <dit.kozmaj@kynetics.com>
> 
> So far part.label has been used to define GPT partition label even if
> part.part_name was defined.
> Fix the code to use part.part_name whenever available, as it makes sense
> to have a GPT partition label which is different from the contained
> filesystem label.
> 
> Signed-off-by: Dit Kozmaj <dit.kozmaj@kynetics.com>
> Signed-off-by: Diego Rondini <diego.rondini@kynetics.com>
> ---
>  scripts/lib/wic/plugins/imager/direct.py | 14 ++++----------
>  1 file changed, 4 insertions(+), 10 deletions(-)
> 
> diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py
> index dfaa901567..1f06b89f8e 100644
> --- a/scripts/lib/wic/plugins/imager/direct.py
> +++ b/scripts/lib/wic/plugins/imager/direct.py
> @@ -571,11 +571,12 @@ class PartitionedImage():
>              self._create_partition(self.path, part.type,
>                                     parted_fs_type, part.start, part.size_sec)
>  
> -            if part.part_name:
> +            if part.part_name or part.label:
> +                partition_label = part.part_name if part.part_name else part.label
>                  logger.debug("partition %d: set name to %s",
> -                             part.num, part.part_name)
> +                             part.num, partition_label)
>                  exec_native_cmd("sgdisk --change-name=%d:%s %s" % \
> -                                         (part.num, part.part_name,
> +                                         (part.num, partition_label,
>                                            self.path), self.native_sysroot)
>  
>              if part.part_type:
> @@ -592,13 +593,6 @@ class PartitionedImage():
>                                  (part.num, part.uuid, self.path),
>                                  self.native_sysroot)
>  
> -            if part.label and self.ptable_format == "gpt":
> -                logger.debug("partition %d: set name to %s",
> -                             part.num, part.label)
> -                exec_native_cmd("parted -s %s name %d %s" % \
> -                                (self.path, part.num, part.label),
> -                                self.native_sysroot)
> -
>              if part.active:
>                  flag_name = "legacy_boot" if self.ptable_format == 'gpt' else "boot"
>                  logger.debug("Set '%s' flag for partition '%s' on disk '%s'",

This was flagged on irc as not having a response. We're struggling with
a lack of a maintainer for wic at the moment so review is slow and I'm
not really a wic expert but I'm all we have :/.

As mentioned, changes to code like this are much more likely if there
is a test case included. The existing tests can be run with "oe-
selftest -r wic".

Can you confirm this patch doesn't regress the current tests?

Would you be able to add a test so this change doesn't regress in
future?

Cheers,

Richard
Diego Rondini April 6, 2023, 9:08 a.m. UTC | #3
Hi,

On Wed, Mar 29, 2023 at 5:55 PM Richard Purdie <
richard.purdie@linuxfoundation.org> wrote:

> On Wed, 2023-03-22 at 16:54 +0100, dit.kozmaj@kynetics.com wrote:
> > From: Dit Kozmaj <dit.kozmaj@kynetics.com>
> >
> > So far part.label has been used to define GPT partition label even if
> > part.part_name was defined.
> > Fix the code to use part.part_name whenever available, as it makes sense
> > to have a GPT partition label which is different from the contained
> > filesystem label.
> >
> > Signed-off-by: Dit Kozmaj <dit.kozmaj@kynetics.com>
> > Signed-off-by: Diego Rondini <diego.rondini@kynetics.com>
> > ---
> >  scripts/lib/wic/plugins/imager/direct.py | 14 ++++----------
> >  1 file changed, 4 insertions(+), 10 deletions(-)
> >
> > diff --git a/scripts/lib/wic/plugins/imager/direct.py
> b/scripts/lib/wic/plugins/imager/direct.py
> > index dfaa901567..1f06b89f8e 100644
> > --- a/scripts/lib/wic/plugins/imager/direct.py
> > +++ b/scripts/lib/wic/plugins/imager/direct.py
> > @@ -571,11 +571,12 @@ class PartitionedImage():
> >              self._create_partition(self.path, part.type,
> >                                     parted_fs_type, part.start,
> part.size_sec)
> >
> > -            if part.part_name:
> > +            if part.part_name or part.label:
> > +                partition_label = part.part_name if part.part_name else
> part.label
> >                  logger.debug("partition %d: set name to %s",
> > -                             part.num, part.part_name)
> > +                             part.num, partition_label)
> >                  exec_native_cmd("sgdisk --change-name=%d:%s %s" % \
> > -                                         (part.num, part.part_name,
> > +                                         (part.num, partition_label,
> >                                            self.path),
> self.native_sysroot)
> >
> >              if part.part_type:
> > @@ -592,13 +593,6 @@ class PartitionedImage():
> >                                  (part.num, part.uuid, self.path),
> >                                  self.native_sysroot)
> >
> > -            if part.label and self.ptable_format == "gpt":
> > -                logger.debug("partition %d: set name to %s",
> > -                             part.num, part.label)
> > -                exec_native_cmd("parted -s %s name %d %s" % \
> > -                                (self.path, part.num, part.label),
> > -                                self.native_sysroot)
> > -
> >              if part.active:
> >                  flag_name = "legacy_boot" if self.ptable_format ==
> 'gpt' else "boot"
> >                  logger.debug("Set '%s' flag for partition '%s' on disk
> '%s'",
>
> This was flagged on irc as not having a response. We're struggling with
> a lack of a maintainer for wic at the moment so review is slow and I'm
> not really a wic expert but I'm all we have :/.
>
> As mentioned, changes to code like this are much more likely if there
> is a test case included. The existing tests can be run with "oe-
> selftest -r wic".
>
> Can you confirm this patch doesn't regress the current tests?
>

We've sent a new patchset that doesn't regress the current tests:
https://patchwork.yoctoproject.org/project/oe-core/list/?series=11822


> Would you be able to add a test so this change doesn't regress in
> future?
>

The aforementioned patchset includes a new test for that purpose and
updates the documentation to reflect the changes and explain what happens
in each case.

This RFC is superseded by the patchset.

Cheers,
>
> Richard
>
>
Cheers,

Diego Rondini
Sr. Embedded Engineer

Kynetics
www.kynetics.com
diff mbox series

Patch

diff --git a/scripts/lib/wic/plugins/imager/direct.py b/scripts/lib/wic/plugins/imager/direct.py
index dfaa901567..1f06b89f8e 100644
--- a/scripts/lib/wic/plugins/imager/direct.py
+++ b/scripts/lib/wic/plugins/imager/direct.py
@@ -571,11 +571,12 @@  class PartitionedImage():
             self._create_partition(self.path, part.type,
                                    parted_fs_type, part.start, part.size_sec)
 
-            if part.part_name:
+            if part.part_name or part.label:
+                partition_label = part.part_name if part.part_name else part.label
                 logger.debug("partition %d: set name to %s",
-                             part.num, part.part_name)
+                             part.num, partition_label)
                 exec_native_cmd("sgdisk --change-name=%d:%s %s" % \
-                                         (part.num, part.part_name,
+                                         (part.num, partition_label,
                                           self.path), self.native_sysroot)
 
             if part.part_type:
@@ -592,13 +593,6 @@  class PartitionedImage():
                                 (part.num, part.uuid, self.path),
                                 self.native_sysroot)
 
-            if part.label and self.ptable_format == "gpt":
-                logger.debug("partition %d: set name to %s",
-                             part.num, part.label)
-                exec_native_cmd("parted -s %s name %d %s" % \
-                                (self.path, part.num, part.label),
-                                self.native_sysroot)
-
             if part.active:
                 flag_name = "legacy_boot" if self.ptable_format == 'gpt' else "boot"
                 logger.debug("Set '%s' flag for partition '%s' on disk '%s'",