From abaefca1c0ddbcb7fb7fc5431211e6833ea1bd75 Mon Sep 17 00:00:00 2001 From: livio <livio@codeberg.org> Date: Tue, 2 Apr 2024 23:22:04 +0200 Subject: [PATCH] Added ISOLINUX/SYSLINUX menulist from media detection --- config/grub/config/grub.cfg | 50 ++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/config/grub/config/grub.cfg b/config/grub/config/grub.cfg index 0d7df997..364a4caf 100644 --- a/config/grub/config/grub.cfg +++ b/config/grub/config/grub.cfg @@ -123,6 +123,7 @@ function make_boot_menus { 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 @@ -224,7 +225,54 @@ function search_grub { } # Default list of ISOLINUX possible directories. The @/... entries are for cases where the BTRFS filesystem is being used -set isolinux_dirs="'' /boot /EFI /boot/EFI /@ /@/boot /@/boot/EFI /@/EFI" +set isolinux_dirs="" # Complete list of every possible isolinux directory, automatically filled later +set isolinux_dir_super="@" # Possible list of superdirectories (BTRFS can have those) +set isolinux_dir="boot EFI" # First level directories list +set isolinux_dir_sub="boot EFI" # Second level directories list + +for i in '' ${isolinux_dir_super}; do + isolinux_dirs="${isolinux_dirs} ${i}" + for j in ${isolinux_dir}; do + isolinux_dirs="${isolinux_dirs} ${i}/${j}" + for k in ${isolinux_dir_sub}; do + isolinux_dirs="${isolinux_dirs} ${i}/${j}/${k}" + 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 +} function try_isolinux_config { set root="${1}" -- GitLab