.png)
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/sda
lo que funciona bien, pero al ejecutarlo grub-mkconfig -o /boot/grub/grub.cfg
se 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-mkconfig
dentro 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.