5 points par GN⁺ 2024-01-31 | 1 commentaires | Partager sur WhatsApp
  • 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

1 commentaires

 
GN⁺ 2024-01-31
Avis sur Hacker News
  • Je recommande https://virt-manager.org/. Dans mon environnement, il fonctionnait bien mieux, et il prend aussi en charge l’exécution de QEMU sur un système distant via SSH
    Je l’utilisais tout le temps à l’époque où je gérais beaucoup d’hôtes de VM différents et des VM locales
    • virt-manager est l’un des logiciels les plus sous-estimés. Il est puissant et on finit par s’en servir souvent
      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
    • Ce n’est pas la même chose, mais Quickemu fonctionne aussi bien par-dessus SSH
      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 :)
    • C’est étonnant qu’un programme qui ne fait que de la configuration puisse être aussi important et utile
      Ç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
    • libvirt et virt-manager ne sont qu’une interface utilisateur simplifiée pour les vrais logiciels que sont QEMU et KVM. Ils résolvent un problème relativement trivial : parser des fichiers de configuration et passer les bonnes options au binaire QEMU
      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
    • J’aime l’approche qui consiste à passer directement les options de ligne de commande à QEMU. Pour de vieux OS comme Windows NT on MIPS ou Ultrix, ça marche bien
  • Je remets les avertissements de sécurité évoqués la dernière fois que c’est passé[1]
    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...
    • Quelqu’un peut expliquer en quoi c’est un problème de sécurité ? La vérification par clé GPG est certes la meilleure façon de garantir l’authenticité, mais ici on télécharge l’ISO depuis le site HTTPS de la distribution elle-même, ce qui ne diffère pas de ce que font presque tout le monde
      En plus, il effectue aussi une vérification de correspondance du hash, ce que la plupart ne font pas
    • Dans quelle mesure ces pratiques sont-elles dépassées ? TCP/TLS ne sont-ils pas déjà censés fournir des checksums et une signature de provenance ?
      À 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 ?
    • En plus, l’auteur a saisi un mot de passe utilisateur sur un clavier mécanique pendant un live stream, micro allumé
    • Ce ne sont pas des « fichiers arbitraires depuis Internet » : il semble n’utiliser que les sources d’origine
    • À noter que macOS fait désormais une vérification de signature. Windows ne dispose pas d’une signature utilisable
      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
  • Sur macOS, UTM[0] fait ça plutôt bien. Il propose aussi une petite galerie d’images préconstruites[1]
    0. https://mac.getutm.app/
    1. https://mac.getutm.app/gallery/
  • libvirt inclut virt-install, qui permet de créer rapidement Windows et plusieurs distributions Linux, avec installation automatisée. Je n’ai pas essayé sur Mac
    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 --unattended

Le 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 os

  • Si vous avez besoin d’une image disque Fedora 39, il y a aussi virt-builder
    $ virt-builder fedora-39
    On peut ensuite l’importer dans libvirt avec virt-install --import

  • Est-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 --unattended
    ERROR 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 suis globalement d’accord pour dire que les scripts shell sont rarement agréables à lire, mais ce code n’est en fait pas mauvais
      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
    • Y a-t-il une raison de traiter cela différemment d’un autre logiciel simplement parce que c’est un script shell ? Lisez-vous le code source du noyau avant de lancer un OS ? Et le navigateur web ?
      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
    • Si vous êtes vraiment inquiet et que vous avez du temps, on vous le reprochera peut-être, mais vous pouvez aussi discuter du code avec ChatGPT. Le prompt pourrait ressembler à ceci
      “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
    • Je vois cela comme un problème de construction de la confiance dans le logiciel en général. Comment établir cette confiance, et quelles attentes et responsabilités incombent aux développeurs comme aux utilisateurs
      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 ?

    • C’est difficile de répondre, car cela dépend beaucoup de ce que vous faites avec la VM. Cela ressemble à un wrapper autour de QEMU, avec l’objectif de choisir des réglages raisonnables pour démarrer facilement de nouvelles VM
    • Il y a notamment l’aspect accélération GPU. Faire tourner de la visioconférence dans Windows sous vbox est presque impossible, et même une application GUI un peu complexe subit une latence importante
    • Cela ressemble davantage à une alternative à Gnome Boxes. L’outil télécharge des images récentes, fournit des réglages par défaut adaptés à la distribution ou à l’OS, et ajoute aussi la prise en charge d’OS plus exigeants comme Windows et macOS
    • Si vous exécutez effectivement macOS, c’est un gros avantage par rapport à une installation dans VirtualBox ou VMware. De ce côté-là, il faut patcher plusieurs choses, ce qui rend l’exécution très difficile
  • Sous Linux, je recommande fortement Incus/LXD. Lancer une VM est aussi simple que ceci

    incus launch images:ubuntu/22.04 --vm my-ubuntu-vm  
    

    Après le lancement, on accède au shell comme suit

    incus exec my-ubuntu-vm /bin/bash  
    

    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 avec docker export ubuntu
    Ensuite, 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 avec machinectl start ubuntu et machinectl shell ubuntu
    systemd-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 % ?

    • Comment les exécutes-tu ? Avec KVM/QEMU et une configuration appropriée, on obtient des performances quasiment bare metal
  • 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

    • C’est très différent de Proxmox. Proxmox est conçu pour les laboratoires et les datacenters qui doivent héberger beaucoup de serveurs sous forme de VM
      Quickemu semble viser surtout un usage desktop