En una publicación anterior he descrito como instalé Slackware en mi laptop con el asqueroso Windows 8 (hardware UEFI). En este proceso utilicé el GRUB de Ubuntu (por flojera) para decidir con cual sistema operativo iniciar, pero como casi no uso esta distro decidí buscar como instalar GRUB en Slackware y usarlo para este propósito, de esta manera sería independiente de Ubuntu.
Como usuario de Slackware estoy familiarizado con LILO y mi primera experiencia usando y configurando GRUB fue en los pocos días que usé Ubuntu, no es complicado pero tampoco es tan simple como con LILO a mi parecer. Pero en fin es a lo que me vi obligado con el nuevo hardware UEFI.
Mi desición más obvia con gusto sería dejar solo Slackware en el equipo, pero como tengo que sacar para la comida usando ArcGIS, Office, AutoCAD y demás cosas, decidí dejar el Windows 8 instalado en el equipo. Además pagué por la licencia cuando comp
Instalando GRUB2
La instalación de grub la hice de la siguiente manera: usé sbopkg para instalar todas las dependencias y luego instalé grub con el SlackBuild de la manera tradicional. Las dependencias quedaron con solo hacer:
# sbopkg -i "gnu-unifont os-prober locale-gettext help2man"
Y luego descargué el SlackBuild de grub y lo edité para agregar:
--with-platform=efi \
en la parte de ./configure.
Preparando todo
Para continuar seguí las instrucciones de instalación y configuración de grub publicadas en la documentación de Slackware aquí. Estas instrucciones son para instalar grub como cargador de arranque en hardware UEFI, que es precisamente lo que quiero hacer. Consisten básicamente en lo siguiente:
- Instalar Grub2-efi en una memoria USB
- Una vez que funcione el arranque desde la memoria USB instalar Grub2-efi en el disco duro
- Modificar el menú de arranque UEFI
Instalar Grub2-efi en una memoria USB
Una vez instalado el paquete de grub en Slackware 14.0, hay que montar la memoria USB en el directorio /boot/efi (si es necesario hay que crearlo primero), luego ejecutar:
# mount /dev/sdb1 -t vfat /boot/efi (donde sdb1 es mi USB, se puede identificar con fdisk -l) # modprobe dm-mod # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck --debug # mkdir -p /boot/grub/locale # cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
Luego configurar grub.cfg haciendo:
# grub-mkconfig -o /boot/grub/grub.cfg
Este proceso debió haber creado un archivo en la memoria con la siguiente ruta:
/EFI/grub/grubx64.efi.
Instalar Grub2-efi en el disco duro
La partición efi, sda1 en mi caso, debe montarse en el disco duro (yo hice un directorio llamado ~/efi y la monté aquí para no desmontar la memoria USB todavía). La partición tendrá una estructura como esta:
/EFI/Boot/bootx64.efi
En la mía también hay /EFI/Microsoft/Boot y el archivo efi de arranque de Windows es bootmgr.efi. Elegí la manera segura que es crear un directorio llamado /EFI/Linux/ y copiar aquí el archivo llamado grubx64.EFI desde la memoria USB.
Modificar el menú de arranque UEFI
Modificar el menú de arranque nos permite conservar Windows 8. El primer paso es descargar efibootmgr desde http://linux.dell.com/efibootmgr/.
Descomprimirlo, entrar al directorio creado y ejecutar make:
# make
Copiar src/efibootmgr/efibootmgr en /usr/sbin y cambiar el propietario (con chown) a root.
# chown root /usr/bin/efibootmgr
Desmontar la memoria y montar la partición efi (la mia es sda1) del disco duro en /boot/efi:
# mount /dev/sda1 -t vfat /boot/efi # modprobe efivars # efibootmgr -c -g -d /dev/sda -p 1 -w -L "Linux" -l '\EFI\Linux\grubx64.EFI'
Al reinicar apareció e grub de Slackware y no el de Ubuntu.
Pequeño inconveniente
Resta decir que al parecer Ubuntu reemplazó el archivo EFI de Windows (bootmgr.efi) por el suyo por que cuando seleccioné la opción para iniciar Windows en el menú grub de Slackware, me apareció el menú de grub de Ubuntu. Sin embargo existe un respaldo llamado bkpbootmgfw.efi que es el arrancador EFI de Windows real. Para solucionar esto, primero encontré el UUID de la partición FAT32 donde se encuentra este archivo UEFI:
# grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bkpbootmgfw.efi 6C27-EC36 # grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bkpbootmgfw.efi --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
Y edité el archivo /etc/grub.d/40_custom para agregar:
menuentry "Microsoft Windows 8 x86_64 UEFI-GPT" { insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 6C27-EC36 chainloader /efi/Microsoft/Boot/bkpbootmgfw.efi }
Finalmente actualizar el archivo /boot/grub/grub.cfg:
# grub-mkconfig -o /boot/grub/grub.cfg
Hibernación
Para habilitar el inicio desde hibernación edité el archivo /boot/grub/grub.cfg, colocando en la entrada del menú de Slackware:
linux /boot/vmlinuz... root=... resume=/dev/sda9 quiet ro
Donde sda9 es mi partición SWAP de 8 GB, el doble que la RAM. Todo funciona perfecto ahora.
¡Saludos!
Fuentes: