Instalación de Syslinux como bootloader

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.

7 Me gusta