From: Ville Ilvonen <ville.ilvonen@unikie.com>
To: "Alyssa Ross" <hi@alyssa.is>,
"José Pekkarinen" <jose.pekkarinen@unikie.com>
Cc: devel@spectrum-os.org
Subject: Re: [PATCH] Add image configuration option
Date: Thu, 15 Sep 2022 16:48:08 +0300 [thread overview]
Message-ID: <302c49ae-fef5-2e36-f573-88b00f5af9cc@unikie.com> (raw)
In-Reply-To: <87zgf0vklc.fsf@alyssa.is>
On 9/15/22 16:22, Alyssa Ross wrote:
> José Pekkarinen <jose.pekkarinen@unikie.com> writes:
>
>> On Thu, Sep 15, 2022 at 2:31 PM Alyssa Ross <hi@alyssa.is> wrote:
>>
>>> [...]
>>> Okay, thanks for the explanation. I think we can group some of these
>>> together:
>>>
>>> • Stuff that's already Nixpkgs configuration options or can be
>>> expressed through an overlay. Whether to cross compile, what
>>> architecture to build for, whether to use a vendor kernel, etc. This
>>> can already be handled through the existing configuration mechanism.
>>>
>>> • VM customisation, including extra VMs, disabling Wayland, etc. In my
>>> mind there are still some open questions around how this should be
>>> implemented exactly, but this is definitely something that needs to
>>> be more configurable.
>>>
>>> • Whether to install extra stuff on the host system. This covers
>>> things like debugging symbols and tools.
>>>
>>> Does that sound right to you? Are there more that you can think of?
>>> I'd like to understand the requirements here better, to help think about
>>> what sort of configuration mechanisms might be required.
>>
>> This is a good summary, currently I can think of a coupel of more,
>> which is a mechanism to provide upstream project configuration artifacts
>> when nix allow to bypass their automated configs, for example, a kernel
>> config when using manual config kernel nix package, a bit more unclear
>> is how to provide upstream configs when nix is not flexible enough.
>
> You mean you'd like to manually provide a Kconfig file, rathen than
> using Nixpkgs' (not very good) structured config mechanism, right?
> That should be possible with an overlay, but maybe some documentation
> with an example would be a good idea?
>
>> A mechanism to generate a full image from the nix generated artifacts
>> putting together kernel, initrd, rootfs and ext partition so that the
>> full image can be flashed in a sdcard of choice and use it. This would
>> require to be configurable so that you can modify the partition table
>> to suit vendor needs.
>
> We've had some discussion about that already on the list and on IRC. My
> current view is that early boot firmware (U-Boot etc.) doesn't really
> have anything to do with Spectrum. They both run at different times,
> and they communicate over a standard interface (EBBR [1]), so the
> specifics of the firmware aren't really in scope for Spectrum itself and
> belong elsewhere. It doesn't make sense for Spectrum to be installing
> U-Boot any more than it makes sense for U-Boot to be installing
> Spectrum, or for Linux to be installing U-Boot — they are two separate
> components. (This isn't an approach unique to Spectrum — Fedora is
> doing something similar.)
>
> It can make sense to make an image that is a combination of U-Boot and
> Spectrum, but that process should be part of an integration between the
> two that exists one layer up, rather than part of either project. For
> example, you could do something like this:
>
> let
> spectrum = import <spectrum/img/live> {
> # config could either be loaded using the standard mechanism
> # or inlined here.
> };
> # It would also be possible to import individual components of
> # Spectrum and assemble them manually if even greater
> # flexibility was required, but I doubt that would be common.
>
> inherit (spectrum) pkgs;
> # I don't think a pkgs attribute currently exists on the
> # spectrum-live.img derivation, but it might make sense to add
> # for this sort of use case.
>
> uboot = pkgs.ubootRockPro64;
> in
>
> pkgs.runCommand "uboot+spectrum.img" {} ''
> # Use sfdisk (or maybe there's some better tool)
> # to create a partition table, and copy the U-boot image
> # and the Spectrum images into place.
> #
> # Spectrum is designed to accomodate this by not expecting
> # any of its partitions to be at any particular location
> # on disk.
> ''
>
> Maybe this is another case where documentation and a worked example
> would help?
Documented example case would help. It's good to scope but in the big
picture it's hard to see early boot firmware would have *nothing* to do
with Spectrum. That's not the case with x86_64 either.
Let me clarify.
On x86 traditionally people can't change early bootloading.
-> Spectrum assumes UEFI OS loading because UEFI is just there and can't
be changed
On arm traditionally people can and will change early bootloading.
-> Spectrum has assumed UEFI but UEFI is just not there. It's must be
put there - typically on device SD card or eMMC image.
On riscv assumption is more like on arm.
So the mechanism is essential, even when not *provided* by Spectrum it
should be acknowledged.
Documenting Spectrum reqs to boot itself with example determines how
easily people can make their devices run Spectrum.
-Ville
>
> [1]: https://arm-software.github.io/ebbr/index.html
>
>> [...]
>>> You're right — it's generally a bad thing if people have to patch
>>> Spectrum to make it fit their needs. I want to avoid that. But most of
>>> the things we've talked about so far don't feel to me like they're going
>>> to lead to massive configuration files. The exception is all the stuff
>>> that's either Nixpkgs configuration or overlays, but the mechanism you
>>> proposed here wouldn't help with that, because only a single
>>> configuration file would be able to change anything in "pkgs", due to
>>> the configuration files being merged using the non-recursive //
>>> operator. That's exactly why it's important to understand what the
>>> needs are before we consider specific configuration mechanisms. It's
>>> difficult to figure out if an idea will actually make things easier
>>> without seeing an example of the problem, and what difference to it the
>>> proposed solution would make.
>>
>> Well, the exact point of that is to give you a small next step to move
>> towards a more flexible configuration system, without loosing control
>> to revert back if the situation doesn't look better. It is unlikely a more
>> complex contribution would be acceptable for you if even a little one
>> like this wouldn't make it.
>
> Well, it's not the size of the change that's important, but whether it
> can be demonstrated that the change solves a problem. A big change to
> fix a clear problem is fine!
>
> But you've definitely pushed the conversation forward towards a more
> flexible configuration system. In particular, we definitely need to
> think better about custom VMs and especially optional host components,
> and it seems to me that we need good, task-oriented documentation about
> how to accomplish things that are already possible using the existing
> mechanisms.
next prev parent reply other threads:[~2022-09-15 13:48 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-15 7:35 [PATCH] Add image configuration option José Pekkarinen
2022-09-15 8:21 ` Alyssa Ross
2022-09-15 10:42 ` José Pekkarinen
2022-09-15 11:31 ` Alyssa Ross
2022-09-15 12:31 ` José Pekkarinen
2022-09-15 13:22 ` Alyssa Ross
2022-09-15 13:48 ` Ville Ilvonen [this message]
2022-09-15 14:00 ` Alyssa Ross
2022-09-15 14:09 ` Ville Ilvonen
2022-09-15 14:47 ` Integrating Spectrum and platform firmware Alyssa Ross
2022-09-16 5:29 ` Ville Ilvonen
2022-09-16 4:59 ` [PATCH] Add image configuration option José Pekkarinen
2022-09-16 7:25 ` Alyssa Ross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=302c49ae-fef5-2e36-f573-88b00f5af9cc@unikie.com \
--to=ville.ilvonen@unikie.com \
--cc=devel@spectrum-os.org \
--cc=hi@alyssa.is \
--cc=jose.pekkarinen@unikie.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://spectrum-os.org/git/crosvm
https://spectrum-os.org/git/doc
https://spectrum-os.org/git/mktuntap
https://spectrum-os.org/git/nixpkgs
https://spectrum-os.org/git/spectrum
https://spectrum-os.org/git/ucspi-vsock
https://spectrum-os.org/git/www
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).