From 66d084e7f7cba7a38e43de5204f439dd4ed4255b Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 12 Jan 2025 13:45:00 +0000 Subject: [PATCH] grub.cfg: scan luks *inside lvm* the user might have boot their kernel inside luks inside lvm for some dumb reason it's theoretically possible that the user would be so silly indeed Signed-off-by: Leah Rowe --- config/grub/default/config/payload | 14 ++++++++++++++ config/grub/nvme/config/payload | 14 ++++++++++++++ config/grub/xhci/config/payload | 14 ++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/config/grub/default/config/payload b/config/grub/default/config/payload index 91afcc7b..3f134f1d 100644 --- a/config/grub/default/config/payload +++ b/config/grub/default/config/payload @@ -178,15 +178,29 @@ menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o search_bootcfg crypto + lvmvol="" + # after cryptomount, lvm volumes might be available # using * is slow on some machines, but we use it here, # just once. in so doing, we find every lvm volume for vol in (*); do if regexp ^lvm/ $vol; then + lvmvol="${lvmvol} ${vol}" try_bootcfg "${vol}" fi done + # user might have put luks inside lvm + set pager=0 + echo "Attempting to unlock encrypted LVMs" + for vol in ${lvmvol}; do + cryptomount "$vol" + done + set pager=1 + echo + + search_bootcfg crypto + true # Prevent pager requiring to accept each line instead of whole screen } diff --git a/config/grub/nvme/config/payload b/config/grub/nvme/config/payload index 68e6b52a..22dd8fe1 100644 --- a/config/grub/nvme/config/payload +++ b/config/grub/nvme/config/payload @@ -190,15 +190,29 @@ menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o search_bootcfg crypto + lvmvol="" + # after cryptomount, lvm volumes might be available # using * is slow on some machines, but we use it here, # just once. in so doing, we find every lvm volume for vol in (*); do if regexp ^lvm/ $vol; then + lvmvol="${lvmvol} ${vol}" try_bootcfg "${vol}" fi done + # user might have put luks inside lvm + set pager=0 + echo "Attempting to unlock encrypted LVMs" + for vol in ${lvmvol}; do + cryptomount "$vol" + done + set pager=1 + echo + + search_bootcfg crypto + true # Prevent pager requiring to accept each line instead of whole screen } diff --git a/config/grub/xhci/config/payload b/config/grub/xhci/config/payload index ebfd1fea..d1f81fd3 100644 --- a/config/grub/xhci/config/payload +++ b/config/grub/xhci/config/payload @@ -191,15 +191,29 @@ menuentry 'Load Operating System (incl. fully encrypted disks) [o]' --hotkey='o search_bootcfg crypto + lvmvol="" + # after cryptomount, lvm volumes might be available # using * is slow on some machines, but we use it here, # just once. in so doing, we find every lvm volume for vol in (*); do if regexp ^lvm/ $vol; then + lvmvol="${lvmvol} ${vol}" try_bootcfg "${vol}" fi done + # user might have put luks inside lvm + set pager=0 + echo "Attempting to unlock encrypted LVMs" + for vol in ${lvmvol}; do + cryptomount "$vol" + done + set pager=1 + echo + + search_bootcfg crypto + true # Prevent pager requiring to accept each line instead of whole screen }