- Quickemu est un wrapper pour QEMU qui gère automatiquement la configuration nécessaire à la création de machines virtuelles une fois le système d’exploitation choisi, afin de créer et lancer rapidement des VM Windows, macOS et Linux
quickget télécharge automatiquement l’image OS upstream du système d’exploitation souhaité et crée le fichier de configuration de la VM, tandis que quickemu détecte le matériel et lance la VM avec une configuration adaptée à l’ordinateur
- L’objectif initial était de tester rapidement des distributions Linux, et les VM ainsi que leur configuration peuvent être placées à l’emplacement souhaité, comme un stockage USB externe ou le répertoire personnel, sans nécessiter de privilèges élevés pour l’exécution
- Le projet prend désormais en charge près de 1 000 éditions de systèmes d’exploitation, dont macOS, Windows, la plupart des BSD, FreeDOS, Haiku, KolibriOS, OpenIndiana et ReactOS
- Il fonctionne sur des hôtes Linux et macOS, et fournit les fonctionnalités nécessaires à l’usage des VM, notamment SPICE, le partage de fichiers, QEMU Guest Agent, VirGL, le passthrough USB, le port forwarding, l’audio, ainsi que le démarrage EFI et Legacy BIOS
Ce que fait Quickemu
- Quickemu est un wrapper autour de QEMU qui gère automatiquement la configuration nécessaire lors de la création d’une machine virtuelle
- Il suffit de choisir le système d’exploitation à lancer, sans avoir à définir manuellement de nombreuses options
- Le projet repose sur deux outils principaux
quickget : télécharge automatiquement l’OS upstream souhaité et génère le fichier de configuration de la VM
quickemu : énumère le matériel de l’hôte, puis lance la machine virtuelle avec une configuration optimisée pour l’ordinateur utilisé
Origine du projet et périmètre actuel
- L’objectif initial était de permettre de tester rapidement des distributions Linux
- Les VM et leur configuration peuvent être enregistrées à l’emplacement souhaité, comme un stockage USB externe ou le répertoire personnel
- L’exécution des machines virtuelles ne nécessite pas de privilèges élevés
- Le support s’est désormais étendu au-delà des distributions Linux à macOS, Windows, la plupart des BSD et à des systèmes d’exploitation non Linux
- Exemples pris en charge : FreeDOS, Haiku, KolibriOS, OpenIndiana, ReactOS
Systèmes d’exploitation pris en charge et hôtes
- Les hôtes pris en charge sont Linux et macOS
- Les systèmes invités incluent notamment
- macOS Sequoia, Sonoma, Ventura, Monterey, Big Sur, Catalina, Mojave
- Windows 10 et 11, avec TPM 2.0
- Windows Server 2022, 2019, 2016
- Ubuntu et toutes les saveurs officielles d’Ubuntu
- La plupart des BSD et plusieurs systèmes d’exploitation non Linux
- Les invités ARM64 sont pris en charge, ce qui permet d’exécuter des VM aarch64
- Exécution native sur les hôtes ARM
- Exécution émulée sur les hôtes x86_64
- Le nombre d’éditions de systèmes d’exploitation prises en charge atteint près de 1 000
Fonctionnalités des VM
- Prise en charge complète de SPICE, y compris le partage du presse-papiers entre l’hôte et l’invité
- Plusieurs méthodes de partage de fichiers sont prises en charge selon le système d’exploitation invité
- VirtIO-webdavd : partage de fichiers pour les invités Linux et Windows
- VirtIO-9p : partage de fichiers pour les invités Linux et macOS
- Samba : partage de fichiers pour les invités Linux, macOS et Windows ;
smbd doit être installé sur l’hôte
- Prise en charge de QEMU Guest Agent, qui permet d’accéder à un agent système via les commandes QMP standard
- Côté graphisme et périphériques, prise en charge de l’accélération VirGL, du passthrough des périphériques USB et du passthrough des cartes à puce
- Des fonctions réseau et d’entrée/sortie sont également incluses
- Port forwarding SSH automatique vers l’invité
- Port forwarding réseau
- Audio full duplex
- Prise en charge du braille
- Démarrage EFI avec ou sans SecureBoot
- Démarrage Legacy BIOS
Flux de démarrage rapide
- Après l’installation de Quickemu, la création et l’exécution d’une VM se font en deux étapes
- Utiliser
quickget pour télécharger l’image ISO et créer le fichier de configuration de la VM
quickget nixos unstable minimal
- Utiliser
quickemu pour démarrer la VM à l’aide du fichier de configuration créé par quickget
quickemu --vm nixos-unstable-minimal.conf
- Lancer
quickget sans argument permet d’afficher la liste de tous les systèmes d’exploitation pris en charge
Documentation et ressources
- Le wiki couvre la prise en main, ainsi que la configuration et l’utilisation avancées
1 commentaires
Avis sur Hacker News
Je l’utilisais tout le temps à l’époque où je gérais beaucoup d’hôtes de VM différents et des VM locales
Il faut connaître un minimum la terminologie de base autour des VM, mais il évoque beaucoup ces anciennes GUI pleines de fonctionnalités et de puissance
Si vos besoins sont simples, ou si vous êtes moins à l’aise avec les VM, Gnome Boxes fournit une GUI épurée tout en utilisant le même backend. Sa simplicité réduit sa flexibilité, mais l’avantage est que si vous devez plus tard ajuster des paramètres qui ne sont pas exposés dans Boxes, vous pouvez ouvrir une VM Gnome Boxes avec virt-manager
Quand on l’exécute sur un système distant via SSH, il fait un « forwarding X » de la console QEMU vers la session Wayland locale de Fedora
Au début, je pensais que ça tournait en mode headless, donc j’ai été assez surpris de voir une fenêtre apparaître :)
Ça fait imaginer ce que ça donnerait si la configuration était séparée du logiciel qu’elle configure. Au lieu d’apprendre la manière dont chaque programme d’UI réinvente la roue, on pourrait choisir son gestionnaire de configuration préféré
Ce qui s’en rapproche le plus aujourd’hui, ce sont les fichiers de configuration texte. Tous les programmes qui les utilisent doivent choisir un langage précis et un emplacement de stockage
Une idée à laquelle je pense beaucoup ces temps-ci est celle d’une couche d’intermédiation de configuration. L’UI de configuration visible par l’utilisateur utiliserait le langage/format souhaité, puis ces données serviraient de source unique de vérité pour générer les fichiers de configuration lus par le logiciel
Il y a aussi des fonctions de gestion utiles, comme le démarrage/arrêt à partir de fichiers de configuration ou l’accès à une console série, mais ce sont des choses très simples à implémenter soi-même avec des scripts shell. La gestion du stockage dans libvirt est horriblement verbeuse et complexe, tout en ne prenant même pas correctement en charge les thin LV ou ZFS
Sauf si vous voulez faire tourner ça à la manière standard en entreprise et que vous n’avez pas l’intention d’apprendre les logiciels de base comme QEMU ou le shell, ou si vous avez absolument besoin d’une fonctionnalité obscure de libvirt, je recommanderais d’utiliser QEMU directement sur KVM avec vos propres scripts. Vous apprendrez davantage QEMU qu’avec un wrapper Python médiocre, et vous aurez plus de contrôle sur le système
Par ailleurs, IBM/Red Hat semble avoir pratiquement abandonné virt-manager en poussant vers sa nouvelle interface web, Copilot
Quickemu est plus intéressant, car on peut jeter un œil rapide aux exemples puis lancer tout de suite une nouvelle VM, sans passer du temps à apprendre une grosse UI complexe
Cet outil télécharge des fichiers arbitraires depuis Internet, puis compare leur somme de contrôle avec un autre fichier arbitraire provenant lui aussi d’Internet[2]
Ce n’est pas une bonne pratique de sécurité. La bonne méthode consisterait à committer les clés GPG des développeurs des distributions dans le dépôt et à vérifier tous les fichiers avec ces clés
Cela dit, je ne veux pas minimiser le travail effectué par ce projet pour trouver les bons flags à passer à QEMU afin de démarrer plusieurs OS
[1] https://news.ycombinator.com/item?id=28797129
[2] https://github.com/quickemu-project/quickemu/blob/0c8e1a5205...
En plus, il effectue aussi une vérification de correspondance du hash, ce que la plupart ne font pas
À l’époque du FTP, les checksums et GPG étaient indispensables. Avec HTTP/TCP, TCP gère les reprises et les checksums, donc le besoin de GPG augmente, mais les deux restaient nécessaires à cause des attaques de l’homme du milieu
Mais avec HTTPS, pourquoi est-ce encore important ? HTTPS ne remplace-t-il pas ces deux vérifications et la validation de signature ?
J’espère que l’intérêt suscité cette année sur Hacker News incitera quelqu’un à implémenter la vérification de signature pour Linux
0. https://mac.getutm.app/
https://docs.getutm.app/installation/ios/
Voici un exemple récent avec Alma Linux
$ virt-install --name alma9 --memory 1536 --vcpus 1 --disk path=$PWD/alma9.img,size=20 --cdrom alma9.iso --unattendedLe temps d’aller boire un café, et la VM Alma Linux installée est déjà en fonctionnement. La liste des OS pris en charge varie selon la version de libvirt, et se vérifie ainsi
$ osinfo-query osSi vous avez besoin d’une image disque Fedora 39, il y a aussi virt-builder
$ virt-builder fedora-39On peut ensuite l’importer dans libvirt avec
virt-install --importEst-ce que virt-install télécharge automatiquement l’ISO ? Si on essaie, on obtient ce message
$ 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'.Le résultat exact n’est pas clair. On se demande notamment quel sera le nom d’hôte, comment le disque sera partitionné, quels paquets seront installés, et quels fuseau horaire et disposition de clavier seront configurés
Pour faire cela, il a fallu installer libosinfo-bin
La commodité de ce genre d’outil est excellente, mais les deux scripts principaux réunis font environ 5 000 lignes de Bash
J’aimerais les relire avant de les exécuter, mais je n’ai pas envie de lire 5 000 lignes de Bash
Je ne sais pas si cela convaincra, mais j’ai lu le script Bash avant de l’exécuter, et il était plutôt bien structuré. Les fonctionnalités sont bien séparées en fonctions, les noms de variables sont raisonnables, les commentaires sont utiles, il n’y a pas de flux de contrôle étrange ni d’appels indirects, et l’usage de commandes obscures est limité au minimum. C’est l’un des scripts shell les plus lisibles que j’aie vus jusqu’ici
Quand on pense à ce que fait réellement ce script, il est logique que le code soit relativement linéaire. Le cœur consiste à exécuter une commande qui démarre QEMU. Le reste du code examine le système local pour déterminer quels arguments passer à cette commande, ou télécharge quelques fichiers si nécessaire
Cela ne veut pas dire qu’il faut exécuter les choses aveuglément, mais les critères selon lesquels nous choisissons les logiciels que nous exécutons ne dépendent généralement pas de notre familiarité avec leur code source
“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.”
J’ai utilisé cette méthode pour du code plus court, mais tout de même sous les 1 000 lignes et dépassant la limite du prompt, et cela a plutôt bien fonctionné. Je reconnais que ChatGPT est devenu paresseux ces temps-ci, et qu’il faut parfois préciser qu’on veut la sortie complète demandée plutôt qu’une réponse paresseuse, mais dans l’ensemble il explique assez bien le code
La formule « avec assez d’yeux, tous les bugs sont superficiels » ressemble, pour certains utilisateurs, à un cliché qui dispense de réfléchir. On se dit que, puisque le code est public et vérifiable, tout va bien, et on imagine une armée d’auditeurs de code qui vérifient tout ; en réalité, cela me fait davantage anticiper de la malveillance que de la bonne volonté
Côté Windows, il existe depuis des décennies une offre constante d’utilitaires de tweaking. Ils attirent des gens qui pensent que les développeurs des « grandes entreprises » ne sont pas motivés pour tirer le maximum de performances du système, et qu’ils ont laissé derrière des réglages rapides ou des tweaks de registre faciles à activer et utiles à tout le monde. Cela me fait penser à TronScript, qu’on voit passer de temps en temps : vu son historique et son niveau de participation, il semble passer le test de l’odeur, donc je le considère plutôt positivement, mais il masque les détails au nom de l’automatisation et amène l’utilisateur à s’attendre à ce qu’il prenne de bonnes décisions à sa place. On peut fouiller, enquêter et apprendre ce qui se passe et pourquoi, mais pour beaucoup de gens, cela revient pratiquement à un binaire
Le point rassurant, c’est que la plupart de ces outils ont une base d’utilisateurs limitée, donc ils ne valent pas forcément la peine d’être compromis. Si une marque donnée devient suffisamment utilisée, on peut se retrouver dans une situation comme celle de CCleaner de Piriform, qui avait reçu une backdoor en 2017
Ça a l’air intéressant, mais quelqu’un peut-il expliquer quels avantages cela apporte à une personne qui utilise Ubuntu et ne lance occasionnellement que Windows 11 dans VirtualBox ?
Sous Linux, je recommande fortement Incus/LXD. Lancer une VM est aussi simple que ceci
Après le lancement, on accède au shell comme suit
Incus/LXD prend aussi en charge les conteneurs système
Il y a systemd-nspawn, que j’aime bien mais dont on parle assez peu. Lancez
docker create --name ubuntu ubuntu:22.04, puis créez un tar à partir de n’importe quelle image Docker avecdocker export ubuntuEnsuite, il suffit de l’extraire dans
/var/lib/machines/ubuntu. Il faut choisir une image contenant systemd, ou installer systemd dans le conteneur. Enfin, on y entre avecmachinectl start ubuntuetmachinectl shell ubuntusystemd-nspawn est très simple et léger, et émule très bien une vraie machine Linux. Prenez n’importe quelle partition racine basée sur systemd, démarrez-la avec systemd-nspawn, et elle fonctionne telle quelle
Existe-t-il des chiffres de variation des performances par rapport au simple fait de lancer une VM ? D’habitude, je fais tourner des invités Linux dans un hôte Linux, et je suis souvent déçu par les performances de l’invité
Je n’ai jamais vraiment étudié l’optimisation de l’expérience VM, donc je me demande à côté de quoi je passe. Est-ce 5 % plus rapide ? 100 % ?
Est-ce que ça tourne nativement sur Arm, c’est-à-dire Apple Silicon ? Qu’en est-il des dernières versions de macOS ? Y a-t-il une accélération graphique ? Comment le réseau est-il géré ?
Je me demande en quoi c’est différent de Proxmox, et si je peux reproduire manuellement ces optimisations dans mon environnement Proxmox
Quickemu semble viser surtout un usage desktop