Por un lado contento de mi nueva portátil, una ASUS-X401A y por otro la pesadilla de todo un fin de semana. Esta nueva laptop que ahora tengo en mis manos me ha traído muchos problemas a la hora de querer instalar mi distribución de Linux favorita: Slackware 14.0.
Y no tanto el portátil como tal ha sido el causante de mis dolores de cabeza, sino el ya por muchos conocido EFI y el arranque controlado seguro del nuevo Windows 8 de Microsoft. Así que me he puesto a investigar acerca de EFI, UEFI y algunas cosas de como afecta esto al arranque en distribuciones de Linux.
Antes de comenzar a escribir la manera en la que instalé esta distribución quiero aclarar que Slackware es capaz de instalarse y correr en hardware basado en UEFI sin problemas desde hace algún tiempo.
Cabe señalar también que yo no había tenido experiencias con EFI, grub, elilo ni Ubuntu antes por lo tanto no esperes ver algo muy avanzado en esto.
Configurar el arranque e instalar Ubuntu
Lo primero que necesité fue tener otra distribución de Linux y decidí instalar y probar Ubuntu, así que instalé la versión 12.04 sin problemas (ya se que hay una nueva versión pero esto fue antes de que se liberara). Para instalar Ubuntu descargué la imagen ISO desde el sitio oficial y la metí a una memoria USB de 4G con Universal USB Installer, para la instalación en el equipo hace falta hacer ninguna maniobra especial, solo tuve que hacer que la maquina arranque desde la memoria USB en la que tenía instalado el sistema.
Para ello hay que entrar en la configuración del arranque y por lo menos en este modelo de portátil se entra de manera especial indicándole a Windows que uno desea reiniciar y configurar el arranque. Para ello hay que entrar a la Charm bar o barra de botones de acceso de Windows 8 (la que aparece al colocar el puntero del ratón en el lado derecho de la pantalla) e ir a Configuración luego a General y Configurar arranque.
El equipo se reiniciará y entraremos en la configuración del arranque. Ya estando aquí desactivamos el arranque seguro y el arranque rápido.
Elegimos iniciar desde la memoria USB y entraremos a Ubuntu, lo instalamos sin problema. Para ello hay muchas guias por la web y no pretendo hacer otra.
Problema de Arranque de Windows 8
Una vez instalado Ubuntu todo marchaba bien, al encender el equipo se mostraba la típica pantalla de GRUB en el que mostraban las siguientes opciones:
Ubuntu Opciones avanzadas para Ubuntu Windows Recovery Environment (loader) (en /dev/sda2) Windows 8 (loader) (en /dev/sda4) System setup
Al iniciar Ubuntu todo bien, pero al iniciar Windows 8 (en /dev/sda4) se mostraba en la pantalla el siguiente error:
error: no se encuentra la orden <drivemap> error: invalid EFI file path. Pulse una tecla para continuar...
Después de intentar algunas cosas sin éxito alguno y hacer una búsqueda por la web encontré la respuesta en el foro de Ubuntu-es. La solución es muy sencilla y sin complicaciones, solo basta con abrir un terminal y ejecutar:
# sudo su # add-apt-repository ppa:yannubuntu/boot-repair # apt-get update # apt-get install -y boot-repair # boot-repair
Una vez iniciada la aplicación pulsar en el botón «Recommended repair» ó «Reparación recomendada». Terminado su trabajo, cerrar la aplicación y reiniciar:
# reboot
Esto agregará dos entradas más al menú de GRUB. Para entrar sin problema a Windows 8 yo selecciono la primera opción:
Windows UEFI bkpbootmgfw.efi Windows Boot UEFI loader
Estas fueron unas horas más a las pocas de mi vida en la que he usado Ubuntu. Agregaré que me parece una distribución sin complicaciones y fácil de utilizar, tal vez hasta la deje instalada en mi equipo pues me gustó bastante que reconociera y funcionarán sin más el Touchpad del equipo y las funciones de la tecla «Fn», cosas que en Slackware aún ando viendo como configurar bien. Ahora comprendo mejor porqué tiene tanta fama y mucha gente la prefiere.
Instalando Slackware
Para instalar Slackware 14.0 (64 bits) seguí la guia llamada Installing Slackware of UEFI-based hardware y decidí crear un medio de instalación con una memoria USB, en primera por que el equipo no cuenta con un lector de CD o DVD y en segunda por que me facilitaría crear una esquema de particiones tipo GPT (GUID Partition Table) para poner el bootader requerido (compatible con hardware UEFI).
En mi caso usé una memoria USB de 16G, en la que hice una partición de 50M para colocar el bootloader y los archivos necesarios (se explica más adelante) y el resto para colocar los archivos del ISO del DVD de Slackware, usando simplemente descomprimir y copiar. Precisamente para hacer todo este proceso instalé Ubuntu en la laptop. OK usando entonces Ubuntu hacemos lo siguiente:
Primero con fdisk identificar el disco duro del equipo y la memoria USB, en este caso sda resultó ser el disco duro y sdb la USB, todo como era de esperarse.
$ sudo su # fdisk -l
Aparecerá un mensaje diciendo que fdisk no soporta GPT y que usemos GNU Parted.
AVISO: GPT (Tabla de partición GUID) detectado en '/dev/sda'! La utilidad fdisk no soporta GPT. Use GNU Parted.
Bien, lo importante sería algo como esto:
Disco /dev/sda: 500.1 GB, 500107862016 bytes ... más cosas ... Disco /dev/sdb: 15.6 GB, 15606349824 bytes ...
Bien ahora usamos gdisk para particionar la USB:
# gdisk /dev/sdb
Me apareció lo siguiente:
GPT fdisk (gdisk) version 0.8.5 Partition table scan: ..MBR: MBR only ..BSD: not present ..APM: not present ..GPT: not present *************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if you don't want to convert your MBR partitions to GPT format! *************************************************************** Warning! Secondary partition table overlaps the last partition by 33 blocks! You will need to delete this partition or resize it in another utility.
Una vez que hemos leido la agradable bienvenida nos pedirá un comando, solo para estar seguros de lo que hacemos veremos la ayuda ingresando un signo de interrogación:
Command (? for help): ?
Bien esta es la ayuda:
b back up GPT data to a file c change a partition's name d delete a partition i show detailed information on a partition l list known partition types n add a new partition o create a new empty GUID partition table (GPT) p print the partition table q quit without saving changes r recovery and transformation options (experts only) s sort partitions t change a partition's type code v verify disk w write table to disk and exit x extra functionality (experts only) ? print this menu
Ahora borraremos la partición de la memoria USB para crear otras dos, primero vemos la tabla de particiones existente.
Command (? for help): p
Disk /dev/sdb: 30481152 sectors, 14.5 GiB Logical sector size: 512 bytes Disk identifier (GUID): F50E7F58-6AD1-4CFB-9E7D-2A62CBFF20F4 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 30481118 Partitions will be aligned on 128-sector boundaries Total free space is 8030 sectors (3.9 MiB)
Number Start (sector) End (sector) Size Code Name 1 8064 30481151 14.5 GiB 0700 Microsoft basic data
Ahora si borramos las particiones que existan, como solo hay una no nos preguntara cual y usará 1 por defecto:
Command (? for help): d Using 1
Para crear una nueva partición usamos el comando «n», damos [Enter] para aceptar el número de partición y el primer sector, luego escribimos «+50M» para crear una partición. Si deseas más espacio este es el número a modificar. Finalmente cuando nos pida un código colocamos ef00, esto es lo más importante. He aquí lo que yo hice:
Command (? for help): n Partition number (1-128, default 1): First sector (34-30481118, default = 128) or {+-}size{KMGTP}: Last sector (128-30481118, default = 30481118) or {+-}size{KMGTP}: +50M Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): ef00 Changed type of partition to 'EFI System'
Creamos una nueva partición con todo el espacio restante, dando [Enter] a todo y al final colocamos el código 0700 para seleccionar ‘Microsoft basic data’.
Command (? for help): n Partition number (2-128, default 2): First sector (34-30481118, default = 102528) or {+-}size{KMGTP}: Last sector (102528-30481118, default = 30481118) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 0700 Changed type of partition to 'Microsoft basic data'
Mi memoria USB quedó particionada así:
Number Start (sector) End (sector) Size Code Name 1 128 102527 50.0 MiB EF00 EFI System 2 102528 30481118 14.5 GiB 0700 Microsoft basic data
Ahora toca formatear las particiones creadas en la memoria USB con mkfs. La primera con código ef00 se formateará en FAT32 y se colocará en ella el bootloader elilo así como los archivos bzImage e initrd.img del kernel huge obtenidos directamente del DVD de instalación de Slackware. Esto se hace de la siguiente manera:
Primero formatear en FAT32 (obligatorio):
# mkfs.vfat -F32 /dev/sdb1
Montar la partición y crear los directorios apropiados:
# mount -t vfat /dev/sdb1 /home/ecoslacker/efi/ # cd efi/ # mkdir ./EFI # mkdir EFI/BOOT
Yo decidí montar la partición en mi directorio personal por comodidad, sin embargo se puede hacer en cualquier lugar. Dejo las rutas completas esperando que sea de ayuda y suponiendo que sabrás como hacerlo en tu sistema.
Luego colocar elilo, bzImage e initrd.img:
# cp /home/ecoslacker/Descargas/elilo-3.14-all/elilo-3.14-x86_64.efi /home/ecoslacker/efi/EFI/BOOT/BOOTX64.EFI # cp /media/ecoslacker/Data/slackware64-14.0-install-dvd/kernels/huge.s/bzImage /home/ecoslacker/efi/EFI/BOOT/ # cp /media/ecoslacker/Data/slackware64-14.0-install-dvd/isolinux/initrd.img /home/ecoslacker/efi/EFI/BOOT/
Hay que crear un archivo llamado elilo.conf en la partición de la memoria USB:
/home/ecoslacker/efi/EFI/BOOT/ nano elilo.conf
Y colocar el siguiente contenido:
prompt timeout=50 default=install image=bzImage label=install initrd=initrd.img append="load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 SLACK_KERNEL=huge.s"
Una vez hecho esto dar formato de EXT3 a la otra partición de la memoria USB (/dev/sdb2 en mi caso) y copiar los archivos de la ISO del DVD de instalación de Slackware (descomprimir y copiar). Lo que más importa del formato de la partición es que sea reconocido por el kernel así que puede ser otro, yo elegí este formato y para ello usé GParted, que por cierto tardó un poco.
Reiniciar y bootear desde la memoria USB. Para ello usé la última opción del menú de GRUB (System setup), entré a la configuración y seleccioné la memoria USB para iniciar.
Veremos una pantalla familiar…
Ahora iniciar y cuando el instalador nos pida un medio de instalación seleccionamos la opción de usar una partición del sistema, en mi caso es /dev/sdb2 y luego pedirá un directorio, en el que hay que introducir slackware64. Con esto podemos hacer la instalación como normalmente la hacemos. Eso si hay que estar concientes de saltarse la instalación de LILO, pues no lo estaremos usando.
Una vez instalado Slackware restan un par de cosas por hacer antes de reiniciar. Hay que montar la partición local donde se encuentra la configuración de EFI y configurar el arranque de Slackware:
# mkdir /mnt/sda1 # mount -t vfat /dev/sda1 /mnt/sda1 # mkdir /mnt/sda1/EFI/slackware
Montar también la partición con la configuración EFI de la memoria USB que usamos para bootear Slackware, si es que no la hemos montado:
# mkdir /root/sdb1 # mount -t vfat /dev/sdb1 /root/sdb1
Copiar los archivos de la memoria a la partición local:
# cp /root/sdb1/EFI/BOOT/BOOTX64.EFI /mnt/sda1/EFI/slackware # cp /root/sdb1/EFI/BOOT/bzimage /mnt/sda1/EFI/slackware # cp /root/sdb1/EFI/BOOT/elilo.conf /mnt/sda1/EFI/slackware # cp /root/sdb1/EFI/BOOT/initrd.img /mnt/sda1/EFI/slackware
Resta modificar el archivo elilo.conf…
# nano /mnt/sda1/EFI/slackware/elilo.conf
…para que contenga lo siguiente:
prompt timeout=50 default=huge image=bzImage label=huge read-only root=/dev/sda10
Al reiniciar, el sistema me seguía reconociendo GRUB en vez de elilo. Por pereza y falta de tiempo decidí dejar GRUB, así que para agregar la entrada de Slackware simplemente hice lo mismo que describí más arriba: entrar a Ubuntu y ejecutar boot-repair.
Ahora mi portátil tiene tres sistemas para iniciar: Windows 8, Ubuntu y Slackware, aunque lo que uso la mayoría del tiempo es Slackware obviamente.
¡Larga vida a Slackware!
Fuentes:
Installing Slackware of UEFI-based hardware
Ubuntu-es
elilo
Arch Wiki: UEFI
Gentoo Wiki: UEFI