Debido a que muchos nos gusta tener un mayor control sobre nuestro sistema, y muchas veces grub depende muchas capas de abstracción vía scripts para generar el grub.cfg, que el archivo que le muestra el kernel, el initramfs y demás datos importantes a grub. Yo considero que puede ser bueno tener un mayor control sobre esto, por lo que me pasé a usar syslinux como bootloader. Aquí el proceso de instalación por si alguno quiere usarlo también, pero debo aclarar que syslinux es más manual que grub, es casi como un lilo pero mejor a mí gusto.
1- Instalación del paquete
La mayoría de distribuciones lo ofrecen en sus repositorios, incluso distros de nicho como Slackware o Slitaz, por lo que solo debemos usar nuestro gestor de paquetes, notar que algunas distros parecen dividir el software en varios paquetes, recomiendo instalar todos.
2- Preparación del directorio
Si bien Syslinux puede instalarse directamente en /boot, yo recomiendo crear un directorio exclusivo para el bootloader para llevar orden.
# mkdir /boot/syslinux
Posteriormente allí copiaremos todos los archivos relevantes de este bootloader con el siguiente comando
# cp /usr/lib/syslinux/*.c32 /boot/syslinux
Esto nos dará acceso a todos los módulos del bootloader. Si bien es posible solo copiar los módulos necesarios, ya que muchos de esto tal vez no lo usemos, yo soy de la opinión que es mejor que sobren a que falten y no inicie el ordenador.
3- Instalación del bootloader y escritura del MBR
Los siguientes pasos no requieren tanta explicación, pero una pequeña nota; Syslinux tiene una colección de bootloaders para distintos sistemas de archivos, para ext4, que es el estándar en Linux, se usa extlinux. Cabe aclarar que extlinux también soporta ext2/3, btrfs, xfs y ufs/ffs.
# extlinux --install /boot/syslinux
Seguidamente, escribimos el mbr, cuando vayan a escribir este comando tengan cuidado y revisen bien lo que escribieron, no queremos que el Disk Destroyer haga de las suyas.
# dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sdX
Donde X es nuestro disco, el disco entero, no una partición. También está altmbr.bin que es otro MBR pero este no busca una partición booteable, su último bit lo dirige desde donde debe bootear. Yo recomiendo el mbr.bin normal pero eso ya es cosa de cada quién.
4- Creación del syslinux.cfg
Como dije al principio, el punto de esto es tener un control más directo sobre el archivo que guía al bootloader, con syslinux conseguimos esto mediante su archivo syslinux.cfg, que tiene una sintaxis bastante sencilla.
touch /boot/syslinux/syslinux.cfg
Dentro de este archivo configuramos todo, les voy a compartir mi configuración personal para que puedan guiarse.
Mi syslinux.cfg
UI menu.c32
PROMPT 0
MENU TITLE Void Linux
TIMEOUT 50
DEFAULT habsburgo
LABEL void
MENU LABEL Void Linux with Linux 6.12
LINUX /boot/vmlinuz-6.12.25_1
APPEND root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro loglevel=4 net.ifnames=0 intel_iommu=igfx_off
INITRD /boot/initramfs-6.12.25_1.img
LABEL void-recovery
MENU LABEL Void Linux with Linux 6.12 (Recovery mode)
LINUX /boot/vmlinuz-6.12.25_1
APPEND root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro single
INITRD /boot/initramfs-6.12.25_1.img
LABEL habsburgo
MENU LABEL Void Linux with Linux 6.1 Habsburgo
LINUX /boot/vmlinuz-6.1.135-Habsburgo
APPEND root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro loglevel=4 net.ifnames=0 intel_iommu=igfx_off
INITRD /boot/initramfs-6.1.135-Habsburgo.img
LABEL habsburgo-recovery
MENU LABEL Void Linux with Linux 6.1 Habsburgo (Recovery mode)
LINUX /boot/vmlinuz-6.1.135-Habsburgo
APPEND root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro single
INITRD /boot/initramfs-6.1.135-Habsburgo.img
LABEL reboot
MENU LABEL Reiniciar
KERNEL reboot.c32 -w
LABEL poweroff
MENU LABEL Apagar
KERNEL poweroff.c32
El UUID no es estrictamente necesario, podemos poner root=/dev/sdXN pero yo recomiendo el UUID para tenerlo fijo y sin cambios.
Para saber el UUID de nuestra partición booteable usamos el siguiente comando
ls -l /dev/disk/by-uuid/
Esa configuración se ve tal que así:
Con todo esto ya solo nos quedaría reiniciar, con syslinux instalado.
También existe un menú más “fancy” con vesamesa.c32, yo no lo uso pero la ArchWiki tiene algo de información sobre ello si a alguien le interesa.
Notas importantes:
1- Cada actualización del kernel debemos actualizar las entradas en syslinux.cfg manualmente para que apunten al nuevo kernel y initramfs, he pensado en escribir un script que lo haga pero aún no me decidido hacerlo, si lo hago lo compartiré por aquí.
2- Los sistemas que generen su initramfs con mkinitcpio, como Arch y derivadas, deben montar el sistema como lectura y escritura desde el principio, en APPEND cambian ro por rw y listo.
3- Por si no quedó claro, en APPEND es donde colocamos parámetros del kernel.
4- Aúnque tiene soporte básico para UEFI, yo no lo recomendaría por que tiene problemas con algunas configuraciones y algunos módulos no podrían servir, como alternativa les puedo recomendar Limine o REFInd, que mantienen ese control estilo lilo.