Skip to content

Various feedback #20

@cgwalters

Description

@cgwalters

This project fills a real need. I am not totally proud of the "face" that we present with https://gitlab.com/fedora/bootc/examples.

At the same time though it's intentional: that Dockerfile-oriented examples is to emphasize that familiarity for users exposed to that ecosystem.

Requirements:

  • bootc (the project) will happily accept and boot any OCI images that conform to the basic layout requirements (of which there are not much). Dockerfile is not the only build system to build OCI images.

Strongly held opinions

Execute via RUN first

I think we will get the most value out of supporting declarative code executed inside RUN invocations in Dockerfile instead of trying to generate them. There's a huge amount of value to this approach because it Just Works with the whole ecosystem that can consume Dockerfile (including podman build on e.g. MacOS which has all this support for remotes, multi-arch etc.).

Wrapping podman build or equivalent creates a whole host of questions for how these features get exposed and used, and also opens questions around how versioning for the build instructions (modules, etc.) works.

Avoid inventing new formats unless necessary

The world is full of wrappers, especially for example custom (mostly YAML) wrappers for lists of RPM/deb packages. But we also have blueprint and kickstart and rpm-ostree treefiles and Kiwi XML and comps and...the list goes on and on.

I would prefer to pick up something of the shape of https://gitlab.com/fedora/bootc/osbuild-cfg which is strongly oriented towards consuming one existing format (blueprints) but I think it would make sense to learn kickstart too.

We have customers that are right now porting from Kickstart to Dockerfile, and it would really help the story if they could literally just move bits of kickstart instead of rewriting it.

Actually also another big one in this space is butane.

Drive declarativity as close to the source as possible

Really dnf should learn a declarative format instead of having endless variations created. libpkgmanifest might become that (though that one is designed to interact with lockfiles)

But for example on a different topic of kernel arguments, we handle that directly in bootc in a declarative, drop-in way.

Taking the ssh module as an example...I think it would ultimately make sense to have something more authentication-oriented shipped in the OS own something like this. It's of course really hard to pick what that is.

(Also osbuild-cfg has a different but related version of this ssh key handling)

Moving forward

I totally agree with the goals of fab (and thanks for starting it!), I just hope we can agree on some of these principles and where to go from here.

(On osbuild-cfg, it was just a prototype spike, if someone wants to do something like it but doesn't know Rust and wants to use Python or something, fine by me...)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions