In case filenames have spaces, execution of the function
sstater_install will hang, so the print parameter %s must be
enclosed with quotes.
(From OE-Core rev: 545d7aa26dfefdc927e0f4e2cc37398ef2c63fa6)
Signed-off-by: Leonardo Sandoval <leonardo.sandoval@freescale.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
When checking the dependencies in setscene_depvalid(), make sure we also
consider those dependencies needed when running the postinstalls on
host.
[YOCTO #3918]
(From OE-Core rev: 8de0616825ed1b238b3486077af6897834bcb62d)
Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This directory is cleaned upon completion however if a previous build
crashes, it can lead to corrpution, hence ensure its clean at the start
too.
(From OE-Core rev: 8ef0e59d5a7da3671d1ad9a54fe068ed78f928d5)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Add a function which copys a tree as a set of hardlinks to the original
files, then use this in sstate to reduce some of the overhead of sstate
package creation since the file isn't actually copied.
(From OE-Core rev: 8e373e69acac853213a62afb8bbdf0adc0c5045a)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The same log message gets output multiple times in the log which look
confusing and is rather pointless. Move the log message to the correct
level.
(From OE-Core rev: 3917409004a830e7ad0646f05ad7421385cbd1de)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
useradd.bbclass adds sstate dependencies on base-passwd, shadow-native and
shadow-sysroot. Due to the way these are injected, they interact badly with
the other dependency validation logic and end up pulling in dependencies we
don't actually need. This patch adds code to optimise those cases out.
(From OE-Core rev: 784ca68fcca4ffb34390d55d9343570cfdf0305f)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Currently, do_rootfs has a dependency on all the do_package output being present
due to its usage of the pkgdata directories. This means that if you run:
bitbake xxxx-image -c rootfs
you end up having to fetch and unpack all the do_package data which is usually
large and inefficient. It also means rm_work has to leave all the do_package
data lying around so rootfs works.
This patch splits the actual creation of the pkgdata directory off into a separate
task, "packagedata" which happens immediately after do_package. We can then remap
the dependencies so this task is depended upon, not do_package. Sstate can then be
programmed not to require do_package at the appropriate times.
Whilst this patch doesn't do so, it opens the possibility of rm_work wiping
out the do_package output from WORKDIR as long as it also removed the do_package
stamp (both normal and setscene variants) and allowing more space savings
with rm_work which has been regularly requested.
(From OE-Core rev: 6107ee294afde395e39d084c33e8e94013c625a9)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Specify dirs in which the shell function "sstate_create_package" and
"sstate_unpack_package" are executed and don't use ${B} as default dirs
to avoid possible race with task do_rootfs at deb image creation time.
[YOCTO #3674]
(From OE-Core rev: ccef1cf783669a4683eda9d4b44dbe6bcf426259)
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
If you change a machine to a different package architecture, you will see sstate
errors about overwriting files as the code stands today. Instead it should clean
out the files safely and correctly. This patch changes the naming of stamp-extra-info
manifest files to avoid this problem. It will potentially trigger warnings during
builds in existing TMPDIRs until the system adjusts to the new naming, these are
harmless.
[YOCTO #3521]
(From OE-Core rev: 2cc8ee57f8148844bb7bcd4aaf34f6891cf3d410)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The code was written before SSTATETASKNAMES existed. Since it
does exist, lets simply the code.
(From OE-Core rev: 9817e2efdb94395655d711f5eadedcd249c8cffe)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This would be useful for doing siginfo compares to understand why a build
is not reusing something when using SSTATE_MIRROR. No error will be reported
if it fails to find the .siginfo file
[YOCTO #2898]
[RP: Small tweaks]
(From OE-Core rev: 6d86690330f0d43839b904fced4b4b02cb27b8c6)
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
* without this patch:
Python 2.7.3
>>> sstate_search_cmd = "grep -rl /OE/jansa-test/shr-core/tmp-eglibc/pkgdata/armv7a-vfp-neon-oe-linux-gnueabi/runtime-reverse/vim-common /OE/jansa-test/shr-core/tmp-eglibc/sstate-control --exclude=master.list | sed -e 's:^.*/::' -e 's:\.populate-sysroot::'"
>>> cmd_array = sstate_search_cmd.split(' ')
>>> search_output = subprocess.Popen(cmd_array, stdout=subprocess.PIPE).communicate()[0]
grep: |: No such file or directory
grep: sed: No such file or directory
* Adding shell=True and using cmd string instead of array makes it work:
>>> search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0]
>>> print search_output
manifest-armv7a-vfp-neon-gvim.package
manifest-armv7a-vfp-neon-vim-tiny.package
manifest-armv7a-vfp-neon-vim.package
But still isn't 100% reliable, I guess it's caused by some other package
being removed from sstate while grep is already running.
So sometimes grep can show error on STDERR
>>> search_output = subprocess.Popen(sstate_search_cmd, shell=True, stdout=subprocess.PIPE).communicate()[0]
grep: /OE/jansa-test/shr-core/tmp-eglibc/sstate-control/manifest-armv7a-vfp-neon-systemtap.package: No such file or directory
(From OE-Core rev: d84f7d7a12b4271f7b2bfde9fb356d750abff15d)
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The value of subprocess.Popen().communicate()[0] is a string.
Checking for '!= None' will always match causing bogus warnings
regarding already staged files.
(From OE-Core rev: acdd76482efc3caf80e9e0b7359be7ca724ae09a)
Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Currently there is some odd behaviour of the packagegroup class in relation
to sstate since it sets PACKAGE_ARCH = "all" but does not use the allarch class
leading to it being undetected by sstate.
Previously it was not possible to use allarch as the recipe couldn't "undo"
settings made by the allarch class. Since this no longer happens when
PACKAGE_ARCH != all, we can use the allarch class.
This patch also fixes up one case we need to preserve TRANSLATED_TARGET_ARCH
and ensures sstate only assumes allarch when PACKAGE_ARCH is "all".
(From OE-Core rev: 591fa7c1ab9e9ff75fdce602c77ecdeda3a255d9)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Clean up and clarify the populate_sysroot task dependencies. Target sysroot
packages do need their dependencies installed, as do some target/cross
relationships. We can whitelist the *-initial dependencies as these are
never needed indirectly.
(From OE-Core rev: eeec307917234d97be2674beeadef71599fb1487)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
For example gcc-cross depends on linux-libc-headers and needs it to be present
to build/work correctly.
(From OE-Core rev: 43ce7a1d86bf82d976ad241057a4207b1a340b3b)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This is a first attempt at logic to determine when a sstate dependency needs
to be installed and when it does not. Its a start at the logic and errs on the
side of caution, as it gets wider testing, we can refine the logic as needed.
This code should allow a significant performance speedup to certain workflows, for
example "bitbake xxx-image -c rootfs" will not populate the target sysroot.
(From OE-Core rev: b43faba37816817edc5240a139361d16e07c6131)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The recent preveeding sstate directory layout fixes made the code do what it
was originally intended to do, as can be clearly seen from the code.
Unfortunately this changed the contents and layout of the sstate files
themselves since the bug was leading to a directory prefix being missing.
This is now resulting in chaotic messages on the console since things
are getting confused with the two different layouts. The simplest way to
resolve this is to bump the version number, hence moving the new layout
into its own new namespace.
Its worth noting that whilst the failure messages are scary, the failure
mode is relatively harmless since it will just fall back to building the
data rather than installing from sstate.
Usually I'd give more notice of a change like this but under the
circumstances, I'm just going to push this in to resolve the failures
people are seeing. Initially I thought the problem was limited to
some of the -cross packages and therefore of low impact but that is
clearly not the case.
(From OE-Core rev: b53ea6687b6201c8c5ab5cb0d2a845ef7e7b2abe)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Fix missing parameter to endswith and pass paths through normpath to remove
any duplicate "/" characters which would corrupt other calls like basename.
(From OE-Core rev: 172a74c540378149eec493c37c030e9f42f9603d)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The manifest file can become corrupted if sstate-inputdirs and sstate-outputdirs
don't have matching endings. This patch ensures that even if set incorrectly,
the code functions as intended, thereby handling manifest corruption safely.
(From OE-Core rev: 0109a3623a19f9ae289952a4f054e53c3eca4eaa)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Present the manifest file that contains the matches for
files being installed to a location that already contains
that file. This will help to determine which is the correct
recipe to fix when this occurs.
[YOCTO #3191]
(From OE-Core rev: 56268f6e4ed1fc11143173bb1717a8be78c728a5)
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Now do_package isn't machine specific, we're only left with do_populate_sysroot as a
machine specific task. This change marks only the machine specific manifests as machine
specific, defaulting to PACKAGE_ARCH for everything else.
This means we do less work where there are multiple machines using the same
core package architecture and we can start to clean up the sstate duplicate files
whitelist.
(From OE-Core rev: febeaf3d1b8917b660c7279b008d8b03337568e9)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
We've noticed failures on the project autobuilders where a shared sstate
directory is used across multiple builders and the clocks become skewed.
Most of the time this causes harmless building but if this happens where
an environment is changed (make install vs make in qt4-x11-free for example),
the build can fail.
This avoids modification times in the future and should make builds safer
in shared environments sstate was designed for.
(From OE-Core rev: 8f1bdb4f4afd7f5f4c121be8ba82f4675f73e300)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This avoids errors where gcc/binutils get installed to the native sysroot
in the same location for multiple package architectures. Ultimately making
these native recipes with ${PACKAGE_ARCH} appended to PN will resolve this
but hide the warnings until this gets sorted out.
Also hide the python and docbook catalog warnings since they're known about,
nothing to worry about and we'll aim to clean them up properly in the 1.4 cycle.
(From OE-Core rev: 5bae58a5b59c04d8947f4842f19837a914c29b52)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Without this, path components like // could break comparisions with the whitelist leading
to warnings being displayed to the user unintentionally.
(From OE-Core rev: d3c46ca56fab2f07bf16b61514f30765543a8747)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
do_package is a machine specific task at the moment due to packagedata. This means
do_package tasks and their dependencies rerun between different machines
with various duplicate file installations. There are plans to fix this but they're
too invasive before release.
This patch relaxes the whitelist for sstate duplicate file detection to account
for this. Post-release, we re-enable stricter settings once do_package is not
machine specific.
(From OE-Core rev: c858259ce1881c6284f1fc2790c225c81e4a751e)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This was added to allow detection of duplicate files being installed by sstate.
There is a much simpler way, just check if the file already exists. This
effectively uses the kernel VFS as the cache which is much more efficient.
This resolves a significant performance bottleneck (lock contention on a
single file) when running builds that are just being generated from sstate
cache files.
(From OE-Core rev: 603daf343ad3f18c8adb799e3625ae2a18d94f56)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
We need to split this variable before using it. Otherwise a single "/"
character in the list whitelists every overlapping sysroot file which
was not the intention making the whole thing useless.
We'll start seeing warnings about overlapping files now this is working
correctly after this patch.
(From OE-Core rev: 9e31c748327e92b809330f4ad7b6aaecb2edf559)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Appending to EXTRA_SSTATEMAPS is better than just hardcoding a value. Also
add a comment about why this is necessary.
(From OE-Core rev: d4f4a57b8d564d57256017d937ed2eabf94c36ae)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
I've not idea why this got left in but as per the comment, it needs fixing
and we shouldn't have hardcoded mappings like this. Lets remove it
and dynamically generate the data instead.
[YOCTO #3039]
(From OE-Core rev: 2df064ad46c1510fa8a401c22db4ab3278c3c807)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This fixes builds where master.list doesn't already exist. This
change was meant to be part of the previous sstate commit but ended
up separated.
(From OE-Core rev: c2109b765b24a7ffe4781257ad3fe4641a3b2a49)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
We have a potential problem where two sstate packages try and touch the same
file. This adds code which will print a warning whenever this happens.
The implementation does but by maintaining a master file list and comparing
file accesses against this. There are a number of places we have duplicate
accesses which are harmless, mostly in the deploy directory so these
are whitelisted.
For now the code prints warnings, this could be strengthened in future to
become error messages. Whilst working on this code on and off over the past
few months various issues were uncovered, some serious.
[YOCTO #238]
(From OE-Core rev: 1f1b6f93d6b7aa8c9bd9bb5b1826997812e36932)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
It was pointed out we have a number of weird indentations in the python functions.
This patch cleans up 3, 7 and other weird indentations for the core bbclass files.
It also fixes some wierd (odd) shell function indentation which my searches picked up.
(From OE-Core rev: 8385d6d74624000d68814f4e3266d47bc8885942)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This patch adds the lsb name and revision to the path used for sstate files.
This means that reuse of sstate files between different distributions is restricted
by default. The behaviour can be configured using mirror urls, for example:
SSTATE_MIRRORS = "file://Ubuntu-11.10/(.*) file://Ubuntu/\1 \n"
would map Ubuntu 11.10 to a more generic "Ubuntu" named sstate feed.
Usually, more modern distros have increased libc versions for example
so whilst more older native/cross sstate packages will usually work on newer
distros, the opposite is not true. This patch allows development of policy
to better handle this although no default policy is currently being used.
(From OE-Core rev: 9360fc318cec5c873b17f59b817dd6312c81ee27)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Currently all sstate files are placed into one directory. This does not scale and
causes a variety of filesystem issues. This patch adds a two character subdirectory
to the layout (based on the first two characters of the hash) so that files
can be split into several directories.
This should help performance of sstate in most cases.
(From OE-Core rev: 5d45c7b025f6635b2232d7bf92b7c1aba350396b)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
allarch sstate packages could be marked as machine or package_arch specific. This
change ensures they are not.
(From OE-Core rev: f3104240ad5bb542c339ee29b2672523ad3ae50c)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
There was a bug showing up where the crosssdk recipes were being installed as machine
specific in the sstate-control directory. This turned out to be due to the architecture
fields used by sstate being set incorrectly. The problem is that the crosssdk inherits
the cross class. It therefore needs to be listed in this if statement block before
the cross check, not after.
This should resolve some package architecture issue of crosssdk sstate files.
(From OE-Core rev: 79fe28e6033273f9632ca7549d1599d3fd1463ef)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Replace os.system with subprocess.call since the older function would
fail (more or less) silently if the executed program cannot be found
More info:
http://docs.python.org/library/subprocess.html#subprocess-replacements
[YOCTO #2454]
(From OE-Core rev: a07d03cc6f67c88feb9813ae7deb6e4a93552dfe)
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Jason Wessel noticed that a package without any fixmepath entries would
generate a sed warning about no input files. This patch resolves that
by ensuring that an empty fixmepath file never gets written into the
sstate archive. Also we avoid a second message by only doing xargs if
we got input.
(From OE-Core rev: 326563d5a897ae2dba7cfd8d73579d3d979d72c8)
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
In order to make sharing sstate files easier chmod them with 0664 permissions so that they are readable and writable by the user and any other members of their group.
(From OE-Core rev: dae9ad8a0ba0343e3083694cdcb20f0d02927ad0)
Signed-off-by: Joshua Lock <josh@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
The fixmepath file that is generated contains a list of all of the files
that need their paths fixed. In the previous version the fixmepath was
generated to include all of the files that sed may have changed. In the
new version, we first grep the files to see if they contain a path that
needs to be changed, only then do we perform the sed operation on those files.
This results in a modest performance increate in the creation of the sstate
file. The following numbers include the do_package and do_populate_sysroot
tasks on the perl recipe.
Before the change:
real 4m23.018s
user 1m57.067s
sys 1m33.327s
After the change:
real 4m13.083s
user 1m54.062s
sys 1m26.064s
However, a more significnt performance gain is felt during the
extraction/install of sstate cache files, as the fixmepaths file now has a
significantly smaller list of files to modify.
Before the change:
real 0m39.798s
user 0m11.158s
sys 0m12.642s
After the change:
real 0m25.511s
user 0m8.408s
sys 0m5.077s
(All numbers above were recorded with a cold filesystem cache on a machine
with 12 GB of ram.)
(From OE-Core rev: 46067264bedeff8248a2b2441733420fe6651f84)
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>