On Sat, Jul 2, 2022 at 4:13 AM Richard Purdie <richard.pur...@linuxfoundation.org> wrote: > > I admit I've been putting off this topic for a long time. I actually > wrote up something about it about 5 years ago. I sent it to four people > to get some opinions. The six opinions I got back made me despair. i > have had a while to think about it though. > > The challenge is that everyone has a workflow they like today and they > will tend to dislike anything that looks different. For that reason I > think we need a high level tool which can work with the different > approaches. Once we have that, I suspect we'll see some grow stronger > and some will wither off, which is probably as it should be through > natural evolution. The approach Alex has taken here does head in that > direction but I'm not sure it goes quite far enough to get the fraction > of users we need on board. > > I'm not going to comment directly on Alex's proposal at this point, I'd > like to put some ideas out there and see what people think of them. I > think you'll see that I'm in agreement with the idea/direction but I > have a slightly bigger idea of how to do it, which will both be harder > to implement but also have a better chance of getting more people on > board. > > So, let me go into a proposal of what I think the tool we need looks > like. I propose we create a new tool, lets call it "oe-setup". It is a > standalone project in it's own git repo and it's first command would be > "init" with a command line looking roughly like: > > oe-setup init <project-name> > oe-setup init <project-name> <target-dir> > oe-setup init <project-name> <config-name> <target-dir> > oe-setup init <project-name> <config-url> <target-dir> > oe-setup init <config-url> <target-dir> > > The idea being that the repository has some "pre-canned" idea of > certain project names, e.g. poky, yoe and whatever else we decide to > support "out the box" (criteria tbd). Those project names have a > default pre-canned config, or set of configs (e.g. taking branch/series > names) so I'd want to see these all work:
My proposal would be to try to reuse Linux kconfig. Users know how to run "make oldconfig", "make menuconfig", etc and I believe all key distro / machine configuration along with which meta layers should be enabled, which branch to use, etc can all be captured within a kconfig .config file. The task at hand would then become writing a tool to translate from a .config file to a set of distro, machine, local.conf config files (and an image recipe?) + drive whichever tool will be used to fetch meta layer git repos. The "pre-canned" knowledge of poky, yoe, etc then just becomes a set of alternative defconfig files. Although if we can generate distro configs on the fly from a defconfig file then separate meta layers to hold distro configs starts to become redundant... As a reminder, here's the Buildroot README: https://github.com/buildroot/buildroot/blob/master/README With those first 2 steps a Buildroot user can effectively create their own custom distro and machine config... all from within the user-friendly menuconfig environment. The OE equivalent (Yocto Quick Start) is not only more complex and only tells a user how to build someone else's preset configurations. Creating a custom distro and machine config in OE is beyond the quick start and requires a full knowledge of bitbake syntax etc, etc. > oe-setup init poky . > oe-setup init poky dunfell . > oe-setup init poky ./my-local-config.json . > oe-setup init poky http://someserver/my-remote-config.json . > > We'd also allow something not in the default like of project names to > be used directly with a url, or maybe added with an "add-project" > command. This could work against a user local config file, a bit like > git does with global config and adding remotes to a repo. > > You'll note I haven't made any mention of the tooling these use. The > reason is that we don't actually care. I'd propose we teach the tool > about a few common standards (kas, submodules, repo) in the form of > plugins and then hand off to those tools to do the setup. I'd also > propose we develop a "native" form where they perhaps aren't needed. > the nice thing is we can have several "native" forms if needed so if > one approach isn't working or we need to change it, we can. > > We may also want to consider an optional "sub-config" parameter which > gets passed along to the underlying tool. > > One of my conclusions after thinking about this for a long time is we > have a bootstrap problem. If everyone used git and git worked > everywhere, things would be easier. They don't and it doesn't. My > evidence? The bitbake fetcher. Much of the ugliness the bitbake fetcher > deals with applies to layers as well. Some people need proxy support, > some need mirror tarballs, some need floating revisions, some need > complete lock down and so on. > > We could simplify the problem and just say those users "can manage". If > we do that, we're giving up at the first hurdle on the idea what we can > have a (mostly) universal tool. I'm not sure I'm quite ready to do > that. > > Like most more seasoned developers, I dislike code duplication. We do > have the fetcher code, which knows something about these issues and it > even has a test suite with decent coverage. Most users already know how > to configure it too. > > Whilst I don't like it particularly, I'd propose we include a chunk of > bitbake inside oe-setup (maybe just lib/bb?). How needs discussion. I > nearly wrote combo-layer here but people might think I'm serious :). > More seriously, git subtree might be a potential option. We could then > have bitbake master, or a chunk of it, available to the tool. This > would then allow us to potentially get out of a variety of different > firewall/mirror situations, if the appropriate backends were right. > This gives us the option for fix bugs in the fetcher and update oe- > setup and still use specific versions of bitbake for the different > releases as needed. > > I'd propose oe-setup be a different kind of project to bitbake, > hopefully something we could make available via pip for example, again > to try and help the bootstrap issue for people behind firewalls etc. > although I would want it usable standalone too. It would be designed to > be a separate standalone tool installed somewhere once by a user rather > than associated with a particular build/metadata set like bitbake is. > > Beyond init, the question is probably updating. There are probably two > options, one is an update command to oe-setup and the other is > deferring to the underlying tool and it should be possible to use > either depending on the underlying tool and the circumstances. > > As for configuration of the build, I've wondered if we add a new level > of config file, basically dedicating a config file "slot" to the setup > tooling where config from the setup tool would land (i.e. like > auto.conf but dedicated to this). I need to think about this piece a > bit more. > > The other side of this would be the generation of the config(s). I'm > less worried about this piece, it would be done by the people who can > deal with more complexity and I'm sure we could figure it out. I used > "json" in the config urls above but I'm aware that yaml is going to be > a discussion there too. From the oe-setup perspective, it may support > multiple options since once it knows the tool to pass it off to, it > doesn't really need to know more. > > I'm sure there is more I could write on this topic but I'll stop there > and see what people think. > > Cheers, > > Richard > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#167633): https://lists.openembedded.org/g/openembedded-core/message/167633 Mute This Topic: https://lists.openembedded.org/mt/92117681/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-