[oe-commits] [openembedded-core] 23/33: wic: make engine.py:get_partitions() resilient to parted/dmidecode stderr output

git at git.openembedded.org git at git.openembedded.org
Thu Apr 25 14:02:32 UTC 2019


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch sumo
in repository openembedded-core.

commit 6b5681533eed4e6c00e1cc7ee442c93076f1c976
Author: Geoff Parker <geoffhp at gmail.com>
AuthorDate: Thu Oct 11 09:31:26 2018 -0700

    wic: make engine.py:get_partitions() resilient to parted/dmidecode stderr output
    
    Running wic commands on Debian 10 systems fail in
    scripts/lib/wic/engine.py:get_partitions() due to new stderr output captured
    when trying to parse the output from /sbin/parted as a non-root user.
    
    The parted command calls the dmidecode utility, which produces this error
    as a non-root user:
        /sys/firmware/dmi/tables/smbios_entry_point: Permission denied
        /dev/mem: Permission denied
    
    scripts/lib/wic/engine.py:get_partitions() calls misc.py:exec_cmd(),
    a subprocess wrapper which returns a combined stderr and sdtdout.
    These messages to stderr confuse the partition table parser in
    get_partitions().
    
    This patch has the partition table parser ignore lines before the expected
    "BYT;" header string.
    
    Running wic in Debian 9 does not have this issue.
    
    Signed-off-by: Geoff Parker <geoffhp at gmail.com>
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
    Signed-off-by: Armin Kuster <akuster808 at gmail.com>
---
 scripts/lib/wic/engine.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
index 4996bff..4eefc94 100644
--- a/scripts/lib/wic/engine.py
+++ b/scripts/lib/wic/engine.py
@@ -266,10 +266,15 @@ class Disk:
             out = exec_cmd("%s -sm %s unit B print" % (self.parted, self.imagepath))
             parttype = namedtuple("Part", "pnum start end size fstype")
             splitted = out.splitlines()
-            lsector_size, psector_size, self._ptable_format = splitted[1].split(":")[3:6]
+            # skip over possible errors in exec_cmd output
+            try:
+                idx =splitted.index("BYT;")
+            except ValueError:
+                raise WicError("Error getting partition information from %s" % (self.parted))
+            lsector_size, psector_size, self._ptable_format = splitted[idx + 1].split(":")[3:6]
             self._lsector_size = int(lsector_size)
             self._psector_size = int(psector_size)
-            for line in splitted[2:]:
+            for line in splitted[idx + 2:]:
                 pnum, start, end, size, fstype = line.split(':')[:5]
                 partition = parttype(int(pnum), int(start[:-1]), int(end[:-1]),
                                      int(size[:-1]), fstype)

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list