Bug 1989150 - rear doesn't include grub2-* tools when having a rogue file in /boot
Summary: rear doesn't include grub2-* tools when having a rogue file in /boot
Keywords:
Status: ASSIGNED
Alias: None
Product: Red Hat Enterprise Linux 8
Classification: Red Hat
Component: rear
Version: 8.4
Hardware: All
OS: Linux
high
high
Target Milestone: rc
: ---
Assignee: Pavel Cahyna
QA Contact: Jakub Haruda
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2021-08-02 14:27 UTC by Renaud Métrich
Modified: 2023-08-16 07:28 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: No Doc Update
Doc Text:
Clone Of:
Environment:
Last Closed:
Type: Bug
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker RHELPLAN-91886 0 None None None 2021-08-02 14:29:04 UTC

Description Renaud Métrich 2021-08-02 14:27:26 UTC
This bug was initially created as a copy of Bug #1989140

I am copying this bug because: 

Also applies.


Description of problem:

When there is a rogue file e.g. /boot/grub2XXX, ReaR doesn't include the grub2-* binaries, making it impossible to recover a system.


Version-Release number of selected component (if applicable):

rear-2.4, maybe Upstream, didn't check

How reproducible:

Always

Steps to Reproduce:
1. Create a rogue file

  # touch /boot/grub2FAIL

2. Create a rescue in debug

  # rear -dD mkrescue

3. Check the rescue content: no /bin/grub2-* files embedded!

  # ll /tmp/rear.BIwW0X1HU7trKny/rootfs/bin/grub2*

Actual results:

ls: cannot access '/tmp/rear.BIwW0X1HU7trKny/rootfs/bin/grub2*': No such file or directory

Expected results:

Files there

Additional info:

In the log, we can see that the script /usr/share/rear/prep/GNU/Linux/300_include_grub_tools.sh is kinda stupid because it checks for /boot/grub* files.

Due to the rogue file, the name being returned is "/boot/grub2 /boot/grub2FAIL" which makes ReaR consider it's not valid and expects "/boot/grub" to exist.

Due to not existing, it doesn't include the binaries:

+ source /usr/share/rear/prep/GNU/Linux/300_include_grub_tools.sh
++ test -d /var/lib/rear/recovery
+++ echo -n /boot/grub2 /boot/grub2FAIL
++ local 'grubdir=/boot/grub2 /boot/grub2FAIL'
++ test -d '/boot/grub2 /boot/grub2FAIL'
++ grubdir=/boot/grub
++ has_binary grub-probe
++ for bin in $@
++ type grub-probe
/usr/share/rear/lib/_input-output-functions.sh: line 331: type: grub-probe: not found
++ return 1
++ has_binary grub2-probe
++ for bin in $@
++ type grub2-probe
++ return 0
++ grub2-probe -t device /boot/grub
++ return 0

--> grub2-probe fails due to checking for /boot/grub which doesn't exist, so rest of the script is not executed.

Comment 1 Pavel Cahyna 2021-09-21 16:54:38 UTC
Thanks for the analysis, I will investigate whether a more reliable check can be implemented.


Note You need to log in before you can comment on or make changes to this bug.