He creado esta y otras guías para documentar mi experiencia instalando libreboot en diferentes equipos. Encontré buenas fuentes pero la información está dispersa (en algunos casos desfasada) y creo que puedo aportar cierta claridad al respecto. He creado esta versión extendida donde explico detalles que he ido aprendiendo y otra versión sintetizada para recurrir cuando ya se tiene cierta experiencia.
Básicamente existen dos formas de instalar libreboot en un Dell Optiplex 3050 Micro . Una es mediante** flasheo interno** y otra es mediante** flasheo externo**.
Para el** flasheo interno** solo necesitamos hacer un pequeño ajuste en el propio equipo y tener instalado un sistema operativo linux en él (en mi caso ubuntu 24.04). Es recomendable que si haces esto en un lugar propenso a cortes eléctricos el equipo esté conectado a una fuente de energía ininterrumpida (SAI/UPS), para que no exista riesgo a interrumpir el proceso de escritura de la bios.
Para el **flasheo externo **necesitamos otro equipo (en mi caso un ordenador portátil con ubuntu 22.04) y un dispositivo "puente" (un programador flash SPI) que nos ayude a programar el chip en cuestión. En este caso he optado por una Raspberry Pico 1 (RP2040) con pines pre-soldados (suele costar menos de 10€ en este momento). Me gusta la Pico no solo por ser económica, sino porque además ofrece una tensión máxima acorde a este tipo de chips (3,3v) y eso evita posibles problemas de voltaje. Estas suelen venir con su cable usb pero también necesitaremos una pinza SOIC8 (para los ocho pines que tiene el chip que vamos a programar) y seis cables dupont de menos de 20cm (recomiendo de 10cm) de diferentes colores.
En resumen, para el flasheo externo necesitamos: Otro ordenador, programador flash SPI, pinza SOIC8 y 6 cables dupont (de menos de 20cm y diferentes colores).
Antes de seguir quiero dejar un par de apuntes sobre estos materiales. Por un lado es recomendable que la pinza sea de cierta calidad, yo escogí una de la marca Pomona (5250) pero es algo cara dependiendo de donde vivas debido a los costes de importación. No hay problema en usar cualquier otra pero es recomendable buscar referencias y opiniones antes. Sobre los cables dupont, es importante que tengan una longitud corta debido a la baja tensión que se va a manejar. Hay casos en los que ignorar esto provocó fallos de lectura del chip y aunque existen soluciones alternativas si se da el caso, es un dolor de cabeza más en un proceso que debería ser sencillo.
- Pasos comunes -
Como intuirás, para este equipo, lo más sencillo es usar el método de flasheo interno pero está bien conocer y estar preparado para hacer un flasheo externo en caso de que ocurra un error grave durante el proceso (cosa que no debe de pasar si tenemos en cuenta lo comentado más arriba y seguimos la guía al detalle).
Así pues, manos a la obra.** **Los siguientes pasos son comunes para ambos métodos y me atrevería a decir que para cualquier equipo. Debes hacerlo en el equipo desde donde vas a realizar el proceso. Dejo un pequeño índice antes de continuar:
- Instalar git (si no se tiene instalado)
- Clonar lbmk
- Instalar dependencias
- Construir flashprog
- Compilar rom o descargar, verificar y construir una rom pre-compilada
Para instalar git y configurar un usuario local (requisito obligatorio) debemos hacer lo siguiente (si no quieres crear una cuenta de usuario real puedes usar una ficticia como se muestra):
$ sudo apt update
$ sudo apt install git
$ git config --global user.name "Johnn Doe"
$ git config --global user.email "johnndoe@example.com"
Posteriormente clonamos el repositorio del desarrollador principal de libreboot.
$ git clone https://codeberg.org/libreboot/lbmk
Una vez clonado, accedemos a la carpeta.
$ cd lbmk
E **instalamos las dependencias **necesarias según nuestro sistema operativo. Puedes encontrar los archivos de configuración en/lbmk/config/dependenciespara elegir el que necesites. En el caso de ubuntu aparecen dos versiones, una general y otra para la versión 2404, puedes instalar ambas si lo crees necesario. Dejo un comando previo para conocer que versión del sistema operativo tenemos instalada.
$ cat /etc/os-release
$ sudo ./mk dependencies ubuntu2404
Es el momento de construir la herramienta de flasheo:
$ ./mk -b flashprog
Una vez llegados a este punto tenemos dos opciones, compilar nosotros mismos la rom (A) o** usar una rom pre-compilada** (B, más rápido):
(A) Compilando puedes personalizar diferentes aspectos (por ejemplo, puedes cambiar la configuración de grub, como podría ser poner una imagen de fondo personalizada cuando inicie. /lbmk/config/data/grub/background), pero, por mi experiencia, al compilar también pueden aparecer algunos errores. Si te ocurre alguno, siempre puedes intentar solucionarlos manualmente, acudir al IRC de libreboot o usar una rom pre-compilada como se indica.
En cualquier caso el proceso tarda varios minutos (15-20 en mi caso) pero antes vamos a añadir un comando para acelerar el proceso de compilación.
Por defecto, el proceso de compilación utiliza un subproceso, pero dependiendo de la cantidad de núcleos que tenga nuestra cpu podemos incrementarlos . En mi caso:
$ export XBMK_THREADS=4
La compilación se ejecuta como sigue:
$ ./mk -b coreboot dell3050micro_vfsp_16mb
Si todo ha ido bien tendrás diferentes versiones de la rom en /lbmk/bin/dell3050micro_vfsp_16mb.
(B) Para usar una imagen pre-compilada podemos acudir a mirrors.mit.edu/libreboot/stable (hay otros mirrors en libreboot.org/download.html, el del MIT es solo uno de ellos). Allí podemos encontrar todas las roms de libreboot pre-compiladas, para todos los equipos, tanto las versiones más antiguas como las más recientes. A día de hoy la más actual es la 25.06 (mirrors.mit.edu/libreboot/stable/25.06/roms). Vamos a descargar los tres archivos que veremos para nuestro equipo (.xz, .xz.sha512, .xz.sig) ya que vamos a verificar las firmas y la integridad de la rom que vamos a usar. Es un paso adicional que por seguridad me gusta hacer aunque no sea estrictamente necesario.
Para ello primero descargaremos la firma del desarrollador principal de libreboot en libreboot.org/lbkey.asc y la importamos.
$ gpg --import lbkey.asc
Una vez importada verificamos la autenticidad de la rom pre-compilada mediante la firma digital.
$ gpg --verify libreboot-25.06_dell3050micro_vfsp_16mb.tar.xz.sig libreboot- 25.06_dell3050micro_vfsp_16mb.tar.xz
Debe aparecer que la firma es correcta aunque “no esté certificada por una firma de confianza”. Nos fijamos en el firgerprint al final del mensaje y comprobamos que coincida con el que aparece en la web de descargas de libreboot (libreboot.org/download.html).
Verificamos el checksum (integridad mediante sha512) de la rom pre-compilada.
$ sha512sum -c libreboot-25.06_dell3050micro_vfsp_16mb.tar.xz.sha512
Debe aparecer que coinciden (libreboot-25.06_dell3050micro_vfsp_16mb.tar.xz: La suma coincide).
Pasamos finalmente a la construcción del firmware, para eso hay que modificar la rom pre-compilada mediante el siguiente comando:
$ ./mk inject libreboot-25.06_dell3050micro_vfsp_16mb.tar.xz
En este proceso ocurren muchas cosas interesantes. Por un lado, ocurre la extracción, modificación e inserción del software propietario necesario para que el equipo funcione correctamente, hablamos del software del fabricante exclusivamente necesario (los famosos blobs). En este proceso se ejecuta me_cleaner para reducir al mínimo el impacto del Intel Management Engine (ME, necesario para que estos equipos más modernos arranquen). Me_cleaner podrá eliminar por completo el ME en equipos más antiguos (X60, X200..) pero en equipos más modernos lo que hace es minimizar su función en el arranque, para desactivarlo posteriormente una vez que el equipo ha iniciado. Si te interesa esta parte puedes profundizar sobre me_cleaner y ver exactamente que es lo que deja hacer al ME dependiendo de la versión (funciones como ROMP, BUP, RBE, Kernel, Syslib..).
Otra cosa interesante que ocurre en este proceso es la aleatorización de la MAC de la tarjeta de red del equipo. Por defecto, en versiones actuales, se hace automáticamente pero se puede personalizar si se requiere (por ejemplo así, $ ./mk inject libreboot-25.06_dell3050micro_vfsp_16mb.tar.xz setmac 11:22:33:44:55:66).
Una vez construido nuestro nuevo firmware solo queda extraerlo.
$ tar xvf libreboot-25.06_dell3050micro_vfsp_16mb.tar.xz
Comprobamos que tenemos las diferentes versiones en la ruta /lbmk/bin/dell3050micro_vfsp_16mb.
- Flasheo Interno -
En caso de no estar actualizada, es recomendable actualizar la bios del fabricante a la última versión (www.dell.com/support/product-details/es-es/product/optiplex-3050-micro/drivers).
Tener la bios actualizada asegura que el equipo sea lo más estable y seguro posible antes de realizar la instalación de libreboot.
En este punto, apagamos y desconectamos el equipo. Debemos abrir la carcasa y localizar al lado de la pila un jumper azul. Estando por defecto en el centro, debemos colocarlo en la parte más cercana al conector del disco duro.

Arrancamos el equipo y nos aparecerá un mensaje de advertencia. Entramos a la bios y nos aseguramos de que “secure boot” esté deshabilitado. Aplicamos y salimos.
Aparecerá otro mensaje de advertencia y arrancará el sistema operativo.
Ahora vamos a empezar a utilizar la herramienta flashprog, primero para hacer una copia de seguridad de la bios instalada y posteriormente para flashear el chip de la bios.
$ cd lbmk/elf/flashprog
Escribimos lo siguiente para leer el chip y hacer una copia de seguridad de la bios instalada, puedes usar una ruta distinta si lo deseas.
$ sudo ./flashprog -p internal -r ../../../stock1.rom
Hacemos una segunda copia.
$ sudo ./flashprog -p internal -r ../../../stock2.rom
Y las comparamos para asegurarnos de que todo fue correctamente y así tener una buena copia de seguridad.
$ diff ../../../stock1.rom ../../../stock2.rom
(también se puede usar $ sha512sum ../../../stock*.rom para comparar los hashes de ambos archivos y ver si coinciden).
Si no obtienes ningún resultado es indicativo de que ambas copias son iguales y todo fue correctamente. Si no es así, simplemente crea más copias y compáralas hasta que coincidan. El siguiente paso es guardarlas en una unidad externa para tenerlas disponibles por si en algún momento quieres revertir este proceso.
Ahora llega el momento de la verdad, vamos a flashear el chip e instalar la bios que tenemos preparada. Si tienes un SAI/UPS, es buena idea tener conectado el equipo a él para que el proceso no se vea interrumpido por un corte eléctrico. En cualquier caso, si algo sale muy mal siempre existe la posibilidad de intentar solucionarlo haciendo un flasheo externo, que se explicará más adelante.
Tenemos que escoger que versión de la rom que hemos construido queremos instalar. Todas las versiones se encuentran localizadas en /lbmk/bin/dell3050micro_vfsp_16mb. En mi caso he escogido una rom con arranque seagrub en modo gráfico y teclado español (seagrub combina un tipo de arranque en el que carga tanto seabios como grub, te recomiendo investigar las distintas opciones para escoger la que mejor se adapte a tus necesidades y sobretodo a los sistemas operativos que quieras usar). La instrucción quedaría como sigue:
$ sudo ./flashprog -p internal -w ../../bin/dell3050micro_vfsp_16mb/seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb_esqwerty.rom
Después de todo el proceso de lectura, borrado, escritura, verificación... debe aparecerte VERIFIED. Si no es así puedes intentarlo de nuevo.
Si todo ha ido bien, lo que debes hacer ahora es APAGAR EL EQUIPO DIRECTAMENTE DESDE EL CABLE DE ALIMENTACIÓN, nunca desde el sistema operativo. Una vez que lo vuelvas a conectar arrancará con la bios de libreboot.
- Flasheo Externo -
Como se mencionó en la primera parte de esta guía, para el flasheo externo vamos a usar un programador flash SPI (una Raspberry Pico RP2040 en mi caso) y preferiblemente un equipo conectado a un SAI/UPS o un ordenador portátil con suficiente batería por si hubiese algún corte eléctrico general. En este equipo, habría que hacer todos los pasos comunes explicados anteriormente para tener construida la rom de libreboot y a partir de este momento vamos a preparar el firmware para la Raspberry Pico, para flashearla y que nos sirva de “puente”. Este proceso lleva unos minutos ya que compila el firmware para todos los dispositivos compatibles, no solo para la Pico.
$ cd lbmk
$ export XBMK_THREADS=4
$ ./mk -b pico-serprog
Ahora debemos conectar la Pico al equipo mediante el cable usb pero antes de conectarla debemos tener pulsado el pequeño botón blanco que trae. Esto hará que arranque como una unidad de almacenamiento externa y el equipo al que la conectes la detecte como tal.
En la ruta /lbmk/bin/serprog encontraremos todos los firmwares que acabamos de construir. Allí tenemos que buscar (en nuestro caso serprog_pico.uf2), seleccionar, copiar y pegar este archivo en la unidad de almacenamiento creada por la Raspberry Pico. Al hacer esto el firmware se instala automáticamente y el dispositivo dejará de funcionar como unidad de almacenamiento externa.
En este punto desconectamos la Pico físicamente. Abrimos el equipo a flashear, quitamos la pila (para que no exista otro voltaje del que le vamos a dar) y localizamos el chip de la bios, que está junto al conector wlan. Debemos fijarnos en una pequeña hendidura, que es la que marca el pin uno. Debemos además apuntar el identificador del chip (el código que trae impreso). Es recomendable verificar el chip en la web del fabricante para ver que la** distribución de los pines coincide con el de nuestro diagrama** (segunda imagen más abajo), la capacidad es la que se espera y el voltaje es correcto. La Pico 1 soporta una tensión máxima de 3,3v, por eso es tan segura frente a otros spi que pueden usar 5v.

Ahora conectamos la pinza soick 8 a la Raspberry Pico mediante los cables dupont siguiendo el siguiente diagrama.

Vale la pena** repasar varias veces el esquema y las conexiones** antes de conectar la pinza al chip. Si mandamos tensión a un pin que no debemos podríamos dañarlo.
Conectamos la pinza al chip. Para ello, fijándonos muy bien, ajustamos primero un lado y luego el otro de modo que quede bien fija. Se moverá un poco si lo fuerzas pero no debe saltar.


Con mucho cuidado de no mover la pinza, conectamos la Pico al equipo mediante el cable usb.
Una vez conectada, para localizar e identificar la Pico en nuestro sistema, debemos ejecutar
$ sudo dmesg
En la parte final de lo que nos muestra, debe aparecer un identificador tipo ttyACM*, donde el asterisco es un número (en mi caso ttyACM3). Debemos recordar este identificador para apuntar a él en los siguientes pasos.
Lo siguiente que vamos a hacer es utilizar la herramienta flashprog, primero para hacer una copia de seguridad de la bios instalada y posteriormente para flashear el chip de la bios. Pero antes debemos posicionamos en la ruta correspondiente.
$ cd lbmk/elf/flashprog
Escribimos lo siguiente para leer el chip y hacer una copia de seguridad de la bios instalada (si no se concreta ninguna ruta se va a guardar por defecto en la carpeta desde donde estamos trabajando).
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM3,spispeed=16M -r sotck1.rom
Aquí pueden surgir un par de problemas. Por un lado, que la pinza no esté bien conectada al chip y no pueda leerlo correctamente. Por otro, que no identifique correctamente el chip y tengas que indicar el correcto (a mi no me surgieron estos problemas pero si otro menos habitual que comentaré al final).
Si ocurre lo primero, debemos desconectar el cable usb de la Pico y verificar las conexiones de nuevo.
Si ocurre lo segundo, debemos elegir el identificador de chip más similar al nuestro (por eso era importante apuntar el identificador de nuestro chip) y añadirlo al final de la instrucción. Por ejemplo, si nos da la opción de varios identificadores como "ejemploA", "ejemploB" o "ejemploC" y el más parecido al nuestro es "ejemploB", deberíamos añadirlo de la siguiente forma (incluye las comillas).
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM3,spispeed=16M -c "ejemploB" -r sotck1.rom
Una vez leído el chip y realizada la copia de seguridad, hacemos otra.
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM3,spispeed=16M -r sotck2.rom
Y las comparamos.
$ diff stock1.rom stock2.rom
(también se puede usar $ sha512sum stock*.rom para comparar los hashes de ambos archivos y ver si coinciden).
Si no obtienes ningún resultado es indicativo de que ambas copias son iguales y todo fue correctamente. Si no es así, simplemente crea más copias y compáralas hasta que coincidan.
Más adelante puedes guardarlas en un lugar seguro (una unidad externa, por ejemplo) para tenerlas disponibles por si en algún momento quieres revertir este proceso e instalar la rom original.
Llegamos al momento de la verdad, vamos a flashear el chip e instalar la bios que tenemos preparada.
Tenemos que escoger que versión de la rom que hemos construido queremos instalar. Todas las versiones se encuentran en /lbmk/bin/dell3050micro_vfsp_16mb y en mi caso he escogido una rom con arranque seagrub en modo gráfico y teclado español (seagrub combina un tipo de arranque en el que carga tanto seabios como grub, te recomiendo investigar las distintas opciones para escoger la que mejor se adapte a tus necesidades y sobre todo a los sistemas operativos que vayas a usar).
La instrucción quedaría como sigue:
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM3,spispeed=16M -w ../../bin/dell3050micro_vfsp_16mb/seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb_esqwerty.rom
En caso de que debamos determinar el chip porque en la lectura nos había mostrado varios posibles, al igual que entonces, debemos añadir el identificador más similar, tal como se usa en la lectura. El comando en ese caso quedaría así
$ sudo ./flashprog -p serprog:dev=/dev/ttyACM3,spispeed=16M -c "ejemploB" -w ../../bin/dell3050micro_vfsp_16mb/seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb_esqwerty.rom
Después de todo el proceso de lectura, borrado, escritura, verificación… tras unos minutos, debe aparecerte VERIFIED. Si no es así puedes intentarlo de nuevo.
- Errores, Upgrade y Referencias -
Error libpci3.8
La primera vez, me surgió un pequeño error de fácil solución. Esto ocurrió al intentar la escritura en el chip mediante flasheo externo.
Al ejecutar la última instrucción para escribir en el chip, me apareció un extraño error relacionado con mi versión de libpci.
`LIBPCI_3.8' not found
./flashprog: /lib/x86_64-linux-gnu/libpci.so.3: version `LIBPCI_3.8' not found (required by ./flashprog)
Me pedía, como mínimo, tener instalada la versión 3.8 y yo tenía instalada la 3.7. Intenté actualizar desde los repositorios de ubuntu pero no fue posible, así que tuve que hacer la instalación manualmente buscando la web del código fuente y compilándolo (mj.ucw.cz/sw/pciutils).
Error al compilar
Una de las primeras veces, tuve un error al compilar que no voy a mostrar porque ya está solucionado. Solo quería dejar este apunte para agradecer, una vez más, a la gente del chat IRC de Libreboot, que amablemente me ayudaron a identificar la línea de código concreta para solucionarlo.
Upgrade Dell Optiplex 3050 Micro
Aunque este equipo suele venir con procesadores intel serie 6 y 7, gracias a libreboot, este minipc es compatible con procesadores intel serie 9 de cuatro núcleos. Pude probarlo con una cpu intel i3 9100t y 32 gb de RAM ddr4, dando un muy buen rendimiento con bajo consumo.
Como referencia, este minipc lo adquirí por unos 60€ de segunda mano (venía con un i5 serie 6, 8gb de ram y ssd de 256gb) y esa cpu por unos 25€.
Referencias
libreboot.org/docs/install/spi.html
www.youtube.com/watch?v=w5ZjmF4JdMo
blog.yuuta.moe/2025/09/29/x230-libreboot
p2502.net/posts/libreboot-x230
www.youtube.com/watch?v=V9-zq4AgsvA
#libreboot #linux #seagrub #seabios #flashprog #spyware #me_cleaner #minipc #tutorial #freesoftware #bitcoinnode
