[ Dropping the CC to Chad here ]

On Sat, Aug 01, 2020 at 02:36:25PM +0100, Colin Watson wrote:
>On Sat, Aug 01, 2020 at 01:52:41PM +0100, Steve McIntyre wrote:
>>  * Do we need to scan? if grub is installed and doing an upgrade and
>>    there is only one disk of an appropriate type (BIOS with DOS, or
>>    UEFI with GPT), then always install there?
>
>Possibly.  I'd still be inclined to have a scan as a guard-rail in that
>case, since we'd need to have the code anyway, and the point is to try
>to discover the disk that the system booted from so by definition it
>must have GRUB there if it's to be valid.

Nod. Of course, it's a guess at best - we have ~no way to know *for
sure* which disk we actually booted off. It would be lovely if we did,
but there's no protocol for grub to pass on that information that I
can see.

>>  * (Maybe) we could add an option for grub-pc to always grub-install
>>    to *all* the BIOS-visible disks? Yes, I know there's a potential
>>    for breakage there with multi-boot systems. Maybe only do this on
>>    systems where os-prober has not found anything but the Debian
>>    installation?
>
>One concern I have is filtering out things like optical drives, which
>are BIOS-visible but not sensible grub-install targets.  I'm also
>slightly reluctant to add more invocations of os-prober while it's as
>slow as it can sometimes be.  I do see the utility of this though.

Nod. Can we not rely on os-prober already having been run once and use
that data? (Sorry, not sure of the ordering here.)

>>  * If we do add the code to scan boot sectors, maybe check all the
>>    BIOS-visible disks and flag any that look like they have GRUB, but
>>    are not our version? (Not sure how feasible this is without
>>    digging!)
>
>Unfortunately I believe this to be essentially infeasible.  As an
>illustration, this is the scan code which exists in the current postinst
>to support migration from GRUB Legacy, and believe me I didn't resort to
>this horror before trying to find more sensible alternatives:
>
>  # In order to determine whether we accidentally ran grub-install without
>  # upgrade-from-grub-legacy on versions older than 1.98+20100617-1, we need
>  # to be able to scan a disk to determine whether GRUB 2 was installed in its
>  # boot sector.  This is specific to i386-pc (but that's the only platform
>  # where we need it).
>  scan_grub2()
>  {
>    if ! dd if="$1" bs=512 count=1 2>/dev/null | grep -aq GRUB; then
>      # No version of GRUB is installed.
>      return 1
>    fi
>  
>    # The GRUB boot sector always starts with a JMP instruction.
>    initial_jmp="$(dd if="$1" bs=2 count=1 2>/dev/null | od -Ax -tx1 | \
>                   head -n1 | cut -d' ' -f2,3)"
>    [ "$initial_jmp" ] || return 1
>    initial_jmp_opcode="${initial_jmp%% *}"
>    [ "$initial_jmp_opcode" = eb ] || return 1
>    initial_jmp_operand="${initial_jmp#* }"
>    case $initial_jmp_operand in
>      47|4b|4c|63)
>        # I believe this covers all versions of GRUB 2 up to the package
>        # version where we gained a more explicit mechanism.  GRUB Legacy
>        # always had 48 here.
>        return 0
>      ;;
>    esac
>  
>    return 1
>  }
>
>The actual package version does get embedded in the boot loader, but
>only in the "normal" module, not anywhere that could be usefully
>discovered by a scan.  Otherwise the best we could do would basically be
>a big list of signatures, which I'm not enthusiastic about.

Argh, yes. Basically what I expected, I'll be honest. Oh, hmmm -
that's the boot sector. Could we pick up on more from the embedded
binary "stage 1.5" lump? This is getting hairy, maybe, but
could/should be a wider thing to go upstream?

>>  * For UEFI, I'd love to switch to using the monolithic GRUB image
>>    even for non-signed use. It makes a lot of the issues go away if
>>    ~all the modules necessary for boot are always built-in.
>
>I think I agree, though we should take that to a separate bug; I'd like
>to keep this one for the BIOS situation.

Agreed. Just something I thought to mention while it was in my
head. :-)

>>  * Finally, we should also stop using debconf as a registry like we
>>    are. It's annoying the DSA folks (at least). By all means use
>>    debconf to help manage things, but we should be storing the lasting
>>    config in a config file that people can edit. We already store some
>>    of our stuff in /etc/default/grub, let's push more of our config
>>    there?
>
>Agreed in general terms; this has been on my to-do list for a long time.
>Of course we need to consider the migration path carefully.  In terms of
>specifics, I'm not sure I want to extend /etc/default/grub for this,
>though; that has configuration file management issues, and generally I
>don't really want to overload the upstream grub-mkconfig configuration
>file with packaging-specific things for grub-install.  I'd be inclined
>to go for /etc/default/grub-pc instead, or maybe something under
>/etc/grub/.

Sure. The exact setup is something we can work out. But of course (?)
we *should* be dealing with this properly as a user-facing config
file. What's the problem with /etc/default/grub, OOI?

-- 
Steve McIntyre, Cambridge, UK.                                st...@einval.com
"Since phone messaging became popular, the young generation has lost the
 ability to read or write anything that is longer than one hundred and sixty
 characters."  -- Ignatios Souvatzis

Reply via email to