[OE-core] erratic failure of pseudo

James Limbouris james at digitalmatter.com.au
Wed Aug 3 03:57:55 UTC 2011


On Tue Aug 2 16:40:09, Mark Hatle wrote:
>On 8/2/11 5:11 AM, Richard Purdie wrote:
>> On Tue, 2011-08-02 at 07:28 +0000, James Limbouris wrote:
>>> Hi,
>>>
>>> I've just switched to oe-core from -dev, and I'm finding that my root
>>> images are showing incorrect permissions on files, randomly. From one
>>> build to the next, different subsets of files and folders end up owned
>>> by 1000:1000, instead of root:root. They aren't strictly grouped by
>>> package - just random files, different every time.
>>>
>>> Has anyone else noticed this behaviour? Does anyone have any advice on
>>> how to go about debugging? It might help to look at the pseudo db, and
>>> see if the permissions are in there - can anyone tell me where it is?
>>> I find an empty pseudo folder in the work folder after do_rm_work, but
>>> it is not there if I do a bitbake -c build image-xxx.
>>>  
>> 
>> I'd work backwards with this. Check the owners of the files in the
>> packages, then that either points at the packages themselves or the
>> rootfs step. I'd also disable rm_work whilst debugging this since it
>> deletes a lot of the info you might want to use to debug it...
>> 
>> There is the PSEUDO_DEBUG=x environmental variable which can help with
>> pseudo debugging too...
> 
> First, are you using the oe-init-build-env script to setup your environment?  If
> not, are you using the scripts/bitbake wrapper when calling bitbake?  If you do
> not use the wrapper, pseudo is not active and you will get the build uid/gid
> embedded in the packages (or you will get failures.)  Assuming you are using the
> wrapper...
> 
> Each package has it's own pseudo database.  The final image does as well.  As
> Richard said, start with which file or directories appear to be incorrect.  Back
> up to the package itself and see if they are incorrect in the package.  If they
> are then focus on the work directory of the package.
> 
> PSEUDO_DEBUG is simply a number starting with '1'.  The larger the number the
> more verbose the debug output will be.
> 
> Inside of the work directory, i.e.
> buld/tmp-eglibc/work/i586-oe-linux/zlib-1.2.5-r0, will be a pseudo directory.
> There is a "pseudo.log" file here.  Inside of the files any un-owned directories
> that pseudo becomes aware of will be listed.  It's pretty typical for there to
> be one or two directories listed here, normally this is not a problem.  If the
> directories you are having issues with are listed that could be the cause...
> (If so please let us know by sending a bug report with the package and
> directories that are having the issues..)
> 
> The files.db is the database of all of the files.  This is an sqlite3 database.
> 
> The contents of the primary table (file) is:
> 
> files ( id INTEGER PRIMARY KEY, path VARCHAR, dev INTEGER, ino INTEGER, uid
> INTEGER, gid INTEGER, mode INTEGER, rdev INTEGER , deleting INTEGER)
> 
> Use sql commands to find the path you are concerned with and see if it's in the
> list.  Note, not all paths are listed.  Some filesystem operations only work
> based on inode..  In that case the entry is "NAMELESS FILE" [for the path], and
> the inode is filed in.
> 
> Finally, what filesystem are you using?  There are a few filesystems like
> clearcase that do not have consistent inodes.  Pseudo uses inodes to verify that
> the file is the same and has not moved from one instance to the next.  (If the
> inode isn't set it falls back to filename only.)
> 
> --Mark
> 
>> Cheers,
>> 
>> Richard
>> 
>> 
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core at lists.openembedded.org
>> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Hi,

Thanks for the detailed hints. I've tracked the problem down to PSEUDO_LOCALSTATEDIR being set incorrectly.

If I do a 'bitbake -e xxx-image > env.txt' I get a nice long file, with PSEUDO_LOCALSTATEDIR etc all set correctly from openembedded-core/meta/conf/bitbake.conf. However, when I look at run.do_rootfs, there are no pseudo related environment variables. Printing the env from within the script shows that PSEUDO_LOCALSTATEDIR is set to tmp-eglibc/sysroots/i686-linux/var/pseudo/ - so all of my packages have been using the same pseudo db. When a package is rebuilt, lots of inode mismatches etc occur, and some of the files come out corrupt.

When building, I use:

export SCRIPTS_BASE_VERSION=2
export BBFETCH2=True
export BUILDDIR="$PWD/build"
export PATH="$PWD/sources/openembedded-core/scripts:$PWD/sources/bitbake/bin:$PATH"
export BB_ENV_EXTRAWHITE="TCLIBC TCMODE GIT_PROXY_COMMAND http_proxy ftp_proxy https_proxy all_proxy ALL_PROXY no_proxy SSH_AGENT_PID SSH_AUTH_SOCK BB_SRCREV_POLICY SDKMACHINE BB_NUMBER_THREADS"
export BBPATH="$PWD:$PWD/sources/openembedded-core/meta"

as a preliminary, and then bitbake (which does call the wrapper.)

I'm stuck now - I can't work out how the environment from bitbake.conf usually reaches the run.do_* scripts.
  
Regards
 James Limbouris





More information about the Openembedded-core mailing list