grub-mkconfig no completa las entradas del menú /etc/grub.d/10_linux (Void Linux)

grub-mkconfig no completa las entradas del menú /etc/grub.d/10_linux (Void Linux)

He estado escribiendo un script para instalar Void Linux (necesito algo más granular que el instalador de void). Puedo instalar grub sin problemas en UEFI pero la instalación del BIOS no funciona.

Hago grub-install /dev/sdalo que funciona bien, pero al ejecutarlo grub-mkconfig -o /boot/grub/grub.cfgse genera una configuración a la que le faltan las entradas de menú para Void (por ejemplo, el bloque que se supone que se genera a partir de/etc/grub.d/10_linux(que verifiqué que existe)).

Quizás esto se deba a que estoy ejecutando grub-mkconfigdentro de un chroot, pero grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id="Void"funciona bien. Pero eso podría deberse a que UEFI funciona de manera diferente.

Esta es la función de mi script que maneja la instalación del gestor de arranque:

install_bootloader() {
    display_logo
    echo "------------------------------------"
    echo "(8) Install bootloader"
    echo "------------------------------------"
    read -p "Enter system architecture (x86_64|aarch64): " arch
    exit_if_0 $arch
    read -p "Enter system disk (e.g. /dev/sda): " disk
    exit_if_0 $disk
    read -p "Enter boot partition (e.g. /dev/sda1: " boot_partition
    exit_if_0 $boot_partition
    read -p "Enter boot partition scheme (boot|efi): " boot_scheme
    exit_if_0 $boot_scheme
    read -p "Enter root partition (e.g. /dev/sda2): " root_partition
    exit_if_0 $root_partition
    if [[ $boot_scheme == "efi" ]]; then
        if [[ $arch == "x86_64" ]]; then
            xbps-install grub-$arch-efi
        elif [[ $arch == "aarch64" ]]; then
            xbbps-install grub-arm64-efi
        fi
    fi
    if [[ $boot_scheme == "efi" ]]; then
        mkdir -p /efi
        mount -o rw,noatime $boot_partition /efi
        if [[ $arch == "x86_64" ]]; then
            grub-install --target=$arch-efi --efi-directory=/efi --bootloader-id="Void"
        elif [[ $arch == "aarch64" ]]; then
            grub-install --target=arm64-efi --efi-directory=/efi --bootloader-id="Void"
        fi
    elif [[ $boot_scheme == "boot" ]]; then
        mount -o rw,noatime $boot_partition /boot
        mkdir -p /boot/grub
        grub-install $disk
        sleep 3
        grub-mkconfig -o /boot/grub/grub.cfg
        sleep 3
    fi
    clear
}

Este es el /boot/grub/grub.cfg que obtengo:

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else
  menuentry_id_option=""
fi

export menuentry_id_option

if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_msdos
insmod ext2
set root='hd0,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos2 --hint-efi=hd0,msdos2 --hint-baremetal=ahci0,msdos2  446e6032-9198-4f85-aa98-252abfadbecb
else
  search --no-floppy --fs-uuid --set=root 446e6032-9198-4f85-aa98-252abfadbecb
fi
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_US
  insmod gettext
fi
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/30_uefi-firmware ###
### END /etc/grub.d/30_uefi-firmware ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg
fi
### END /etc/grub.d/41_custom ###

¿Algunas ideas?

Gracias de antemano.

Respuesta1

Resulta que fue porque intenté montar la partición /boot inmediatamente antes de llamar a grub-install y grub-mkconfig, lo cual no era necesario. Eliminé la llamada de montaje y funcionó después. Miré el script oficial del instalador de void y asumí que tenía que invocar "chroot grub-install..." y "chroot grub-mkconfig..." pero este no era el caso, era solo el montaje.

información relacionada