[bitbake-devel] [PATCH 1/1] bitbake: Disable pseudo in runfetchcmd()

Peter Kjellerstedt peter.kjellerstedt at axis.com
Fri Feb 21 10:10:01 UTC 2014


> -----Original Message-----
> From: bitbake-devel-bounces at lists.openembedded.org [mailto:bitbake-
> devel-bounces at lists.openembedded.org] On Behalf Of Mark Hatle
> Sent: den 20 februari 2014 16:43
> To: bitbake-devel at lists.openembedded.org
> Subject: Re: [bitbake-devel] [PATCH 1/1] bitbake: Disable pseudo in
> runfetchcmd()
> 
> On 2/20/14, 8:55 AM, Peter Kjellerstedt wrote:
> > If a fetcher, e.g., git, is run when pseudo is active it will think
> > it is running as root. If it in turn uses ssh (as git does), ssh too
> > will think it is running as root. This will cause it to try to read 
> > root's ssh configuration from /root/.ssh which will fail. If ssh then 
> > needs to ask for credentials it will hang indefinitely as there is 
> > nowhere for it to ask the user for them (and even if there was it 
> > would not access the correct private keys).
> >
> > The solution to the above is to temporarily disable pseudo while
> > executing any fetcher commands. There should be no reason for them 
> > to be executed under pseudo anyway so this should not be a problem.
> >
> > Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt at axis.com>
> > ---
> >   bitbake/lib/bb/fetch2/__init__.py | 3 +++
> >   1 file changed, 3 insertions(+)
> >
> > diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
> > index de95074..1c3ee4f 100644
> > --- a/bitbake/lib/bb/fetch2/__init__.py
> > +++ b/bitbake/lib/bb/fetch2/__init__.py
> > @@ -680,6 +680,9 @@ def runfetchcmd(cmd, d, quiet = False, cleanup = []):
> >           if val:
> >               cmd = 'export ' + var + '=\"%s\"; %s' % (val, cmd)
> >
> > +    # Disable pseudo as it may affect ssh, potentially causing it to hang.
> > +    cmd = 'export PSEUDO_DISABLED=1; ' + cmd
> > +
> 
> This may be a reasonable workaround... but is there any way we can
> identify the offending command and create a reproducer for pseudo?

Not sure what that means, but see below.

> It would be nice to identify what the actual problem is -- as 
> something else in the system may encounter it.

So far the only time we have seen it is in get_machine_branch() in 
kernel-yocto.bbclass which is called from do_patch(). We use our 
own kernel which is retrieved from our Git server. The Git server 
requires that one authenticates using a private key. However, when 
ssh (as run by git ls-remote) is run under pseudo it tries to access 
/root/.ssh which fails. As it can't find any keys it then asks for a 
login password instead (I think, there is no prompt or anything from 
ssh) and hangs indefinitely as there is no way to provide the 
password. And even if there had been a way, it would not have worked 
anyway as no such password exist.

The problem only manifests itself very rarely. Yesterday was my 
third opportunity to debug it in a number of months, each time 
getting a little further. Typically during debugging I have then 
done something that makes bitbake continue past the hanging point 
and after that it was no longer possible to trigger the problem. 
However, yesterday I finally managed to create a test case which 
consistently reproduces the problem. Try adding the following to a 
recipe that retrieves from Git and that has a tag= in the SRC_URI:

fakeroot do_lockup() {
	foo="${@ bb.fetch2.Fetch([], d)}"
}
do_lockup[nostamp] = "1"
addtask do_lockup

The second time I run "bitbake -c lockup <recipe>" it hangs, and 
any time after that that I run it again.

> --Mark
> 
> >       logger.debug(1, "Running %s", cmd)
> >
> >       success = False
> >

//Peter




More information about the bitbake-devel mailing list