Portátil Nuevo: EFI, Windows 8, Ubuntu y Slackware

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

Usemos Linux: El porno se ve igual

Usemos Linux, el porno se ve igual.

Creo que alguna vez hemos escuchado o visto esta frase humorística en internet, bueno les dejo la imagen de un video en donde se toman en serio este dicho. Podemos ver a una mujer deleitándose con una escena porno en su laptop con, lo que parece ser, Ubuntu.

Viendo_Porno

A mí me pareció curioso.

Saludos.