diff options
| author | Ed Bartosh <ed.bartosh@linux.intel.com> | 2015-11-24 15:22:49 +0200 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-12-01 21:32:02 +0000 |
| commit | 67af6d640203433116a9c1e39fd46da02005130f (patch) | |
| tree | 660ce52ea39c797457a1e267dda5419842ae7a39 /scripts/lib | |
| parent | 8ffba255a84de4e4ade13ae0d3c66c3a585284e9 (diff) | |
| download | poky-67af6d640203433116a9c1e39fd46da02005130f.tar.gz | |
wic: exec_native_cmd: implement support for pseudo
Wic runs some tools through pseudo, which makes exec_native_cmd
to fail and throw cryptic error message when tool is not baked:
For example:
Error: exec_cmd: 'export
PSEUDO_PREFIX=/media/ssd/poky-build/tmp/sysroots/x86_64-linux/usr;export
PSEUDO_LOCALSTATEDIR=/media/ssd/poky-build/tmp/work/qemux86-poky-linux/
...
PSEUDO_PASSWD=/media/ssd/poky-build/tmp/work/qemux86-poky-linux/ ...
PSEUDO_NOSYMLINKEXP=1;/media/ssd/poky-build/tmp/sysroots/ ...
mkfs.ext4 -F -i 8192 /var/tmp/wic/build/rootfs_platform.7.ext4 -L
platform -d
/media/ssd/poky-build/tmp/work/qemux86-poky-linux/core-image-minimal/...
returned '1' instead of 0
Made exec_native_cmd aware of pseudo and properly report
errors when command is not found.
(From OE-Core rev: 04bab58809c63c9114feb0aadc9b6115be10fcc4)
Signed-off-by: Ed Bartosh <ed.bartosh@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib')
| -rw-r--r-- | scripts/lib/wic/kickstart/custom_commands/partition.py | 6 | ||||
| -rw-r--r-- | scripts/lib/wic/utils/oe/misc.py | 18 |
2 files changed, 14 insertions, 10 deletions
diff --git a/scripts/lib/wic/kickstart/custom_commands/partition.py b/scripts/lib/wic/kickstart/custom_commands/partition.py index eee25a493d..babc006945 100644 --- a/scripts/lib/wic/kickstart/custom_commands/partition.py +++ b/scripts/lib/wic/kickstart/custom_commands/partition.py | |||
| @@ -297,7 +297,7 @@ class Wic_PartData(FC4_PartData): | |||
| 297 | 297 | ||
| 298 | mkfs_cmd = "mkfs.%s -F %s %s %s -d %s" % \ | 298 | mkfs_cmd = "mkfs.%s -F %s %s %s -d %s" % \ |
| 299 | (self.fstype, extra_imagecmd, rootfs, label_str, rootfs_dir) | 299 | (self.fstype, extra_imagecmd, rootfs, label_str, rootfs_dir) |
| 300 | exec_native_cmd(pseudo + mkfs_cmd, native_sysroot) | 300 | exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo) |
| 301 | 301 | ||
| 302 | def prepare_rootfs_btrfs(self, rootfs, oe_builddir, rootfs_dir, | 302 | def prepare_rootfs_btrfs(self, rootfs, oe_builddir, rootfs_dir, |
| 303 | native_sysroot, pseudo): | 303 | native_sysroot, pseudo): |
| @@ -330,7 +330,7 @@ class Wic_PartData(FC4_PartData): | |||
| 330 | 330 | ||
| 331 | mkfs_cmd = "mkfs.%s -b %d -r %s %s %s" % \ | 331 | mkfs_cmd = "mkfs.%s -b %d -r %s %s %s" % \ |
| 332 | (self.fstype, rootfs_size * 1024, rootfs_dir, label_str, rootfs) | 332 | (self.fstype, rootfs_size * 1024, rootfs_dir, label_str, rootfs) |
| 333 | exec_native_cmd(pseudo + mkfs_cmd, native_sysroot) | 333 | exec_native_cmd(mkfs_cmd, native_sysroot, pseudo=pseudo) |
| 334 | 334 | ||
| 335 | def prepare_rootfs_vfat(self, rootfs, oe_builddir, rootfs_dir, | 335 | def prepare_rootfs_vfat(self, rootfs, oe_builddir, rootfs_dir, |
| 336 | native_sysroot, pseudo): | 336 | native_sysroot, pseudo): |
| @@ -378,7 +378,7 @@ class Wic_PartData(FC4_PartData): | |||
| 378 | """ | 378 | """ |
| 379 | squashfs_cmd = "mksquashfs %s %s -noappend" % \ | 379 | squashfs_cmd = "mksquashfs %s %s -noappend" % \ |
| 380 | (rootfs_dir, rootfs) | 380 | (rootfs_dir, rootfs) |
| 381 | exec_native_cmd(pseudo + squashfs_cmd, native_sysroot) | 381 | exec_native_cmd(squashfs_cmd, native_sysroot, pseudo=pseudo) |
| 382 | 382 | ||
| 383 | def prepare_empty_partition_ext(self, rootfs, oe_builddir, | 383 | def prepare_empty_partition_ext(self, rootfs, oe_builddir, |
| 384 | native_sysroot): | 384 | native_sysroot): |
diff --git a/scripts/lib/wic/utils/oe/misc.py b/scripts/lib/wic/utils/oe/misc.py index c6d2e5f204..81239ac357 100644 --- a/scripts/lib/wic/utils/oe/misc.py +++ b/scripts/lib/wic/utils/oe/misc.py | |||
| @@ -89,7 +89,7 @@ def cmd_in_path(cmd, path): | |||
| 89 | 89 | ||
| 90 | return bb.utils.which(path, cmd) != "" or False | 90 | return bb.utils.which(path, cmd) != "" or False |
| 91 | 91 | ||
| 92 | def exec_native_cmd(cmd_and_args, native_sysroot, catch=3): | 92 | def exec_native_cmd(cmd_and_args, native_sysroot, catch=3, pseudo=""): |
| 93 | """ | 93 | """ |
| 94 | Execute native command, catching stderr, stdout | 94 | Execute native command, catching stderr, stdout |
| 95 | 95 | ||
| @@ -97,6 +97,12 @@ def exec_native_cmd(cmd_and_args, native_sysroot, catch=3): | |||
| 97 | 97 | ||
| 98 | Always need to execute native commands as_shell | 98 | Always need to execute native commands as_shell |
| 99 | """ | 99 | """ |
| 100 | # The reason -1 is used is because there may be "export" commands. | ||
| 101 | args = cmd_and_args.split(';')[-1].split() | ||
| 102 | msger.debug(args) | ||
| 103 | |||
| 104 | if pseudo: | ||
| 105 | cmd_and_args = pseudo + cmd_and_args | ||
| 100 | native_paths = \ | 106 | native_paths = \ |
| 101 | "%s/sbin:%s/usr/sbin:%s/usr/bin" % \ | 107 | "%s/sbin:%s/usr/sbin:%s/usr/bin" % \ |
| 102 | (native_sysroot, native_sysroot, native_sysroot) | 108 | (native_sysroot, native_sysroot, native_sysroot) |
| @@ -104,18 +110,16 @@ def exec_native_cmd(cmd_and_args, native_sysroot, catch=3): | |||
| 104 | (native_paths, cmd_and_args) | 110 | (native_paths, cmd_and_args) |
| 105 | msger.debug("exec_native_cmd: %s" % cmd_and_args) | 111 | msger.debug("exec_native_cmd: %s" % cmd_and_args) |
| 106 | 112 | ||
| 107 | # The reason -1 is used is because there may be "export" commands. | ||
| 108 | args = cmd_and_args.split(';')[-1].split() | ||
| 109 | msger.debug(args) | ||
| 110 | |||
| 111 | # If the command isn't in the native sysroot say we failed. | 113 | # If the command isn't in the native sysroot say we failed. |
| 112 | if cmd_in_path(args[0], native_paths): | 114 | if cmd_in_path(args[0], native_paths): |
| 113 | ret, out = _exec_cmd(native_cmd_and_args, True, catch) | 115 | ret, out = _exec_cmd(native_cmd_and_args, True, catch) |
| 114 | else: | 116 | else: |
| 115 | ret = 127 | 117 | ret = 127 |
| 116 | 118 | ||
| 117 | if ret == 127: # shell command-not-found | 119 | prog = args[0] |
| 118 | prog = args[0] | 120 | # shell command-not-found |
| 121 | if ret == 127 \ | ||
| 122 | or (pseudo and ret == 1 and out == "Can't find '%s' in $PATH." % prog): | ||
| 119 | msg = "A native program %s required to build the image "\ | 123 | msg = "A native program %s required to build the image "\ |
| 120 | "was not found (see details above).\n\n" % prog | 124 | "was not found (see details above).\n\n" % prog |
| 121 | recipe = NATIVE_RECIPES.get(prog) | 125 | recipe = NATIVE_RECIPES.get(prog) |
