diff --git a/config/grub/config/grub.cfg b/config/grub/config/grub.cfg index 364a4caf30e53ee769f6218f0d17d3627848f65c..4395c5b6fac2e30782ec6db1c4b49d1fd4cc2fd6 100644 --- a/config/grub/config/grub.cfg +++ b/config/grub/config/grub.cfg @@ -60,100 +60,9 @@ fi # Default enums for non detectable medias. Override as you like, eventually. set partnums="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20" +export partnums set medianums="20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0" - -# Loads into a variable all the medias from * -function mediadetect { - unset media_devlist - set media_devlist=* -} - -# Fills a variable containing possible partition list from a specified and previously detected physical media kind -function list_pmedia { - unset tgt_medias - for media_item in ${media_devlist}; do - for device_kind in ${1}; do - for num in $medianums; do - # If media number is an existent detected media - if [ $media_item == "($device_kind$num)" ]; then - # Add raw media - tgt_medias="${tgt_medias} (${device_kind}${num})" - # Add every possible partition - for part in ${partnums}; do - tgt_medias="${tgt_medias} (${device_kind}${num},${part})" - done - fi - done - done - done - #echo $tgt_medias -} - -# List of encrypted medias -set lvm_crypt="crypt grubcrypt debian devuan" -# List of logical volumes -set lvm_volumes="boot root bootvol rootvol" - -# Fill LVM search list with every possible combination of media and volume -set lvmnames="" -for i in ${lvm_crypt}; do - for j in ${lvm_volumes}; do - lvmnames="${lvmnames} ${i}-${j}" - done -done - -# Fills a variable containing possible partition list from a specified and previously detected logic media kind -function list_lmedia { - unset tgt_medias - for media_item in $media_devlist; do - for device_kind in ${1}; do - for num in ${lvmnames}; do - if [ $media_item == "($device_kind/$num)" ]; then - tgt_medias="${tgt_medias} (${device_kind}/${num})" - fi - done - done - done - #echo $tgt_medias -} - -# Create menuitems that boot any valid previously detected media -function make_boot_menus { - for i in ${tgt_medias}; do - test -e ${i} - if [ $? == 0 ]; then # Media exists so we search there - grub_create_menu ${i} # Look for grub entries in known directories - isolinux_create_menu ${i} - fi - echo -n "." - done - echo -} - -# Scan every physical media to make boot menus -function scan_p_media_menus { - for i in ata ahci usb crypto 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 "List all bootable medias" { - mediadetect - cryptomount -a - scan_p_media_menus - scan_l_media_menus -} +export medianums # Default list of GRUB possible directories. The @/... entries are for cases where the BTRFS filesystem is being used set grub_dirs="" # Complete list of every possible grub directory, automatically filled later @@ -170,33 +79,11 @@ for i in '' ${grub_dir_super}; do done done done +export grub_dirs # 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 "Boot GRUB from $1" ${1} ${2} ${3} { - set root="${2}" - unset superusers - configfile ${3} - } -} - -function grub_create_menu { - set root="${1}" - for dir in ${grub_dirs}; do - # In order to save time, we do not attempt anything on non existing directory. - if [ -d /"${dir}"/ ]; then - for name in '' ${grub_conf_names}; do - if [ -f /"${dir}"/"${name}"grub.cfg ]; then - grub_menuentry ${1} /${dir}/${name}grub.cfg - fi - done - fi - done -} - function try_user_grub_config { set root="${1}" for dir in ${grub_dirs}; do @@ -239,40 +126,7 @@ for i in '' ${isolinux_dir_super}; do done done done - -# Creates a menuentry for ISOLINUX. First argument is menu text without spaces then root and configfile -function isolinux_menuentry { - menuentry "Boot ISOLINUX from $1" ${1} ${2} ${3} { - set root="${2}" - syslinux_configfile -i ${3} - } -} - -# Pretty same as above function -function syslinux_menuentry { - menuentry "Boot SYSLINUX from $1" ${1} ${2} ${3} { - set root="${2}" - syslinux_configfile -s ${3} - } -} - -function isolinux_create_menu { - set root="${1}" - for dir in ${isolinux_dirs}; do - # In order to save time, we do not attempt anything on non existing directory. - if [ -d /"${dir}"/ ]; then - if [ -f "${dir}"/isolinux/isolinux.cfg ]; then - isolinux_menuentry ${1} "${dir}"/isolinux/isolinux.cfg - elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then - syslinux_menuentry ${1} "${dir}"/syslinux/syslinux.cfg - elif [ -f "${dir}"/syslinux/extlinux.conf ]; then - syslinux_menuentry ${1} "${dir}"/syslinux/extlinux.conf - elif [ -f "${dir}"/extlinux/extlinux.conf ]; then - syslinux_menuentry ${1} "${dir}"/extlinux/extlinux.conf - fi - fi - done -} +export isolinux_dirs function try_isolinux_config { set root="${1}" @@ -377,6 +231,9 @@ menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on AHCI [a]' --hotkey='a' menuentry 'Search for GRUB/SYSLINUX/EXTLINUX/ISOLINUX on ATA/IDE [d]' --hotkey='d' { search_bootcfg ahci } +menuentry "List all bootable medias [l]" --hotkey='l' { + configfile (memdisk)/boot/grub/mdet.cfg +} if [ -f (cbfsdisk)/grubtest.cfg ]; then menuentry 'Load test configuration (grubtest.cfg) inside of CBFS [t]' --hotkey='t' { set root='(cbfsdisk)' diff --git a/config/grub/config/mdet.cfg b/config/grub/config/mdet.cfg new file mode 100644 index 0000000000000000000000000000000000000000..6a81dc584df9ecc53db06fb2980f863bd9350193 --- /dev/null +++ b/config/grub/config/mdet.cfg @@ -0,0 +1,147 @@ +# Loads into a variable all the medias from * +function mediadetect { + unset media_devlist + set media_devlist=* +} + +# Fills a variable containing possible partition list from a specified and previously detected physical media kind +function list_pmedia { + unset tgt_medias + for media_item in ${media_devlist}; do + for device_kind in ${1}; do + for num in $medianums; do + # If media number is an existent detected media + if [ $media_item == "($device_kind$num)" ]; then + # Add raw media + tgt_medias="${tgt_medias} (${device_kind}${num})" + # Add every possible partition + for part in ${partnums}; do + tgt_medias="${tgt_medias} (${device_kind}${num},${part})" + done + fi + done + done + done + #echo $tgt_medias +} + +# List of encrypted medias +set lvm_crypt="crypt grubcrypt debian devuan" +# List of logical volumes +set lvm_volumes="boot root bootvol rootvol" + +# Fill LVM search list with every possible combination of media and volume +set lvmnames="" +for i in ${lvm_crypt}; do + for j in ${lvm_volumes}; do + lvmnames="${lvmnames} ${i}-${j}" + done +done + +# Fills a variable containing possible partition list from a specified and previously detected logic media kind +function list_lmedia { + unset tgt_medias + for media_item in $media_devlist; do + for device_kind in ${1}; do + for num in ${lvmnames}; do + if [ $media_item == "($device_kind/$num)" ]; then + tgt_medias="${tgt_medias} (${device_kind}/${num})" + fi + done + done + done + #echo $tgt_medias +} + +# Create menuitems that boot any valid previously detected media +function make_boot_menus { + for i in ${tgt_medias}; do + test -e ${i} + if [ $? == 0 ]; then # Media exists so we search there + grub_create_menu ${i} # Look for grub entries in known directories + isolinux_create_menu ${i} + fi + echo -n "." + done + echo +} + +# Scan every physical media to make boot menus +function scan_p_media_menus { + for i in ata ahci usb crypto 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 +} + +# Creates a menuentry for GRUB. First argument is menu text without spaces then root and configfile +function grub_menuentry { + menuentry "Boot GRUB from $1" ${1} ${2} ${3} { + set root="${2}" + unset superusers + configfile ${3} + } +} + +function grub_create_menu { + set root="${1}" + for dir in ${grub_dirs}; do + # In order to save time, we do not attempt anything on non existing directory. + if [ -d /"${dir}"/ ]; then + for name in '' ${grub_conf_names}; do + if [ -f /"${dir}"/"${name}"grub.cfg ]; then + grub_menuentry ${1} /${dir}/${name}grub.cfg + fi + done + fi + done +} + +# Creates a menuentry for ISOLINUX. First argument is menu text without spaces then root and configfile +function isolinux_menuentry { + menuentry "Boot ISOLINUX from $1" ${1} ${2} ${3} { + set root="${2}" + syslinux_configfile -i ${3} + } +} + +# Pretty same as above function +function syslinux_menuentry { + menuentry "Boot SYSLINUX from $1" ${1} ${2} ${3} { + set root="${2}" + syslinux_configfile -s ${3} + } +} + +function isolinux_create_menu { + set root="${1}" + for dir in ${isolinux_dirs}; do + # In order to save time, we do not attempt anything on non existing directory. + if [ -d /"${dir}"/ ]; then + if [ -f "${dir}"/isolinux/isolinux.cfg ]; then + isolinux_menuentry ${1} "${dir}"/isolinux/isolinux.cfg + elif [ -f "${dir}"/syslinux/syslinux.cfg ]; then + syslinux_menuentry ${1} "${dir}"/syslinux/syslinux.cfg + elif [ -f "${dir}"/syslinux/extlinux.conf ]; then + syslinux_menuentry ${1} "${dir}"/syslinux/extlinux.conf + elif [ -f "${dir}"/extlinux/extlinux.conf ]; then + syslinux_menuentry ${1} "${dir}"/extlinux/extlinux.conf + fi + fi + done +} + +mediadetect +cryptomount -a +scan_p_media_menus +scan_l_media_menus diff --git a/script/build/roms b/script/build/roms index a90e1daa0542f42105a2749f9aa81263396da3ed..db7bcce90ed86a203222d78e5602e1220ec6572a 100755 --- a/script/build/roms +++ b/script/build/roms @@ -163,7 +163,8 @@ build_grub_payload() --modules="${grub_modules}" \ --install-modules="${grub_install_modules}" \ "/boot/grub/grub.cfg=${grubcfgsdir}/config/grub_memdisk.cfg" \ - "/boot/grub/grub_default.cfg=${grubcfgsdir}/config/grub.cfg" || \ + "/boot/grub/grub_default.cfg=${grubcfgsdir}/config/grub.cfg" \ + "/boot/grub/mdet.cfg=${grubcfgsdir}/config/mdet.cfg" || \ $err "could not generate grub.elf" }