- Quickemu es un wrapper para QEMU que, al elegir el sistema operativo que se quiere ejecutar, gestiona automáticamente la configuración necesaria para crear una máquina virtual, permitiendo crear y ejecutar rápidamente VMs de Windows, macOS y Linux
quickget descarga automáticamente la imagen de SO upstream del sistema operativo deseado y crea el archivo de configuración de la VM, mientras que quickemu detecta el hardware y ejecuta la VM con una configuración adecuada para la computadora
- El objetivo inicial era probar rápidamente distribuciones de Linux; las VMs y su configuración pueden ubicarse donde se quiera, como en un almacenamiento USB externo o en el directorio home, y no se requieren privilegios elevados para ejecutarlas
- Actualmente soporta casi 1000 ediciones de sistemas operativos, incluidos macOS, Windows, la mayoría de BSD, FreeDOS, Haiku, KolibriOS, OpenIndiana y ReactOS
- Funciona en hosts Linux y macOS, y ofrece funciones necesarias para usar VMs como SPICE, uso compartido de archivos, QEMU Guest Agent, VirGL, passthrough USB, reenvío de puertos, audio y arranque EFI y Legacy BIOS
Qué hace Quickemu
- Quickemu es un wrapper sobre QEMU que gestiona automáticamente la configuración necesaria al crear máquinas virtuales
- El usuario solo tiene que elegir el sistema operativo que quiere ejecutar, sin necesidad de especificar manualmente muchas opciones de configuración
- Sus herramientas principales son dos
quickget: descarga automáticamente el SO upstream deseado y genera el archivo de configuración de la VM
quickemu: enumera el hardware del host y luego ejecuta la máquina virtual con una configuración optimizada para esa computadora
Punto de partida del proyecto y alcance actual
- El objetivo inicial era permitir probar distribuciones de Linux rápidamente
- Las VMs y su configuración pueden guardarse en cualquier ubicación, como un almacenamiento USB externo o el directorio home
- Para ejecutar las máquinas virtuales no se requieren privilegios elevados
- El soporte actual se expandió más allá de las distribuciones Linux hacia macOS, Windows, la mayoría de BSD y sistemas operativos no Linux
- Algunos ejemplos soportados son FreeDOS, Haiku, KolibriOS, OpenIndiana y ReactOS
Sistemas operativos y hosts soportados
- Como host, soporta Linux y macOS
- Los sistemas operativos invitados incluyen
- macOS Sequoia, Sonoma, Ventura, Monterey, Big Sur, Catalina, Mojave
- Windows 10 y 11, incluido TPM 2.0
- Windows Server 2022, 2019, 2016
- Ubuntu y todos los flavours oficiales de Ubuntu
- La mayoría de BSD y varios sistemas operativos no Linux
- Soporta invitados ARM64, por lo que puede ejecutar VMs aarch64
- En hosts ARM se ejecutan de forma nativa
- En hosts x86_64 se ejecutan mediante emulación
- La cantidad de ediciones de sistemas operativos soportadas llega a casi 1000
Funciones de VM
- Ofrece soporte completo de SPICE, incluido el uso compartido del portapapeles entre host e invitado
- Soporta varios métodos de uso compartido de archivos según el sistema operativo invitado
- VirtIO-webdavd: uso compartido de archivos para invitados Linux y Windows
- VirtIO-9p: uso compartido de archivos para invitados Linux y macOS
- Samba: uso compartido de archivos para invitados Linux, macOS y Windows; requiere que
smbd esté instalado en el host
- Soporta QEMU Guest Agent, lo que permite acceder a un agente a nivel de sistema mediante comandos QMP estándar
- En funciones gráficas y de dispositivos, soporta aceleración VirGL, passthrough de dispositivos USB y passthrough de tarjetas inteligentes
- También incluye funciones de red y entrada/salida
- Reenvío automático de puertos SSH hacia el invitado
- Reenvío de puertos de red
- Audio full duplex
- Soporte para braille
- Arranque EFI con o sin SecureBoot
- Arranque Legacy BIOS
Flujo de inicio rápido
- Después de instalar Quickemu, se crea y ejecuta una VM en dos pasos
- Con
quickget, se descarga una imagen ISO y se crea el archivo de configuración de la VM
quickget nixos unstable minimal
- Con
quickemu, se inicia la VM usando el archivo de configuración creado por quickget
quickemu --vm nixos-unstable-minimal.conf
- Si se ejecuta
quickget sin argumentos, se puede ver la lista de todos los sistemas operativos soportados
Documentación y referencias
- La wiki cubre cómo empezar, configuración avanzada y uso
1 comentarios
Comentarios de Hacker News
Siempre lo usaba cuando antes administraba muchos hosts de VM distintos y VMs locales
Hay que conocer al menos algo de la terminología básica de las VM, pero recuerda mucho a esas GUI de la vieja escuela repletas de funciones y potencia
Si tus necesidades son simples o tienes menos experiencia con VM, Gnome Boxes usa el mismo backend pero ofrece una GUI más limpia. Al ser más simple, tiene menos flexibilidad, pero está bueno que después puedas abrir una VM de Gnome Boxes en virt-manager si necesitas ajustar una configuración que Boxes no expone
Si lo ejecutas por SSH en un sistema remoto, hace “X forwarding” de la consola de QEMU a la sesión local de Wayland en Fedora
Al principio pensé que iba a correr en modo headless, así que me sorprendió bastante ver que aparecía una ventana :)
Hace pensar en cómo sería si la configuración estuviera separada del software que configura. En vez de aprender cómo cada programa de UI reinventó la rueda, podrías elegir tu administrador de configuración favorito
Lo más cercano que tenemos hoy son los archivos de configuración en texto. Todos los programas que usan eso tienen que elegir un lenguaje específico y una ubicación de almacenamiento
Una idea en la que he pensado bastante últimamente es una capa intermediaria de configuración. La UI de configuración visible para el usuario usaría el lenguaje o formato que se quiera, tomaría esos datos como única fuente de verdad y generaría los archivos de configuración que el software leería
También tienen funciones de administración útiles, como arranque y apagado basados en archivos de configuración o acceso a consola serial, pero incluso eso es muy simple de implementar uno mismo con scripts de shell. El manejo de almacenamiento de libvirt es terriblemente verboso y complejo, y aun así no maneja bien thin LV ni ZFS
A menos que quieras manejarlo al estilo corporativo estándar y no tengas intención de aprender el software base como QEMU o shell, o realmente necesites alguna función ambigua de libvirt, recomiendo usar QEMU directamente sobre KVM y escribir tus propios scripts. Vas a aprender más de QEMU que de un wrapper flojo en Python, y además vas a tener más control sobre el sistema
Además, IBM/Red Hat parece haber prácticamente abandonado virt-manager mientras impulsa su nueva interfaz web, Copilot
Quickemu resulta más interesante porque puedes ver unos ejemplos rápidamente y levantar una VM nueva enseguida, sin perder tiempo aprendiendo una UI grande y compleja
Esta herramienta descarga archivos arbitrarios de internet y luego compara sus checksums con otro archivo arbitrario distinto en internet[2]
No son las mejores prácticas de seguridad. La forma correcta sería dejar committeadas en el repositorio las claves GPG de los desarrolladores de la distribución y verificar todos los archivos con esas claves
Eso no significa que quiera menospreciar el esfuerzo de este proyecto para encontrar los flags correctos que hay que pasarle a QEMU para arrancar varios sistemas operativos
[1] https://news.ycombinator.com/item?id=28797129
[2] https://github.com/quickemu-project/quickemu/blob/0c8e1a5205...
Además, agrega una verificación extra de coincidencia de hash que la mayoría ni siquiera hace
En la época de FTP, el checksum y GPG eran imprescindibles. En HTTP/TCP, TCP ya se ocupaba de los reintentos y checksums, así que la necesidad de GPG era incluso mayor, pero ambos seguían siendo necesarios por los ataques de intermediario
Pero si es HTTPS, ¿por qué sigue importando? ¿Acaso HTTPS no reemplaza ambas verificaciones y la validación de firma?
Ojalá que el interés de Hacker News este año motive a alguien a implementar verificación de firmas para Linux
0. https://mac.getutm.app/
https://docs.getutm.app/installation/ios/
Un ejemplo reciente con Alma Linux sería este
$ virt-install --name alma9 --memory 1536 --vcpus 1 --disk path=$PWD/alma9.img,size=20 --cdrom alma9.iso --unattendedCuando vuelves después de tomarte un café, ya está corriendo una VM de Alma Linux con la instalación terminada. La lista de SO compatibles varía según la versión de libvirt, y se puede verificar así:
$ osinfo-query osSi necesitas una imagen de disco de Fedora 39, también está virt-builder
$ virt-builder fedora-39Más tarde puedes importarla a libvirt con
virt-install --import¿
virt-installdescarga automáticamente la ISO? Si lo intentas, aparece este mensaje:$ virt-install --name alma9 --memory 1536 --vcpus 1 --disk path=$PWD/alma9.img,size=20 --cdrom alma9.iso --unattendedERROR Validating install media 'alma9.iso' failed: Must specify storage creation parameters for non-existent path '/home/foo/alma9.iso'.No está claro cuál será el resultado. Me pregunto cuál será el nombre del host, cómo se particionará el disco, qué paquetes se instalarán y qué se configurará como zona horaria y distribución de teclado, entre otras cosas
Para hacer esto tuve que instalar libosinfo-bin
La comodidad de estas herramientas es excelente, pero si juntas los dos scripts principales, son unas 5000 líneas de Bash
Quisiera revisarlos antes de ejecutarlos, pero no quiero leer 5000 líneas de Bash
No sé si esto convenza a alguien, pero leí los scripts de Bash antes de ejecutarlos y estaban bastante bien estructurados. La funcionalidad está bien dividida en funciones, los nombres de variables son razonables, hay comentarios útiles, no hay flujos de control extraños ni llamadas indirectas, y el uso de comandos crípticos es mínimo. Está entre los scripts de shell más fáciles de leer que he visto hasta ahora
Si piensas en lo que realmente hace este script, también tiene sentido que el código sea relativamente directo. En esencia, ejecuta un solo comando para iniciar QEMU. El resto del código inspecciona el sistema local para decidir qué argumentos pasarle a ese comando, o descarga algunos archivos si hace falta
No significa que debas ejecutarlo a ciegas, pero los criterios que usamos para elegir el software que ejecutamos normalmente no dependen de si estamos familiarizados con su código fuente
“You are a linux guru, and you have extensive experience with bash and all forms of unix/linux. I am going to be pasting a large amount of code in a little bit at a time. Every time I paste code and send it to you, you are going to add it to the previous code and ask me if I am done. When I am done we are going to talk about the code, and you are going to help me break it down and understand what is going on. If you understand you will ask me to start sending code, otherwise ask me any questions before you ask for the code.”
He probado este método con código más corto, aun así de menos de 1000 líneas que seguían superando el límite del prompt, y funcionó bastante bien. Admito que últimamente ChatGPT se ha vuelto más flojo, y a veces hay que pedirle explícitamente que no sea perezoso y que dé toda la salida solicitada, pero en general explica código bastante bien
La frase “muchos ojos hacen superficiales todos los errores” parece un cliché que para algunos usuarios detiene el pensamiento. Asumen que, como está abierto y se puede revisar, entonces está bien, e imaginan hordas de auditores de código verificándolo todo, cuando en realidad uno termina esperando más la malicia que la buena voluntad
En Windows ha habido utilidades de tweaks durante décadas. Atraen a quienes creen que los desarrolladores de las “grandes empresas” no tienen incentivos para exprimir al máximo el rendimiento del sistema y que dejaron opciones fáciles y útiles para todos escondidas detrás de configuraciones rápidas o tweaks del registro. Me recuerda a TronScript, que por su historia y nivel de participación parecería pasar la prueba del olfato y por eso inspira confianza, pero bajo la bandera de la automatización oculta los detalles y hace que el usuario espere que tome buenas decisiones por él. Puedes profundizar, investigar qué pasa y por qué, y aprender, pero para mucha gente en la práctica no es tan distinto de un binario
Por suerte, la mayoría de estas herramientas tiene una base de usuarios limitada, así que no vale tanto la pena comprometerlas. Si una marca concreta llega a usarse lo suficiente, puede pasar algo como lo de CCleaner de Piriform, al que le metieron una puerta trasera en 2017
Se ve interesante, pero para alguien que en Ubuntu solo ejecuta Windows 11 de vez en cuando con VirtualBox, ¿me puedes decir qué ventajas tendría?
En Linux recomiendo mucho Incus/LXD. Ejecutar una VM es tan simple como esto:
Después de iniciarla, el acceso al shell se hace así:
Incus/LXD también soporta contenedores de sistema
Hay una opción que me gusta pero casi no se menciona: systemd-nspawn. Ejecutas
docker create --name ubuntu ubuntu:22.04y luego usasdocker export ubuntupara crear un tar a partir de cualquier imagen de Docker.Después, solo hay que descomprimirlo en
/var/lib/machines/ubuntu. Hay que elegir una imagen que incluya systemd o instalar systemd dentro del contenedor. Por último, entras conmachinectl start ubuntuymachinectl shell ubuntu.systemd-nspawn es muy simple y ligero, y emula muy bien una máquina Linux real. Si tomas cualquier partición raíz basada en systemd y la arrancas con systemd-nspawn, funciona tal cual
¿Hay alguna cifra de cambio de rendimiento comparada con simplemente ejecutar una VM? Normalmente corro un guest Linux dentro de un host Linux, pero a menudo me decepciona el rendimiento del guest.
Nunca he investigado cómo ajustar la experiencia de una VM, así que me da curiosidad cuánto me estoy perdiendo. ¿Es 5% más rápido? ¿100%?
¿Corre de forma nativa en Arm, o sea en Apple Silicon? ¿Qué tal con las versiones recientes de macOS? ¿Tiene aceleración gráfica? ¿Cómo maneja la red?
Me da curiosidad cuál es la diferencia con Proxmox y si las optimizaciones que hace aquí se pueden reproducir manualmente en mi entorno de Proxmox
Quickemu parece estar orientado principalmente a uso de escritorio