[oe] Really package based staging

Esben Haabendal eha at doredevelopment.dk
Mon Dec 13 09:08:11 UTC 2010


Hi

As part of some work we have been doing here at DoréDevelopment since
spring 2010, I would like to share with the OpenEmbedded community my
idea on how build dependencies could/should be handled.

I hope that some will take the time to consider the underlying
concepts and think of where it might be lead to.

The basic idea is:

For each recipe being build (ie. each ${WORKDIR}), a complete stage
directory is being setup completely from scratch, built entirely from
"normal" packages.  A typical stage directory will thus contain a mix
of native packages, cross packages and machine/target packages (the
sysroot part of this staging), unpacked to a defined directory layout.

For recipe developers, this means that ${DEPENDS} must be specified in
the form of the packages needed, and not the recipes needed.  You
cannot depend on a recipe, only the packages it provides.  This is
obviously fundamentally different to how ${DEPENDS} is specified in
existing OpenEmbedded recipes.

This way we don't have to have a lot of special handling of staging
and build dependencies.  It is mostly "business as usual" as we know
it when building fx. a target filesystem. KISS.

With this per-recipe staging, there are no more race conditions
related to shared staging/sysroot.

There is no need to care about packaging for both build and run-time
usage, reducing both the amount of code needed to handle this, and the
diskspace consumed in tmp/.

The concept is fully working, with code available at
http://www.gitorious.org/oe-lite

A lot of existing OpenEmbedded features are not supported by OE-lite,
as the focus has been exclusively on building "deeply-embedded" Linux
system images for industrial use.  But the concept above is not the
root to any of these omissions.

Also, if you dig into the OE-lite code, you will find other
differentiators in OE-lite, but they are not directly related to the
subject of this mail.

I am fully aware that it will require significant effort to extend
this concept to OpenEmbedded as a whole, but I strongly believe that
it would be worth the effort in the long run.  Also, I don't see a way
to do this in "microsteps", as it will require a specific point in
time where the metadata should be changed over to this new way of
defining build dependencies. Alternatively, something like OE-lite
that is significantly smaller in scope than OpenEmbedded will at least
be here.

So what do you think?

Best regards,
Esben Haabendal





More information about the Openembedded-devel mailing list