summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorGeoff Parker <geoffhp@gmail.com>2018-10-11 16:31:26 (GMT)
committerRichard Purdie <richard.purdie@linuxfoundation.org>2018-10-12 15:57:21 (GMT)
commit50f41202cc9928e2a3c12ccbe36f4af6fc0aa8c6 (patch)
tree2667b549fe9f5a9236dbb27a2f21653303c8c576 /scripts
parent2848e37111ac969f1ae67010342ec36c80d7bbe5 (diff)
downloadpoky-50f41202cc9928e2a3c12ccbe36f4af6fc0aa8c6.tar.gz
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. (From OE-Core rev: d6936301d7598b7a783beaae95109555faf6cc17) Signed-off-by: Geoff Parker <geoffhp@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/lib/wic/engine.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
index e6c830c..4662c66 100644
--- a/scripts/lib/wic/engine.py
+++ b/scripts/lib/wic/engine.py
@@ -266,10 +266,15 @@ class Disk:
266 out = exec_cmd("%s -sm %s unit B print" % (self.parted, self.imagepath)) 266 out = exec_cmd("%s -sm %s unit B print" % (self.parted, self.imagepath))
267 parttype = namedtuple("Part", "pnum start end size fstype") 267 parttype = namedtuple("Part", "pnum start end size fstype")
268 splitted = out.splitlines() 268 splitted = out.splitlines()
269 lsector_size, psector_size, self._ptable_format = splitted[1].split(":")[3:6] 269 # skip over possible errors in exec_cmd output
270 try:
271 idx =splitted.index("BYT;")
272 except ValueError:
273 raise WicError("Error getting partition information from %s" % (self.parted))
274 lsector_size, psector_size, self._ptable_format = splitted[idx + 1].split(":")[3:6]
270 self._lsector_size = int(lsector_size) 275 self._lsector_size = int(lsector_size)
271 self._psector_size = int(psector_size) 276 self._psector_size = int(psector_size)
272 for line in splitted[2:]: 277 for line in splitted[idx + 2:]:
273 pnum, start, end, size, fstype = line.split(':')[:5] 278 pnum, start, end, size, fstype = line.split(':')[:5]
274 partition = parttype(int(pnum), int(start[:-1]), int(end[:-1]), 279 partition = parttype(int(pnum), int(start[:-1]), int(end[:-1]),
275 int(size[:-1]), fstype) 280 int(size[:-1]), fstype)