lunes, 23 de diciembre de 2013

Shemer Olufunmilayo contra el diabólico doctor UEFI

Como las lectoras decentes de este blog (valga la redundancia) no toleran la palabra soez, el único modo que se me ocurre de describir al inventor del UEFI sin herir su sensibilidad es esta foto:



Lo cual me recuerda que hace unos meses prometí dedicar una reseña a Deadwood, cosa que espero cumplir antes de fin de año. Pero la película que toca esta semana es un documental de terror.


Las Fuerzas del Mal

Steve Jobs no tuvo bastante con saquear BSD, uno de los grandes sistemas operativos libres, para “inventar” el MacOS; también introdujo EFI, un sistema de arranque que bloquea todos los intentos de instalar otros sistemas operativos en sus jaulas de oro. Entre ellos, por supuesto, el mismo BSD que expolió.
Pero el aprendiz siempre acaba superando al maestro, y el binomio siniestro Bill Gates – Steve Ballmer fue más lejos todavía, creando una versión avanzada de este engendro: UEFI. Tras unos macabros experimentos durante los últimos coletazos de Windows 7, Microsoft presentó al mundo el Secure Boot, su enésimo intento de convencer a la humanidad de que, esta vez sí, en serio, Windows no va a ser el sumidero por el que se cuelen todos los virus del mundo.
Todos los ordenadores con Windows 8 (o alguna de sus variantes, como RT) llevan Secure Boot. Aunque es posible desactivarlo, el resultado puede ser que Windows no vuelva a arrancar. E incluso si funciona, no hay ninguna garantía de que el sistema operativo que instale junto a él consiga iniciarse cuando arranque el ordenador.
Esta deplorable situación ha hecho que posponga demasiado tiempo mi intención de reemplazar mi cochambroso pero fiel netbook. Por cuestiones de trabajo, necesito Windows para acceso remoto. Como el ordenador al que me conecto a través de VPN es otra antigualla con XP, utilizar el teclado en pantalla es imposible, así que una tableta está descartado. Además, utilizo un token usb para la firma digital, por lo que el tema de los puertos es bastante complicado.
Puesto que no me puedo arriesgar a que el ordenador no funcione en el momento crítico, el netbook está igual que cuando lo compré (por no tener, no tiene ni Office). Todo lo demás lo hago con Puppy Linux (concretamente Precise Puppy) desde un pendrive. Cuando termino la sesión, todos los cambios se quedan grabados en la llave, y cuando tengo que trabajar con windows, no hay más que encender sin enchufar mi unidad usb.
Esto es precisamente lo que quería hacer con mi nuevo ordenador, pero con el rollo macabeo de la UEFI y el Secure Boot, no me quedó más remedio que investigar durante meses una solución para compaginar mis obligaciones laborales con la defensa del software libre.
Como en mi tribu somos así de valientes, no se me ocurrió otra cosa que comprarme finalmente el Surface Pro, un ultrabook híbrido (tableta con teclado desmontable) de 11.6 pulgadas. A algunos les extrañará que, ya puestos, me quedase con la versión de 128 Gb en vez de la de 256, pero teniendo en cuenta que no quiero instalar GNU/Linux sino arrancar desde una memoria usb, cuanto más espacio en el disco duro, mayor desperdicio.


Además, el problema de la UEFI es que ahora cada ordenador es hijo de su padre y de su madre. Antiguamente, a un aventurero del software libre podía no funcionarle algún periférico (la primera vez que instalé Linux, no me reconocía la tarjeta de sonido), pero encenderse, se encendía. Ahora, ni por ésas. Yo he conseguido arrancar Linux en el Surface Pro, pero hacer semejante proeza en el Surface Pro 2 es harina de otro costal.

Nunca subestimes el poder de un Jedi

Tendrían ustedes que haberme visto el lunes pasado en el Cortinglés de Goya, calentando la cabeza a todos los dependientes, jefes de planta, el comercial de Microsoft (era su día libre, pero le hicieron venir) y hasta el mismísimo Isidoro Álvarez, porque yo no me iba de allí hasta que me dejasen probar antes de comprar, todo ello ante la perpleja mirada de una clientela poco acostumbrada a ver un salvaje en taparrabos deambulando por el Barrio de Salamanca.
Tras dos horas largas batallando con la configuración, conseguí mi objetivo. Por si alguno se atreve a seguir mis pasos, lo que hay que hacer es:
1. Pasar el stylus por el extremo derecho de la pantalla, hasta que salga la barra lateral.
2. Pulsar en Configuración.
3. Seleccionar Uso General.
4. Bajar hasta la última opción, Inicio Avanzado.
5. En la pantalla azul, Solucionar Problemas.
6. En la siguiente pantalla azul, cambiar firmware de UEFI.
7. Aceptar para reiniciar.
8. Ahora nos saldrá una pantalla negra con letras blancas.
9. Hay dos apartados. En ambos pone Enabled. Debemos pulsar en cada uno de ellos para cambiarlos a Disabled.
10. A continuación, salvamos estos cambios y salimos.
11. Si todo ha ido bien, volveremos a la horrenda y engorrosa interfaz de Windows 8.
12. Enchufamos una unidad USB 3.0 con una versión de Linux adecuada (luego hablaremos de esto).
13. Volvemos a pulsar en el lado derecho hasta que salga la barra lateral, Configuración, Uso General, Inicio Avanzado y Solucionar Problemas.
14. Esta vez, escogemos la opción de arrancar desde un dispositivo USB. (Es posible que esta opción no aparezca. En tales casos, es mejor volver atrás, hasta Configuración, y seleccionar Dispositivos para comprobar que reconoce nuestro pendrive. A veces he tenido que intentarlo en varias ocasiones hasta que sale la opción correcta en la pantalla azul.)
15. Crucemos los dedos. Al reiniciar, veremos el menú Grub desde donde podemos ejecutar una sesión en vivo de GNU/Linux.

(Una vez que hayamos grabado nuestra primera sesión persistente, es más cómodo enchufar el pendrive y reiniciar el ordenador pulsando a la vez el botón de encendido y el de bajar volumen. Al cabo de dos segundos, soltamos el botón de encendido y dejamos pulsado el de bajar volumen, hasta que nos salga el menú Grub. Esto hace que el Surface Pro arranque directamente desde el usb. De lo contrario, cada vez que queramos iniciar Linux, tendremos que iniciar sesión en Windows y seguir los pasos 12 a 15.)

Llegados a este punto, di las gracias a todos los presentes por su colaboración (aunque ya se pueden ustedes imaginar que no tenían ni idea de lo que yo estaba haciendo) y me fui de allí con un Surface Pro bajo el brazo. Y con el Starter Pack, que se paga aparte. Porque de serie no trae ni teclado, ni antivirus, ni Office. El comercial de Microsoft se sorprendió al ver que Linux llevaba un procesador de textos incluido, concretamente LibreOffice. Sospecho que se vengó de mí vendiéndome el único teclado blanco que debían de tener en existencias para un ordenador de color negro. Como descubrí al desembalar mi flamante Surface Pro, ahora tengo el equivalente informático de la portada de un disco de Modern Talking.



Caídos por Dios y por España

Para todas estas operaciones hace falta una distribución de GNU/Linux instalada en una unidad usb. Tradicionalmente, podía ser cualquiera. Desde la aparición de UEFI, casi todas han quedado obsoletas, puesto que sólo pueden arrancar las de 64 bits (la mayoría son de 32 bits, por ejemplo Puppy y sus variantes como Saluki Linux) y la unidad debe estar formateada con fat32, en vez de ext2, el formato nativo de Linux, mucho más eficiente. Esto supone un gravísimo problema para la persistencia de datos, una cuestión crucial para el que suscribe.
Aunque fat32 es el formato más cómodo para discos que vayan a utilizarse en diferentes sistemas operativos (por ejemplo, para pasar archivos de windows a linux, o viceversa), tiene una importante limitación, y es que si bien la partición puede ser de cualquier tamaño, no puede tener ningún archivo mayor de 4 Gb. Por tanto, aunque haya espacio de sobra en su disco duro de 2 Tb, no puede guardar una copia de seguridad de un blu-ray (que por supuesto ha adquirido legalmente) si la unidad usa fat32.
Desgraciadamente, los sistemas con UEFI y Secure Boot sólo reconocen la partición de arranque cuando es fat32, lo que significa que, o bien nos las apañamos con un disco de 4 Gb, o desaprovechamos todo el espacio sobrante.
Si sólo quisiera crear un LiveUSB normal, esto no supondría una gran diferencia, puesto que todo lo que hacemos durante la sesión se graba únicamente en la RAM, no en la memoria usb. Una vez se apaga el ordenador, se pierden todos los cambios y el pendrive se queda limpio, listo para arrancar una nueva sesión como si no hubiera pasado nada.
Pero lo que pretendemos es justo lo contrario: grabar los cambios en el pendrive, de manera que no tengamos que configurar, cada vez que arrancamos Linux, la wifi, el idioma del sistema, los codecs multimedia, los complementos de Firefox, etc.
Evidentemente, si instalamos Linux en el disco duro, todos estos cambios se quedarían guardados. Pero tampoco queremos eso. No podemos borrar Windows, porque lo necesitamos, muy a nuestro pesar, para el trabajo. Y tampoco nos arriesgamos a un arranque dual, que gracias a la perfidia de UEFI y el Secure Boot nos daría demasiados dolores de cabeza.
Lo malo de la persistencia es que cada vez que creamos, modificamos o incluso borramos un archivo dentro de la sesión live, el archivo comprimido que la engloba va creciendo poco a poco. El mero hecho de encender y apagar el ordenador aumenta el tamaño del archivo en uno o dos megas. Si disponemos de muchos gigas, como sucedería con una partición ext2, esto no sería un gran problema. Pero cuando sólo hay 4 Gb como máximo, la máquina no da para mucho. Los programas irán cada vez más lentos, y llegará un momento en que el usb ni siquiera arranque. Lo que no sólo significa que habrá que empezar de cero, sino que habremos perdido todos nuestros documentos, fotos, música, etc.
Tras siete días de pruebas y más pruebas, cada una más frustrante que la anterior, he tenido que descartar mis dos distribuciones favoritas, Puppy y Fedora. La primera, como ya he dicho, sencillamente no arranca en casi todas sus variantes. Fatdog 64, la única versión de Puppy de 64 bits, sí consigue superar la barrera de la UEFI, pero el kernel que tiene es demasiado antiguo y no reconoce la wifi del Surface Pro, con lo cual es inservible.
Fedora 20, por su parte, funciona bastante bien (el entorno de escritorio Gnome 3, que tantas críticas ha suscitado en los PC de sobremesa y portátiles, se adapta a la perfección a los dispositivos móviles), pero con apenas 4 Gb de persistencia, cuando terminé de configurar el sistema a mi gusto, ya había consumido 3.25 de los 4 disponibles, así que, aunque no hiciera nada, con sólo encender y apagar el ordenador veinte veces más, adiós muy buenas.
(De todos modos, estuve a punto de decantarme por Fedora por razones que explicaré más adelante.)
También lo intenté con Opensuse 13.1, pero no hubo manera de activar la persistencia, porque eso requiere, durante el arranque de la sesión en vivo, pulsar F2 para introducir los parámetros correspondientes. Y si el teclado no tiene teclas de función, ya me dirán ustedes cómo lo hago.
(A Dios gracias, Onboard, el teclado en pantalla de Linux, sí incluye teclas de función, pero sólo podemos usarlo cuando ya hemos iniciado la sesión, y esto debe hacerse antes.)

Empieza la batalla

Así que me lié la manta a la cabeza y usé Ubuntu 13.10, la misma distribución de GNU/Linux que tengo en mi maravilloso Sable Touch. De hecho, es la que había creado para probar el ordenador antes de comprarlo, porque hasta entonces Puppy me bastaba y me sobraba para crear unidades persistentes.
Antes de continuar, para los que prefieran otras variantes de Ubuntu, les recomiendo que usen la versión estándar en un Surface Pro. En mis experimentos, Kubuntu va más lento que el caballo del malo. Xubuntu es muy ligero (algo vital en un sistema con persistencia), pero su entorno de escritorio es poco apropiado para una tableta híbrida, y algunos problemas con la internacionalización (como la falta de eñes) me hicieron desistir, por más que en mi portátil Acer, use Xfce en Fedora 19. Unity, por contra, es sorprendentemente veloz (para ser un escritorio basado en Gnome) y se nota que está pensado para dispositivos móviles. Además, las aplicaciones de KDE funcionan perfectamente, y sin la lentitud de Kubuntu (Okular, por ejemplo, lee los pdf mucho más rápido que Evince).

Importante: Todas las operaciones que haremos a continuación requieren, bien un sistema con Ubuntu instalado (como mi ordenador de sobremesa), o bien arrancar una sesión live de Ubuntu desde otro ordenador. El Surface Pro no lo tocaremos hasta dentro de un buen rato, así que paciencia.

Hay varias maneras de crear un LiveUSB persistente con Ubuntu. La más directa es Unetbootin, un programa que copia la imagen de nuestra distribución favorita a un usb, pero que en el caso de Ubuntu y sus derivados es capaz de crear también un sistema persistente de hasta 10 Gb, muy por debajo de la capacidad de los 64 Gb (57.65, en realidad) que hay en mi unidad, pero más que suficientes para mis propósitos.
La otra opción es usar el Creador de Discos de Arranque que viene en cualquier LiveCD de Ubuntu, marcando el espacio que queramos para la persistencia.
Lo malo es que ambas aplicaciones tienen un error que sólo crea un archivo persistente cuando se arranca desde BIOS. En el caso de UEFI, aunque hayamos seleccionado la opción de persistencia durante la creación de nuestro LiveUSB, se perderán los cambios al apagar.
Yo no me di cuenta de esto antes de comprarme el Surface Pro porque todos los PCs que tengo aparte de él usan BIOS, así que cuando ejecuté un LiveUSB persistente con Unetbootin en mi portátil Acer, todo funcionaba a la perfección, y no tuve motivos para sospechar que algo iba mal hasta que enchufé el nuevo ordenador.
Después de darle muchas vueltas, descubrí que, para subsanar este defecto, basta con editar el archivo grub.cfg (dentro del directorio boot/grub/ del LiveUSB) y añadir la palabra persistent en la siguiente línea:

file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --

Para que quede así:

file=/cdrom/preseed/ubuntu.seed boot=casper persistent quiet splash --

Con esto, ya hemos conseguido la persistencia. Pero 9999 Mb, aunque nos permitan ir mucho más holgados que en Fedora, se nos quedarán cortos rápidamente, en cuanto actualicemos el sistema e instalemos programas indispensables, o simplemente encendamos y apaguemos el ordenador, abramos archivos, los borremos, etc.
Por suerte, hay una solución, si bien sólo para Ubuntu. Por más que he buscado en internet, no he encontrado un método equivalente para Fedora.

ADVERTENCIA: Gparted puede destrozar nuestro disco duro en cinco segundos si no sabemos lo que hacemos. Así que lea atentamente estas instrucciones y no pulse ningún botón hasta estar seguro de que está trabajando con la unidad usb en vez de con su ordenador.


1. Con Gparted, insertamos el usb donde vamos a crear nuestro LiveUSB.
2. Seleccionamos la unidad usb. (Mucho cuidado con esto, o nos podemos cargar el disco duro del ordenador.)
3. Eliminamos todas las particiones que haya en el usb.
4. Creamos una tabla de particiones. (Esto es para más seguridad en el borrado; en realidad, cuando creemos el disco de arranque, se creará igualmente otra tabla de particiones.)
5. Creamos una partición de 1024 Mb en formato Fat32. Aquí es donde se instalará Ubuntu.
6. Creamos una segunda partición, en formato ext2, con la etiqueta casper-rw. Aquí es donde se descomprimirá el sistema una vez se cree la persistencia en nuestra primera sesión. Podemos darle la extensión que queramos, pero recuerda que cuanto mayor sea, más rápido irá todo. Yo le doy 31744 Mb. Con 30 Gb de persistencia, podemos arrancar GNU/Linux las veces que queramos.
7. Creamos una partición con el espacio que nos sobre (en mi caso, 25 Gb), también en formato ext2, y le damos la etiqueta home-rw. Ésta será nuestra partición home. Esto tiene varias ventajas. Por un lado, mayor seguridad (siempre es bueno tener home en una partición separada del resto del equipo, incluso si GNU/Linux está instalado en el disco duro). Por otro, el impacto en la persistencia es mucho menor, ya que ahora tenemos dos archivos distintos. Y en caso de que el pendrive deje de funcionar (por razones que explicaremos de inmediato), siempre podemos recuperar los archivos de la partición home sin problemas.
 
Cuando le demos al botón de aplicar cambios, tendremos que armarnos de paciencia, porque formatear particiones con ext2 lleva su tiempo. Podemos aprovechar este cuarto de hora para leer el “manual” del Surface Pro, donde se nos explica, entre otras cosas, que no se debe utilizar el ordenador cuando montemos en bicicleta. (Verídico, como todo lo que se publica en este blog.)

Cuando hayamos terminado de crear las tres particiones, sacamos el pendrive, lo volvemos a meter y ejecutamos el Creador de Discos de Arranque. Seleccionamos la imagen que queremos grabar (en este caso, ubuntu-13.10-desktop-amd64.iso) y creamos un LiveUSB en la partición Fat32.


En cuanto termine (esta operación es bastante más rápida que la anterior), tenemos que abrir la partición Fat32 en el explorador de archivos Nautilus y modificar grub.cfg como hemos explicado más arriba, o no tendremos persistencia.
Por razones que desconozco, el creador de discos de arranque crea ocasionalmente el directorio syslinux, que es lo correcto, pero las más de las veces crea el directorio isolinux y el archivo isolinux.cfg. Es muy recomendable renombrar ambos a syslinux y syslinux.cfg, respectivamente, y cambiar el contenido de syslinux por el siguiente:

default persistent
label persistent
say Booting an Ubuntu persistent session...
kernel /casper/vmlinuz.efi
append file=/cdrom/preseed/ubuntu.seed boot=casper persistent initrd=/casper/initrd.lz quiet splash noprompt--

Esto es como un parto, ¿verdad? Ánimo, que ya queda poco.

¡SHORYUKEN!

Insertamos el LiveUSB recién creado en el (único, por desgracia) puerto USB Surface Pro.
Con el ordenador enchufado a la corriente (esto es MUY importante, por razones que explicaremos de inmediato), encendemos pulsando el botón de bajar volumen a la vez que el de encendido, y manteniendo pulsado el de bajar volumen hasta que nos salga el menú Grub.
Seleccionamos la primera opción (podríamos haberle cambiado el nombre cuando le añadimos persistent al archivo grub.cfg, pero cuanto menos toquemos, mejor).
Arrancamos nuestra primera sesión live.
Pulsamos en el icono de wifi e introducimos la clave.
Cuando nos aparezca un aviso diciendo que ya estamos conectados, apagamos.
Volvemos a arrancar el ordenador con encendido + bajar volumen (insistimos, siempre enchufado a la corriente).
Al principio, nos dirá que no estamos conectados, pero si esperamos unos segundos, veremos que tenemos conexión wifi...

¡PRUEBA SUPERADA!

Por fin podemos cambiar el teclado a español, actualizar el sistema, instalar otros programas, etc., hasta que Ubuntu 13.10 se quede a nuestro gusto. Cada vez que apaguemos el ordenador, los cambios se guardarán en el usb y, cuando encendamos windows, todo estará como siempre.

Desde hoy, sólo beberé sano y rico aceite de motor

Con Ubuntu 13.10 en el Surface Pro, funciona casi todo: internet, la pantalla táctil, el vídeo en alta definición... Lamentablemente, habrán notado que he dicho “casi.”
El cambio de orientación de la pantalla (de horizontal a vertical) no es automático. Requiere meterse en Configuración > Monitores, pero lo desaconsejo. Ni el stylus, ni el ratón ni el dedo funcionan correctamente cuando esto se modifica. Así que es mejor dejar orientación de la pantalla como está. De todos modos, Okular puede modificar la visualización de los documentos en vertical cuando leamos un ebook, así que tampoco es tan grave.
Me preocupa mucho más que, cuando encendemos Ubuntu sin estar enchufado el Surface Pro, consigue arrancar, pero se bloquea, y la próxima vez que lo encendamos no se enciende de ninguna manera. Ni la siguiente, ni la de más allá. No nos queda más remedio que reinstalarlo todo, repitiendo el fatídico proceso descrito más arriba.
Aunque no he encontrado en internet ninguna solución a este problema, sospecho que está relacionado con la incapacidad de Ubuntu de arrancar “en frío” (es decir, estando apagado) cuando el Surface Pro está desenchufado. Si se trata de una instalación en el disco duro, no hay problema (habrá que esperar hasta disponer de un enchufe, pero nada más). Sin embargo, cuando se trata de un LiveUSB persistente, he sido incapaz, por más veces que lo he intentado, de arrancarlo de nuevo. (Afortunadamente, con una partición home dedicada, los archivos personales son fácilmente recuperables.)
Misteriosamente, si arrancamos con el ordenador enchufado y luego lo desenchufamos, parece que no pasa nada. (Todavía tengo que investigar más detenidamente este asunto, pero por ahí van los tiros.) Es el momento inicial donde resulta imprescindible que el cacharro esté conectado a la corriente.
Naturalmente, esto reduce considerablemente la utilidad del Surface Pro como dispositivo móvil. Aunque podría remediar este problema haciendo una instalación en el disco duro, no me atrevo a dejar Windows inservible. (Más inservible de lo que es con Windows 8, quiero decir.) Confío en que la próxima versión de Ubuntu, que sale en abril, solucione este grave inconveniente.
Y hay motivos para la esperanza. Con Fedora 20, es posible arrancar Linux sin estar enchufado. Teniendo en cuenta que esta distribución usa un kernel más moderno que Ubuntu, es probable que Ubuntu 14.04 ya funcione correctamente. Al fin y al cabo, la versión 13.04, que salió en abril de 2013, no tenía un kernel lo bastante avanzado para reconocer la wifi del Surface Pro, lo que demuestra que los adelantos en la compatibilidad de GNU/Linux con los dispositivos más modernos son cada vez más rápidos. Si no fuera porque en Fedora no he encontrado un modo de crear un LiveUSB con suficiente persistencia, estaría usándolo ahora mismo.

Oración, despedida y cierre

No necesito recordar a las fans de Hugh Jackman qué le hacía Halle Berry en Operación Swordfish mientras se colaba en los servidores de la NSA con los pantalones bajados.
Ahora, repasen esta crónica de mis miserias informáticas y pregúntense cuál de las dos es un retrato más fidedigno de la vida de un hácker.
El Rostro de Muerte les desea feliz Navidad y próspero año nuevo.

No hay comentarios:

Publicar un comentario