Patchwork [1/1] runqemu: show bitbake errors to user

login
register
mail settings
Submitter Scott Garman
Date Sept. 14, 2012, 11:15 p.m.
Message ID <674d84a9020d9fc0abfe8a45e6476ef63987d3a6.1347664421.git.scott.a.garman@intel.com>
Download mbox | patch
Permalink /patch/36561/
State New
Headers show

Comments

Scott Garman - Sept. 14, 2012, 11:15 p.m.
In certain edge cases, bitbake may fail to run and cause setup_tmpdir()
within runqemu to fail, and not give the user a helpful error message.
Catch this case and show the user the output of bitbake -e.

This fixes [YOCTO #3112]

Signed-off-by: Scott Garman <scott.a.garman@intel.com>
---
 scripts/runqemu |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
Mark Hatle - Sept. 14, 2012, 11:20 p.m.
On 9/14/12 6:15 PM, Scott Garman wrote:
> In certain edge cases, bitbake may fail to run and cause setup_tmpdir()
> within runqemu to fail, and not give the user a helpful error message.
> Catch this case and show the user the output of bitbake -e.
>
> This fixes [YOCTO #3112]
>
> Signed-off-by: Scott Garman <scott.a.garman@intel.com>
> ---
>   scripts/runqemu |   12 ++++++++++--
>   1 file changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/runqemu b/scripts/runqemu
> index e843946..8bb77ff 100755
> --- a/scripts/runqemu
> +++ b/scripts/runqemu
> @@ -283,8 +283,16 @@ setup_tmpdir() {
>           # We have bitbake in PATH, get OE_TMPDIR from bitbake
>           OE_TMPDIR=`MACHINE=$MACHINE bitbake -e | grep ^TMPDIR=\" | cut -d '=' -f2 | cut -d '"' -f2`
>           if [ -z "$OE_TMPDIR" ]; then
> -            echo "Error: this script needs to be run from your build directory,"
> -            echo "or you need to explicitly set OE_TMPDIR in your environment"
> +            # Check for errors from bitbake that the user needs to know about
> +            BITBAKE_OUTPUT=`bitbake -e`

I'm not sure that is a good idea.  If there is a failure (anything on stderr) it 
will just be dumped to the screen...

If it does succeed, it could attempt to load that variable with many MB of data, 
which also likely isn't what is desired.

It might be better to dump the items to a tmp file (securely created of course) 
  ;)  and then keep processing the same file for error messages, warnings, etc...

> +            if [ -z "$BITBAKE_OUTPUT" ]; then
> +                echo "Error: this script needs to be run from your build directory,"
> +                echo "or you need to explicitly set OE_TMPDIR in your environment"
> +            else
> +                echo "There was an error running bitbake to determine TMPDIR"
> +                echo "Here is the output from 'bitbake -e':"
> +                bitbake -e
> +            fi
>               exit 1
>           fi
>       fi
>
Scott Garman - Sept. 19, 2012, 5:35 a.m.
On 09/14/2012 04:20 PM, Mark Hatle wrote:
> On 9/14/12 6:15 PM, Scott Garman wrote:
>> In certain edge cases, bitbake may fail to run and cause setup_tmpdir()
>> within runqemu to fail, and not give the user a helpful error message.
>> Catch this case and show the user the output of bitbake -e.
>>
>> This fixes [YOCTO #3112]
>>
>> Signed-off-by: Scott Garman <scott.a.garman@intel.com>
>> ---
>>   scripts/runqemu |   12 ++++++++++--
>>   1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/scripts/runqemu b/scripts/runqemu
>> index e843946..8bb77ff 100755
>> --- a/scripts/runqemu
>> +++ b/scripts/runqemu
>> @@ -283,8 +283,16 @@ setup_tmpdir() {
>>           # We have bitbake in PATH, get OE_TMPDIR from bitbake
>>           OE_TMPDIR=`MACHINE=$MACHINE bitbake -e | grep ^TMPDIR=\" |
>> cut -d '=' -f2 | cut -d '"' -f2`
>>           if [ -z "$OE_TMPDIR" ]; then
>> -            echo "Error: this script needs to be run from your build
>> directory,"
>> -            echo "or you need to explicitly set OE_TMPDIR in your
>> environment"
>> +            # Check for errors from bitbake that the user needs to
>> know about
>> +            BITBAKE_OUTPUT=`bitbake -e`
>
> I'm not sure that is a good idea.  If there is a failure (anything on
> stderr) it will just be dumped to the screen...

I'm afraid this is not the case with the error case I was testing this 
against. That case being when there is an LCONF_VERSION mismatch in 
bblayers.conf. Those user instructions are written to STDOUT.

> If it does succeed, it could attempt to load that variable with many MB
> of data, which also likely isn't what is desired.

This is a valid point. I could change it to bitbake -e | wc -l, and 
check the number of lines of output. I'm basically just checking to see 
that this is greater than 0.

> It might be better to dump the items to a tmp file (securely created of
> course)  ;)  and then keep processing the same file for error messages,
> warnings, etc...

This code path should only be run on very unusual edge cases, so I'm not 
inclined to add additional tmpfile handling complexity and have to deal 
with cleaning up the files, etc.

I will re-spin this patch with the wc -l modification.

Scott

Patch

diff --git a/scripts/runqemu b/scripts/runqemu
index e843946..8bb77ff 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -283,8 +283,16 @@  setup_tmpdir() {
         # We have bitbake in PATH, get OE_TMPDIR from bitbake
         OE_TMPDIR=`MACHINE=$MACHINE bitbake -e | grep ^TMPDIR=\" | cut -d '=' -f2 | cut -d '"' -f2`
         if [ -z "$OE_TMPDIR" ]; then
-            echo "Error: this script needs to be run from your build directory,"
-            echo "or you need to explicitly set OE_TMPDIR in your environment"
+            # Check for errors from bitbake that the user needs to know about
+            BITBAKE_OUTPUT=`bitbake -e`
+            if [ -z "$BITBAKE_OUTPUT" ]; then
+                echo "Error: this script needs to be run from your build directory,"
+                echo "or you need to explicitly set OE_TMPDIR in your environment"
+            else
+                echo "There was an error running bitbake to determine TMPDIR"
+                echo "Here is the output from 'bitbake -e':"
+                bitbake -e
+            fi
             exit 1
         fi
     fi