bug-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug #58278] grub-probe does not always detect crypt container; missing


From: Eric P
Subject: [bug #58278] grub-probe does not always detect crypt container; missing background image
Date: Thu, 30 Apr 2020 12:08:22 -0400 (EDT)
User-agent: Mozilla/5.0 (Windows NT 6.1; rv:68.0) Gecko/20100101 Firefox/68.0

URL:
  <https://savannah.gnu.org/bugs/?58278>

                 Summary: grub-probe does not always detect crypt container;
missing background image
                 Project: GNU GRUB
            Submitted by: buggybugs
            Submitted on: Thu 30 Apr 2020 04:08:21 PM UTC
                Category: Installation
                Severity: Major
                Priority: 5 - Normal
              Item Group: None
                  Status: None
                 Privacy: Public
             Assigned to: None
         Originator Name: 
        Originator Email: 
             Open/Closed: Open
                 Release: 
                 Release: 2.02
         Discussion Lock: Any
         Reproducibility: None
         Planned Release: None

    _______________________________________________________

Details:

Hello. I have near-identical Debian Buster setups on two computers, a desktop
and a laptop. What's puzzled me for a long time now is that although both boot
successfully, on my laptop the GRUB boot menu has, as it should, a pretty
themed background (Debian logo), but on the desktop I only get a plain text
screen with no background. I wouldn't know how to change the theme, so I know
I didn't do it. It's been like that since I installed the OSes.

Today I decided to investigate.

The difference is not due to video mode failures: they both appear to be
running in a proper video mode (1920x1080), with the skinny font, as opposed
to falling back to 80-column mode and ASCII VGA font. (When I physically move
the laptop SSD and boot it on the desktop machine, GRUB shows its background
image, as it should. So I know the difference is not hardware compatibility.)

So I read online that maybe this could be due to the file `/etc/default/grub`,
specifically the line `#GRUB_TERMINAL=console`. But the two files are
byte-for-byte identical on the two installations: that particular line is
commented out, as it should be.

So I started poking around looking for differences between the two. On the
laptop I see a file `/boot/grub/.background_cache.png`, which contains the
background in question. On the desktop, that file is not present.

In the file `/boot/grub/grub.cfg`, I see differences in a section that
mentions the background image.

On the laptop (working):


### BEGIN /etc/grub.d/05_debian_theme ###
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1
--hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 
b2b1c8fd-6cd7-4dc1-85fe-86de97b1e801
else
  search --no-floppy --fs-uuid --set=root
b2b1c8fd-6cd7-4dc1-85fe-86de97b1e801
fi
insmod png
if background_image /grub/.background_cache.png; then
  set color_normal=white/black
  set color_highlight=black/white
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###


On the desktop (not working):


### BEGIN /etc/grub.d/05_debian_theme ###
insmod ext2
set root='hd0'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0 --hint-efi=hd0
--hint-baremetal=ahci0  3ced5547-a505-4289-91cf-e876f58a9a91
else
  search --no-floppy --fs-uuid --set=root
3ced5547-a505-4289-91cf-e876f58a9a91
fi
insmod png
if background_image
/usr/share/desktop-base/futureprototype-theme/grub/grub-4x3.png; then
  set color_normal=white/black
  set color_highlight=black/white
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###


The desktop system *seems to refer directly to the file in /usr.* Which I
believe is wrong, because that partition is not accessible to GRUB. It's in a
dmcrypt container.

I investigated the mentioned file `/etc/grub.d/05_debian_theme`, which seems
to generate that portion of the config file, and I see this section:


# Step #5: Check if GRUB can read the background image directly.
# If so, we can remove the cache file (if any). Otherwise the backgound
# image needs to be cached under /boot/grub/.
if is_path_readable_by_grub "${1}"; then
        rm --force "${BACKGROUND_CACHE}.jpeg" \
                "${BACKGROUND_CACHE}.png" "${BACKGROUND_CACHE}.tga"
elif cp "${1}" "${BACKGROUND_CACHE}.${reader}"; then
        set -- "${BACKGROUND_CACHE}.${reader}" "${2}" "${3}"
else
        return 5
fi


I don't understand shell syntax very well, but it sounds logical to me, what
it's doing there. (Except, the background is ten lousy kilobytes: why not
cache it unconditionally?)

I investigated the mentioned function `is_path_readable_by_grub` in
`/usr/share/grub/grub-mkconfig_lib`. This part doesn't appear to be
Debian-specific.


is_path_readable_by_grub ()
{
  path="$1"

  # abort if path doesn't exist
  if test -e "$path" ; then : ;else
        return 1
  fi

  # abort if file is in a filesystem we can't read
  if "${grub_probe}" -t fs "$path" > /dev/null 2>&1 ; then : ; else
        return 1
  fi

  # ... or if we can't figure out the abstraction module, for example if
  # memberlist fails on an LVM volume group.
  if abstractions="`"${grub_probe}" -t abstraction "$path"`" 2> /dev/null ;
then 
          :
  else
        return 1
  fi

  if [ x$GRUB_ENABLE_CRYPTODISK = xy ]; then
          return 0
  fi
  
  for abstraction in $abstractions; do
          if [ "x$abstraction" = xcryptodisk ]; then
          return 1
          fi
  done

  return 0
}


So, seems to me that it does do some kind of check for encryption. Sounds
good. So why is it failing?

I manually ran the mentioned command `grub-probe -t abstraction /usr` on both
systems, as root.

On the working system, the output is:


cryptodisk
luks
gcry_rijndael
gcry_rijndael
gcry_sha256
lvm


Sounds good.

On the non-working system, that command gives an *empty* output. On both
systems, the exit status of the command is 0.

So that is definitely wrong, because they are BOTH encrypted, and grub-probe
is failing to report that.

There is a small configuration difference between the two systems I didn't
mention. Although both have their root partition inside a dmcrypt container,
with /boot separate; on the working laptop, the encrypted partition is inside
an LVM container. Whereas when I set up the desktop, I opted to skip that
additional layer. (The quoted sections of the `grub.cfg` files do mention
something slightly different about partitions, but I don't quite understand
it.)

Anyway, seems to me that the test for "abstractions" is buggy in some way.

If this problem is limited to missing background images, I wouldn't make a
fuss, but that seems to be a general utility function, so maybe other, more
critical things could break due to it.

(By the way, on the desktop, I tried manually copying in the file
`.background_cache.png`, and manually editing `/boot/grub/grub.cfg` to correct
the path to be identical to that on the laptop. However, still no background
image was displayed. I noticed while diffing the files that the font path is
also different: the laptop has the line `font="/grub/unicode.pf2"`, but the
desktop says `font="/usr/share/grub/unicode.pf2"` (again, useless path
inaccessible to the boot loader). This is despite the fact that the font file
is present/cached, at both `/boot/grub/unicode.pf2`, and
`/boot/grub/fonts/unicode.pf2`, on both systems, and does by appearances load.
Correcting both the background path and the font path still did not produce
any background image. Maybe manual changes to `/boot/grub/grub.cfg` do not
take effect. I don't know. I got scared and undid my changes.)

So, I have a bug and a mystery, and also a support request. Sorry. I hope
someone can extract some sense from this.

Thank you.




    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?58278>

_______________________________________________
  Message sent via Savannah
  https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]