diff --git a/config/grub/config/grub.cfg b/config/grub/config/grub.cfg index 7935560cb468dca2cc7e1e4434321c53f28720b3..478a6e80b0e542fec179eb7644d57ef144cf5621 100644 --- a/config/grub/config/grub.cfg +++ b/config/grub/config/grub.cfg @@ -68,14 +68,14 @@ function list_pmedia { done done done - echo $tgt_medias + #echo $tgt_medias } set lvmnames="crypt-bootvol crypt-rootvol crypt-boot crypt-root grubcrypt-bootvol grubcrypt-rootvol" # Fills a variable containing possible partition list from a specified and previously detected logic media kind function list_lmedia { - unset tgt_medias + unset tgt_medias for media_item in $media_devlist; do for device_kind in ${1}; do for num in ${lvmnames}; do @@ -85,18 +85,40 @@ function list_lmedia { done done done - echo $tgt_medias + #echo $tgt_medias +} + +# Create menuitems that boot any valid previously detected media +function make_boot_menus { + for i in ${tgt_medias}; do + grub_create_menu ${i} + echo -n "." + done + echo } -mediadetect +# Scan every physical media to make boot menus +function scan_p_media_menus { + for i in ata ahci usb fd; do + echo -n "Scanning ${i}" + list_pmedia ${i} + make_boot_menus + done +} + +# Scan every logical media to make boot menus +function scan_l_media_menus { + for i in lvm md; do + echo -n "Scanning ${i}" + list_lmedia ${i} + make_boot_menus + done +} -menuentry "Media detection test" { -cryptomount -a -p assword -#list_pmedia ata -list_lmedia lvm -for i in ${tgt_medias}; do - grub_create_menu ${i} -done +menuentry "List all bootable medias" { + mediadetect + scan_p_media_menus + scan_l_media_menus } # FIXME Make an automatic override for BTRFS directories instead of copypasting with a "@/" in front of every element @@ -106,24 +128,29 @@ set grub_dirs="boot grub grub2 boot/grub boot/grub2 @/boot @/grub @/grub2 @/boot # Default list of GRUB possible config files prefixes set grub_conf_names="'' osboot_ autoboot_ libreboot_ coreboot_" +# Creates a menuentry for GRUB. First argument is menu text without spaces then root and configfile +function grub_menuentry { + menuentry ${1} ${2} ${3} { + set root="${2}" + unset superusers + configfile ${3} + } +} + function grub_create_menu { - echo "[GRUB] Looking on ${1}" set root="${1}" - # The @/... entries are for cases where the BTRFS filesystem is being used + if [ ! -d / ]; then # Root is invalid: maybe unknown FS or encrypted one + cryptomount ${1} + return; + fi for dir in ${grub_dirs}; do # In order to save time, we do not attempt anything on non existing directory. - if [ -d / ]; then - if [ -d /"${dir}"/ ]; then - for name in '' ${grub_conf_names}; do - if [ -f /"${dir}"/"${name}"grub.cfg ]; then - menuentry "${1} load GRUB" ${1} /"${dir}"/"${name}"grub.cfg { - set root="${2}" - unset superusers - configfile ${3} - } - fi - done + if [ -d /"${dir}"/ ]; then + for name in '' ${grub_conf_names}; do + if [ -f /"${dir}"/"${name}"grub.cfg ]; then + grub_menuentry ${1}:GRUB ${1} /${dir}/${name}grub.cfg fi + done fi done }