On 08.05.2023 17:56, Joe Salmeri wrote: ...
It is quite possible to
- install grub in separate directory (subvolume) - make grub to query for current default subvolume and load its configuration from there
grub.cfg in each default subvolume would use full paths that would point to this subvolume, so each grub.cfg would always remain valid and would also work from within other distributions with os-prober. Default subvolume here would be used just as an indication of "current root". Solaris (which implemented this long ago) is using a separate zfs property to indicate currently active root (or boot environment), but this is implementation detail.
This is (almost) exactly what happens if Secure Boot is enabled, except for paths relative to the default subvolume.
This would require just implementing a command to query the default subvolume which is certainly upstreamable. For completeness one could also allow setting location of /boot/grub/grub.cfg explicitly which would go into load.cfg making grub-install "just work". The main problem of this is the fact that /boot as a grub location is really imprinted deep in the subconscious. Ironically, in the past grub-install *did* support --grub-directory which was then deprecated in favour of always using /boot.
Is there a reason the TW grub patches could not just be submitted upstream?
No idea. I hope nobody is going to do it and if someone does upstream will reject them. It is absolutely wrong way to implement this functionality.
Since it is a configurable option, it should not break anything and other distros "could" just leave it disabled.
Yes. And it means we have two different grub binaries which behave differently and use incompatible config file. Which is the last thing we want. grub-mkconfig tries everything possible to generate configuration file that is compatible with current and past grub versions. The only way we can achieve it with these patches is to generate two set of paths depending on whether this option is enabled. Which makes absolutely no sense. I already told you how to implement this functionality with zero changes to upstream grub. Even command to get default subvolume is not needed, because the currently active root could be simply stored in grub "jump config".
In summary, what I am trying to understand is how TW is using whatever btrfs snapshot is set to the default during the boot process without hard coding the snapshot into all the grub configuration files.
grub is using default subvolume so changing default subvolume automatically changes grub configuration.
On TW because of the grub patches, but I'm trying to get full snapper functionality working across distros. Unless I've missed something, based on your responses ( which have been MOST HELPEFUL) It seems that the missing piece is the grub patch which I am hoping could be submitted upstream ?