Hi,

For a while I've been talking about how the rumpbake-rumprun axis is not quite right. I think it's now clear, at least to me, that the problem stems from the launch tool being modelled after Docker. It was a smart decision at the time, but the problem we've discovered since is that it was made with too little case data (Xen xl toolchain only). You start from somewhere reasonable-looking, you learn, and now we've learned that we have too many targets completely unlike Docker. I'd even go so far as to state that "Docker-like" is the special case. What goes wrong is that the "rumprun" tool assumes it can both create a configuration and launch the guest. The former is always true (though embedding the config into something launchable is sometimes awkward), the latter is not.

So let's try to figure out how to fix the situation. So what do we actually want?

1: a distributable format which does not require the toolchain to launch (what rumpbake currently gives you) 2: a mechanism to configure the runtime behaviour of the distributable format (what the rumprun tool currently does) 3: a mechanism to easily launch the result of 1+2 *where available* (what the rumprun tool does for xen+kvm+qemu) 4: a mechanism to "specialize" the distributed format, e.g. "baked in root files" or even including "2" (to enable running without block storage)

So then to the adjustment proposals.

I don't think there's any reason to touch "1". We need some further adjustments for component management a la rumpbake.conf, but that's mostly orthogonal.

Ok, that was easy, let's move to "2", config creation. There are actually 2 different configs, the Rumprun runtime config and the config of whatever you launch on. We can't always control the latter from software, consider e.g. the case where you're launching on an embedded system, so this bit is only about the Rumprun config. We now use a json config. I'm thinking that the best option is to not provide a config generating tool at all, simply polish the json format spec and be happy with it.

Then, "3" or launching. Now, there needs to be a congruence between your config from "2" is and what you launch on. The current rumprun tool sort of attempts to help you there, but with anything except a trivial setup you need to know what you're doing anyway, e.g. "-I ,,'-net tap,ifname=tap0" constructs and so forth. So the tool is not *really* catching you because it cannot read your mind. Do we need a quasi-abstracting tool? I'm going to say "no". The real eye-opener here for me was working on EC2. We simply have no way to sensibly abstract the 3 billion toggles available via EC2. Even for trivial systems like xl.conf (when compared to EC2), if you know xl.conf you'll just have to learn a second syntax to do what you already know. If you don't know xl.conf, we can provide an example or two. Not sure if we should provide some case-specific helper scripts, though nothing which pretends that everything is the same, hides power and throws off people who'd know how to use the relevant backend tools.

After some thinking, the solution to "4" is obvious. They are simply components. Want a non-default /etc? Use a different component (see now why rumpbake.conf needs more flexibility/power?). Want to include the config too? Again, a component. (We probably need some tools to generate the components, but that's an entirely different discussion)

Thoughts? Take your time, this is not a rush job, but let's say would be nice to have the rototill done by or latest in October.

Reply via email to