git: 2c26d77d989a - main - Remove /boot/efi from mtree, missed in 0b7472b3d8d2.
Nathan Whitehorn
nwhitehorn at freebsd.org
Wed Mar 3 17:21:50 UTC 2021
On 3/3/21 11:53 AM, Warner Losh wrote:
>
[clipping non-technical pre-history]
>
> The installer *does* mount the partition in advance, so checking
> whether
> there is a mounted file system is a perfectly reasonable test to
> do. We
> could also check fstab. I would like to understand what is actually
> wrong here first, though. Especially after this misfire -- which is
> problematic for reasons that are still not clear to me, since
> there are
> a number of standard directories in hier(7) not in mtree -- I want to
> make sure we actually do have consensus about what is changing and
> why.
>
>
> At the top level, we default to having directories in mtree unless
> there's a good reason not to. We disagree as to whether the installer
> should take the presence or absence of the directory as a strong
> enough reason to do something. I don't think that's a good reason.
>
> But leaving that aside, let's say we wanted to reuse the install boot
> part of the installer to update boot blocks as part of installworld.
> If we can talk through that example w/o it in mtree, then we can leave
> it out. The last time I worked through this, though, I thought I'd
> talked myself into needing it.
> Looking at bootconfig, we could use machdep.bootmethod to determine if
> we need to update the ESP. If we didn't use that, then the ESP
> shouldn't be touched. This is, at the moment, x86 centric, but could
> trivially be added to architectures (I'm happy to add it). This would
> prevent the 'false positive' that's possible in cases where we've
> installed UEFI then downgraded to BIOS because of some problem (though
> purely in the context of the installer, I guess this isn't an issue).
> Even with your approach, we'd bogusly update an ESP (though one could
> argue you might want that). We could also change the code so that
> 'unsupported' architectures just didn't update. This is why I think
> it's a bit fragile to rely only on the directory being present. It
> should have something mounted there. If you wanted to mkfs_dos + mkdir
> efi at the top level, you could check for that directory if you were
> looking for a flag, though that would still update on a BIOS boot the
> ESP, and prevent false positives if run as part of an update.
I think we would *want* to update an ESP that is mounted but not
currently being used. If I set up a dual BIOS/EFI-boot system for some
reason and happened to install an update while booted from BIOS, I would
be deeply astonished if my configured-by-the-installer EFI bootloader
did not also get updated.
(As an aside, I would also much rather the installer use an update
utility to set up the ESP than have the update utility use the installer.)
So here's a proposal, now that everyone is in the CC list:
- We add /boot/efi back to mtree, even though I find it kind of weird to
have it there I think we're too close to the release to have a
conclusion on this.
- We have the installer check for either the ESP directory being an
active mountpoint or being in the in-progress fstab, whichever is
easiest to implement (they are equivalent for the installer).
If that seems OK, I'll post another review for the change.
> A long-term project I've had has been to try to update the boot blocks
> as part of installworld or maybe as part of installboot. We have
> really poor reuse as a project in this area. Every little
> orchestration thing wrote its own thing, and all of them have done it
> badly. I was hoping to be able to reuse this code, or modify the
> installer to use whatever we come up with there. As part of that, I
> had talked myself into thinking we always needed /boot/efi, but I'm
> having trouble reconstructing why that is now though I know it had to
> do with installed systems and bootstrapping issues... I know I was
> worried about questions about 'why isn't /boot/efi on the system by
> default so I can mount it' for people that have upgraded, but I recall
> there was more to it than that. With it in mtree, an installworld
> (even w/o an ESP update) would create it and people could mount it w/o
> having to mkdir which they might make as $SOMETHING_ELSE. So I guess
> that's a bit of a weak reason to absolutely require it in mtree.
Thanks a lot for the explanation. I'm agreed entirely about the problem
and the difficulty -- hopefully this set of changes helps at least.
As for mtree, I was imagining this as something like /home, which is a
standard part of the system but isn't part of mtree since it depends on
local-system policy. It's also different from /home in that we *do* want
it to be a standard place for updates, of course. I think there's really
not a ton of precedent either way: we don't have any other mount points
in there for file systems that may or may not exist depending on
circumstances, as far as I can tell. My worry with having it in mtree is
that having it exist but potentially be a directory rather than an
actual ESP requires that update tools be a little smarter and errors
will be a little less obvious, since updates that don't pay enough
attention will be a bit more likely to splat files there assuming there
is an ESP even if makes no sense. It's a weak consideration either way,
I think.
-Nathan
>
> Warner
More information about the dev-commits-src-main
mailing list