[OE-core] [Openembedded-architecture] [RFC] Handling configuration files

David Vincent freesilicon at gmail.com
Mon Apr 24 08:28:29 UTC 2017


On vendredi 21 avril 2017 15:41:58 CEST Mark Hatle wrote:
> On 4/21/17 5:49 AM, David Vincent wrote:
> > Following this thread on OE-Core
> > (http://lists.openembedded.org/pipermail/openembedded-core/2017-April/1358
> > 12.html), the subject of handling configuration files for a machine just
> > got back. It seems there already was a discussion around it but I
> > couldn't find it. I know that 2.3 has now hit 'feature-freeze' status but
> > I try to gather some ideas for maybe an implementation in 2.4.
> > 
> > Simply put, the problem is this:
> > I want to
> > 
> >   - Override a configuration file in a package
> >   - Make the configuration machine-specific
> >   - Upgrade the configuration during package upgrade without human
> >   interaction> 
> > For now, one way to do this is to append the recipe and to replace the
> > PACKAGE_ARCH with MACHINE_ARCH. The downside of this approach is that
> > a package is created for each machine on package repositories where
> > only the configuration is modified.
> > 
> > Another way is to modify the file in ROOTFS_POSTPROCESS_COMMAND. The
> > downside is that depending on the packager, it would either not
> > survive the package upgrade or not be upgradable.
> 
> Update is potentially an issue..  but not surviving a package upgrade means
> we've got a recipe/package manager bug to deal with.
> 
> If the configuration items are properly specified, then a package upgrade
> should NOT destroy custom configurations... if it does, I consider this a
> bug.
I agree, package managers are smart when it comes to configuration and should 
not boldly override a custom configuration.

The other issue is that there are some cases where the configuration must be 
destroyed at package installation (remember that I want the package upgrade to 
be without human interaction) and that is, AFAIK, impossible with a 
postcommand (could work with a postinstall task though but it requires more 
work on the recipe side especially during package upgrades).
> > The last way would be to use update-alternatives, but IMHO it does
> > feel weird. Another downside would be the need to modify all recipes
> > to mark the configurations as alternatives.
> > 
> > My idea was the following. Maybe we could rely on the CONFFILES
> > variable to create a -conf package (like -dbg/-dev/-staticdev). If
> > possible, this package only should be marked as MACHINE_ARCH. This
> > could happen behind the scenes in package.bbclass. The only problem I
> > see for now is how to identify that the configuration file has been
> > overridden in a machine-specific recipe (SRC_URI or other variable ?).
> > Do you think it is feasible or am I missing something ? I could
> > proceed to implement that kind of behavior but I would like to know
> > beforehand if there are other things I should take into account.
> 
> Unfortunately RPM does not permit generating a single package with multiple
> architectures.
> 
> Also if even a piece of the constructed system is MACHINE specific, then
> usually all of it has to be rebuilt from source -- which would overwrite
> previous versions in the feeds.
Too bad, but this was cherry-on-top. We lived with this restriction until now 
so we could live a little longer with it, right ? Anyway, storage is cheap and 
compile time is a no-blocker ?
> 
> I agree the update-alternatives feels 'strange', because it effectively
> preserves the original and provides the 'custom' at the same time.. but
> functionally it will work fine.
> 
> The other option is to go through the system and construct new 'conf'
> packages (to be used as dependencies for the runtime) for packages that
> typically get configured....
> 
> I'd almost suggest that a hybrid approach to this might be appropriate.
> 
> Use the update-alternatives method for items that are not commonly modified
> in deployment...
Problem is 'How to define commonly modified ?' . Given the number of recipes and 
use-case scenarios, that's pretty impossible to say ?
> then use a "new" conf recipe for each item that is
> typically modified.  (I'm worried this will add additional overhead to
> recipe upgrades and such, so I'm not convinced a conf recipe is actually a
> sustainable idea here.)
I wasn't thinking of creating a conf recipe, just a conf package. That is much 
less work overhead. And to identify recipes that adds configuration elements, I 
thought of creating a CONFOVERRIDE variable that could be used like 
NOAUTOPACKAGEDEBUG (the name is just a suggestion) to mark recipes that 
overrides configuration files. This way, BSP layers could simply provide their 
own configuration and distro layers could still work the same way.
> 
> --Mark
> 
> > Thanks,
> > David
> > _______________________________________________
> > Openembedded-architecture mailing list
> > Openembedded-architecture at lists.openembedded.org
> > http://lists.openembedded.org/mailman/listinfo/openembedded-architecture

--
David



More information about the Openembedded-core mailing list