Table of Contents

Configure SYSLINUX como cargador de arranque en hardware basado en UEFI

SYSLINUX es un cargador de arranque que carga Linux (entre otras cosas) desde el sistema de archivos FAT. The Syslinux Project, del cual forma parte SYSLINUX, el cargador de arranque, también contiene ISOLINUX, EXTLINUX y PXELINUX, básicamente sus variantes para arrancar desde medios ópticos, ext2 / 3 / 4, Btrfs, XFS, UFS / FFS y NTFS o desde red.

El soporte de UEFI parece haberse agregado en la versión 6 de SYSLINUX, mientras que Slackware viene con la versión 4, lo que significa que no se puede configurar durante la instalación de Slackware, a menos que uno prepare los archivos SYSLINUX en otra máquina.

Por qué SYSLINUX

Dicho esto, ¿por qué molestarse con SYSLINUX? Un par de razones:

Por qué UEFI

No es como si hubiera alguna opción; Las máquinas hoy en día son UEFI. Sin embargo, se puede optar por configurar UEFI en el llamado modo “CSM” o, a veces, en “Legacy”. En este modo, UEFI actúa como BIOS, es decir, lee el primer sector (MBR) de un disco duro y carga y ejecuta desde allí el cargador de arranque no UEFI, como LILO. A diferencia de UEFI en, digamos, el modo UEFI, cuando lee, carga y ejecuta el cargador de arranque compatible con UEFI desde partición de arranque EFI .

Francamente, no hay razones de peso para no usar CSM (tenga en cuenta que es posible usar GPT partitions without UEFI. Por el contrario, hay razones para evitar el arranque UEFI, porque:

Pero, al igual que con LILO, puede que llegue el día en que tengamos que seguir adelante.

Instalación

Básicamente, hay dos pasos: primero, preferiblemente incluso antes de instalar Slackware, particione el disco usando GPT y cree una partición de arranque EFI, luego compile e instale SYSLINUX.

Pero antes de empezar:

Crear partición de arranque EFI

Es el lugar donde UEFI buscará un cargador de arranque. Se pueden usar varias herramientas para particionar una unidad y crear una partición de arranque EFI,:

Supongamos que tienes 10 GB de disco vacío /dev/sda.

# sgdisk -Z /dev/sda
# gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.0

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries.
Disk /dev/sda: 20971520 sectors, 10.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 8C026A41-F188-4521-A72C-D2B826EAA1D1
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 20971486
Partitions will be aligned on 2048-sector boundaries
Total free space is 20971453 sectors (10.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
# sgdisk -n 1:0:+512M /dev/sda
# sgdisk -n 2:0:+9G /dev/sda
# sgdisk -n 3 /dev/sda
# sgdisk -t 1:ef00 /dev/sda
# sgdisk -t 2:8300 /dev/sda
# sgdisk -t 3:8200 /dev/sda
# gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.0

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 20971520 sectors, 10.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 3F2101FB-0D6B-481F-98B9-1C6621DB0981
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 20971486
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  
   2         1050624        19924991   9.0 GiB     8300  
   3        19924992        20971486   511.0 MiB   8200
# mkfs.vfat -F 32 /dev/sda1

Eso es más o menos para la partición de arranque EFI. Puede hacer lo que quiera con /dev/sda2 (RAID, LUKS, LVM, cualquier sistema de archivos) e instalar Slackware allí, pero deje la partición EFI sola, esa partición debe estar sin cifrar y el formato FAT32.

Preparar SYSLINUX

Compilación

Descarguelo desde sources y compile.

$ unxz -c syslinux-6.03.tar.xz | tar -x
$ cd syslinux-6.03/
$ make
$ make INSTALLROOT=/some/where install

Configurar el cargador de arranque

Ahora copie el cargador de arranque y algunos módulos, así como el kernel y initrd a la partición de arranque EFI creada anteriormente. Supongamos que /dev/sda1 está montado como /boot/efi.

# cd /boot/efi
# mkdir EFI
# mkdir EFI/SYSLINUX
# cd EFI/SYSLINUX
# cp /some/where/usr/share/syslinux/efi64/syslinux.efi .
# cp /some/where/usr/share/syslinux/efi64/ldlinux.e64 .
# cp /some/where/usr/share/syslinux/efi64/libutil.c32 . 
# cp /some/where/usr/share/syslinux/efi64/menu.c32 .
/boot/efi/EFI/SYSLINUX/syslinux.cfg
UI menu.c32
PROMPT 0
TIMEOUT 100
DEFAULT Slackware 14.2

MENU TITLE Machine Boot Menu

LABEL Slackware 14.2
	MENU LABEL Slackware 14.2
	LINUX vmlinuz-huge-4.4.14
	APPEND /dev/vgroot/V_ROOT 4
	INITRD initrd.gz-4.4.14

LABEL Slackware 14.2 no X
	MENU LABEL Slackware 14.2 no X
	LINUX vmlinuz-huge-4.4.14
	APPEND /dev/vgroot/V_ROOT
	INITRD initrd.gz-4.4.14
# cp /boot/vmlinuz-huge-4.4.14 .
# mkinitrd -c -k 4.4.14 -C /dev/sda2 -L -R -f xfs -m xfs:hid:hid-generic:usbhid:xhci-hcd:xhci-pci:ehci-hcd:ehci-pci:ohci-hcd:ohci-pci:uhci-hcd:uhci-pci:usb-storage -r /dev/vgroot/V_ROOT -o /boot/initrd.gz-4.4.14
# cp /boot/initrd.gz-4.4.14 .

El segundo menú de inicio es el de SYSLINUX, es decir, lo que escribió en syslinux.cfg y aparecerá si no activa el menú de inicio de UEFI o lo activa y luego selecciona SYSLINUX o dispositivo (disco duro) en el que está activado.

# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\SYSLINUX\\syslinux.efi -L "SYSLINUX"
Timeout: 2 seconds
BootOrder: 0000,0001,0002
Boot0000* SYSLINUX
Boot0001* UEFI: IP4 Realtek PCIe GBE Family Controller
Boot0002* UEFI: IP6 Realtek PCIe GBE Family Controller
# efibootmgr -o 0000,0001,0002

Solución de problemas

Si su máquina se queja, no tiene nada que arrancar, eso puede indicar que el comando efibootmgr fue incorrecto o de alguna manera no se registró. Luego, puede intentar forzarlo para que inicie SYSLINUX moviéndolo y cambiándolo de nombre a EFI \ Boot \ bootx64.efi, que es una opción alternativa; La máquina intentará arrancar eso en algún momento.

# cd /boot/efi/EFI
# mv SYSLINUX Boot
# cd Boot
# cp syslinux.efi bootx64.efi

Sources