#3136 PR merged: Include GRUB tools unconditionally and don't create $VAR_DIR/recovery/bootdisk in prep

Labels: bug, cleanup

pcahyna opened issue at 2024-01-25 16:06:

Pull Request Details:
  • Type: Bug Fix

  • Impact: Normal

  • Reference to related issue (URL): see discussion in commit ccae513d8362078c5d4bcffe9b1167835e6449b8

  • How was this pull request tested?

    • touch /boot/grub2FAIL full backup and recovery. Original code fails to recover: "Installing GRUB Legacy boot loader:
      ERROR: Cannot install GRUB Legacy boot loader because there is no 'grub' program." New code works.
    • touch /boot/grub2FAIL && shopt -s nullglob && rear -d mkrescue && find /*/tmp/rear.*/rootfs /tmp/rear.*/rootfs -name grub\*-\* -executable
      original code: nothing
      new code:
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-mkimage
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-mkpasswd-pbkdf2
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-mkrelpath
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-bios-setup
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-install
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-mkconfig
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-probe
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-reboot
/usr/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-set-default
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-mkimage
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-mkpasswd-pbkdf2
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-mkrelpath
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-bios-setup
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-install
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-mkconfig
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-probe
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-reboot
/var/tmp/rear.noYr1PET9AefVbz/rootfs/bin/grub2-set-default
  • Description of the changes in this pull request:
    • Do not detect GRUB before including GRUB tools. When there was a file matching grub* in /boot (e.g. /boot/grub2FAIL), the code got confused by the glob pattern intended to match /boot/grub or /boot/grub2 and subsequently the rest of the script was skipped, as grubdir got assigned something like "/boot/grub2 /boot/grub2FAIL", which does not exist, so grubdir was set to /boot/grub, which does not exist either, and grub-probe fails.
      As a result, the GRUB tools were not included in the recovery image.
      The code have been proceeding anyway when neither grub-probe nor grub2-probe was found, so the tests have not been very useful.
      Fix and simplify by not checking for the existence of GRUB and just trying to include the GRUB tools always.
    • Don't create $VAR_DIR/recovery/bootdisk in prep. This file is unused and creating it in prep stage is against the guideline in prep/README:
You should not put scripts into this 'prep' stage that modify things
in ROOTFS_DIR or in VAR_DIR/recovery and VAR_DIR/layout because
scripts for ROOTFS_DIR belong to the 'rescue' stage and scripts
for VAR_DIR/recovery and VAR_DIR/layout belong to the 'layout' stages.

pcahyna commented at 2024-01-28 17:42:

Note to myself:

the whole check in usr/share/rear/prep/Linux-s390/305_include_s390_tools.sh should now be deleted, it is useless and potentially harmful (any failure during checking /boot will result in all s390 tools omitted from the recovery image, with disastrous results).
Actually this whole file can then be deleted and the PROG+= lines moved to usr/share/rear/conf/Linux-s390x.conf or whatever is appropriate for s390 (this file got deleted in cba3590b27bedb526e5b439cd8d4d01e1ec0169a without explanation).

pcahyna commented at 2024-02-06 17:37:

@schlomo thanks for the review, merging!


[Export of Github issue for rear/rear.]