Skip to contentSkip to conversation

Make "set -x" in postinst scripts not break rootfs

PATCH New Peter Seebach 1 participant 2 messages May 21, 2015

lore
Share & tools
lore
#0 lore raw

cover Make "set -x" in postinst scripts not break rootfs

I was trying to debug a postinstall script, so I added set -x, so rootfs creation broke. The issue is that set -x caused lines of code to be emitted in a place where the log file checker saw them. It's totally okay for a postinstall script to exit 1; that moves it into etc/rpm-postinsts, and then it runs on the target.

So it shouldn't prevent rootfs creation from "succeeding". Solution: Don't process lines preceeded by a "+", because that's probably set -x output.

The following changes since commit fe7780a9bbbfa4dcbbe457618a0842e91a3c6a0e:

libxdmcp: make libbsd usage deterministic (2015-05-21 10:48:41 +0100)

are available in the git repository at:

git://git.yoctoproject.org/poky-contrib seebs/setminusx
http://git.yoctoproject.org/cgit.cgi/poky-contrib/log/?h=seebs/setminusx

Peter Seebach (1):
rootfs.py: Make set -x not break rootfs creation

 meta/lib/oe/rootfs.py | 3 +++
 1 file changed, 3 insertions(+)
Signature · 1 line
2.3.1
#1 lore raw

PATCH 1/1 rootfs.py: Make set -x not break rootfs creation

The rootfs logfile check errors out if it finds an "exit 1" in a log. But consider the shell idiom:
if ! $command; then exit 1; fi
and consider a postinstall script with a "set -x" for debugging purposes (to get log output in /var/log/postinstall.log.)

Solution: Ignore lines prefixed with a +, because those show shell code even if a specific fragment won't be executed.

---
 meta/lib/oe/rootfs.py | 3 +++
 1 file changed, 3 insertions(+)
meta/lib/oe/rootfs.py +3 -0
index 6fb749f..5d27d2f 100644
@@ -401,6 +401,9 @@ class RpmRootfs(Rootfs):
             for line in log.read().split('\n'):
                 if 'log_check' in line:
                     continue
+                # sh -x may emit code which isn't actually executed
+                if line.startswith('+'):
+		    continue
 
                 m = r.search(line)
                 if m:
Signature · 1 line
2.3.1