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

Close Windows, open doors.

Close Windows, open doors.

Close Windows, open doors.

Usar partición de Windows en VirtualBox

Por las razones que sea a veces es necesario usar un dual boot, en mi caso después de unos años usando solo Slackware y una máquina virtual de Windows XP me ví en la necesidad de instalar Windows 7 por cuestiones de rendimiento del equipo y falta de recursos para una memoria RAM.

Con los sencillos pasos siguientes se puede ejecutar la partición de Windows de nuestro dual boot como si fuera una máquina virtual, sin la necesidad de tener que reiniciar para buscar «ese archivo» o ejecutar «esa aplicación». Además ahorra tener que estar instalando todo el software de Windows una maquina virtual.

OPCIÓN 1

Teniendo instalado el VirtualBox en Slackware (instalado con el binario .run), se ejecuta con permisos de root la instrucción:

# VBoxManage internalcommands createrawvmdk -filename /home/eduardo/.VirtualBox/win7.vmdk -rawdisk /dev/sda -relative

Con ello se crea una nueva unidad vmdk de virtualbox y se enlaza al disco duro sda. El nombre «win7» es opcional y puede cambiarse. Para que un usuario normal pueda acceder a dicha unidad hay que darle los permisos correctos.

# chmod 666 /home/eduardo/.VirtualBox/win7.vmdk

OPCIÓN 2

En recientes versiones el método anterior me da un error de permisos que por alguna extraña razón (noob) no se presentaba antes, el error consiste en:

Permission problem accessing the file for the medium '/home/eduardo/.VirtualBox/win7.vmdk' (VERR_ACCESS_DENIED)

Lo que significa que como usuario normal no se puede acceder al disco duro creado, solo root puede. Sin embargo se soluciona de la siguiente manera, primero hay que colocar a nuestro usuario en el grupo disk:

# usermod -a -G disk eduardo

Luego cerrar sesión y volver a entrar, y como usuario normal ya se tienen privilegios para crear el disco duro:

$ VBoxManage internalcommands createrawvmdk -filename /home/eduardo/.VirtualBox/win7.vmdk -rawdisk /dev/sda -relative

Eso es todo.

Mi carpeta de usuario es eduardo, tienes que cambiar esa parte por el nombre de la tuya. Ahora en VirtualBox se crea una nueva máquina virtual y cuando pida crear un nuevo disco duro hay que seleccionar el creado anteriormente en el directorio /home/eduardo/.VirtualBox/win7.vmdk.

Nueva maquina virtual

Disco virtual

En esta ventana elegir la opción Usar disco duro existente y dar clic en el botón para explorar el sistema de archivos y elegir el disco duro.

Ver archivos ocultos

Elegir disco de Windows

Crear máquina

Listo, ahora al iniciar la máquina virtual aparecerá el mismo menú de LILO que pide seleccionar el sistema operativo (pues en realidad se está arrancando desde el disco duro). Es importante seleccionar Windows pues ejecutar Slackware desde Slackware, la verdad no se que consecuencias pueda tener pero no creo que sean muy buenas. Lo que si hay que instalar son los GuessAdittions para que reconozca el tamaño de pantalla y la integración del ratón, sin embargo la configuración al bootear desde Windows normalmente no se ve afectada.

Menú de LILO

Y este es el maldito programa que uso en el trabajo que me obliga a tener que reiniciar en Windows para usarlo al procesar algo pesado y ocupar todos los recursos de la máquina, y me obliga a usar la máquina virtual para consultas rápidas y visualización de los mapas ya elaborados. Usar QGIS ha sido una opción viable pero «el trabajo en equipo» me limita por ahora pues los famosos MXD no son estándar, en fin…

Partición de Windows en VBox

Saludos Slackers.