Mi plataforma preferida para usar Linux es la portátil Thinkpad, antes IBM y ahora Lenovo. En particular, prefiero las portátiles series T o X. Además que su hardware no es «genérico barato», y está soportado perfectamente, Lenovo hace un esfuerzo bastante bueno por mantener el UEFI/BIOS al día (excepto cuando no, pero esa es otra historia). Es más, Lenovo provee las imágenes para que sean actualizadas desde Linux. Pero como «Nunca es Fácil», me toca descargar imágenes ISO.
Todos los portátiles Lenovo desde 2016 en adelante permiten
actualizar el BIOS/UEFI desde Linux. Basta tener instalado
fwupd
y reiniciar cuando el sistema te lo indique. Esto
funciona con cualquier portátil que tenga «Secure Boot»
activado. Para cualquier Thinkpad T o X de rango bajo o
medio es una solución completa y cómoda para el usuario.
Esa es una de las razones por las que recomiendo estas
portátiles si quieres correr Linux, en particular Debian
GNU/Linux.
Como «Nunca es Fácil», esa solución no aplica para mis máquinas. Prefiero usar portátiles de rango alto que incluyan sistema de video dual Intel-nVidia, para poder usar CUDA y OpenGL de alto desempeño. El controlador no-libre provisto por nVidia no está firmado digitalmente, de modo que la instalación Linux no puede usar «Secure Boot». Entonces, cuando necesito actualizar el UEFI/BIOS me veo obligado a visitar la página de Lenovo y descargar las imágenes de arranque para mis máquinas particulares.
Para mi máquina principal, un modelo de finales de 2018, el proceso
fue directo: descargar un archivo con extensión .iso
, copiarlo
en un disco USB usando dd
, iniciar la máquina desde ese disco
USB, seguir las instrucciones, reiniciar. Nada especial.
Para mi máquina histórica, un modelo de 2014, fue una aventura.
Descargué el archivo con extensión .iso
, y lo copié en un disco
USB usando dd
. Sin embargo, la máquina era incapaz de iniciar
desde el disco USB, y encima sin emitir mensaje de error.
Sólo los borrachos y los usuarios Windows confían en las
extensiones de los archivos ciegamente. Según file
, el archivo
aparentaba ser una imagen ISO 9660
$ file g4uj41us.iso
g4uj41us.iso: ISO 9660 CD-ROM filesystem data 'G4ETB7US' (bootable)
y si eres borracho, usuario Windows, o tienes poca experiencia con
Linux, eso sería satisfactorio e insistirías probablemente con otros
discos USB, sin éxito. Porque, aunque tenga la extensión .iso
y file
diga que eso es ISO 9660, «todos mienten».
Nunca salgo sin mi imagen de instalación Debian que funciona en USB o
en CD. Si comparamos el resultado de file
$ file debian-10.5.0-amd64-netinst.iso
debian-10.5.0-amd64-netinst.iso: DOS/MBR boot sector; partition 2 : ID=0xef, start-CHS (0x3ff,254,63), end-CHS (0x3ff,254,63), startsector 3840, 5664 sectors
por demás correcto, es evidente que Lenovo está haciendo algo mal.
Una imagen de arranque que pueda funcionar como disco USB y como CDROM debe tener una estructura particular: un sector de arranque DOS/MBR para cuando se use como disco USB; y una imagen ISO-9660 «El Torito» para cuando se use desde una unidad de CD. La imagen provista por Lenovo, quizás es una imagen ISO 9660, pero definitivamente no sirve para un disco USB.
El siguiente paso en la investigación fue usar hexdump
sobre la
imagen provista por Lenovo, buscando pistas sobre su verdadera
estructura. Por supuesto que era una mentira:
$ hd -x g4uj41us.iso | less
(...)
00008230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 | NE|
00008240 52 4f 20 42 55 52 4e 49 4e 47 20 52 4f 4d 20 20 |RO BURNING ROM |
00008250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
(...)
Lo distribuido por Lenovo no es ni un disco de arranque dual USB/CD, ni tampoco una imagen ISO9660: es una imagen de trabajo del software «Nero», que se usa para crear CDs en plataforma Windows. Es decir, a pesar que la página de Lenovo dice que esa imagen sirve en «cualquier sistema operativo», en realidad sólo sirve si tienes Windows, Nero, y vas a preparar un CD.
No todo está perdido. Ese «archivo .iso
» (comillas en el aire, gesticuladas
con sorna), no es más que un envoltorio sobre la verdadera imágen ISO9660
que está más adentro; sólo hace falta extraerla, y no necesito «Nero».
Cualquier distribución Linux moderna incluye la familia de herramientas
genisoimage
que permite manipular imágenes de CD/DVD, para arranque o no.
Entre esas herramientas está geteltorito
que fue escrita precisamente para
lidiar con el escenario en el que una imagen ISO9660 está «escondida»
dentro de un archivo que un proveedor ofrece como ISO pero que no lo es.
$ geteltorito -o imagen.iso g4uj41us.iso
Booting catalog starts at sector: 20
Manufacturer of CD: NERO BURNING ROM
Image architecture: x86
Boot media type is: harddisk
El Torito image starts at sector 27 and has 65536 sector(s) of 512 Bytes
Image has been written to file "imagen.iso".
$ file imagen.iso
imagen.iso: DOS/MBR boot sector; partition 1 : ID=0x4, active, start-CHS (0x0,1,1), end-CHS (0x1f,63,32), startsector 32, 65504 sectors
Una vez copiada imagen.iso
en el disco USB usando dd
, el portátil pudo
arrancar sin problemas, se actualizó el UEFI/BIOS, y la máquina está
al día.