qemu-8.2.1

Introduction à qemu

qemu est une solution de virtualisation complète pour Linux avec un processeur x86 supportant les extensions de virtualisation (Intel VT ou AMD-V).

This package is known to build and work properly using an LFS 12.1 platform.

Informations sur le paquet

  • Téléchargement (HTTP) : https://download.qemu.org/qemu-8.2.1.tar.xz

  • Téléchargement (FTP) :

  • Somme de contrôle MD5 : bda54248d773be2599df66f8995f10e1

  • Taille du téléchargement : 124 Mo

  • Estimation de l'espace disque requis : 2,2 Go (573 Mo installés)

  • Estimation du temps de construction : 1,3 SBU (plus 0,8 SBU pour les tests, tous deux avec parallélisme = 4)

Dépendances de Qemu

Requises

GLib-2.78.4 et Pixman-0.43.2

Recommandées

Facultatives

pipewire-1.0.3 ou PulseAudio-17.0 (peuvent être utilisés à la place d'alsa-lib), BlueZ-5.72, cURL-8.6.0, Cyrus SASL-2.1.28, Fuse-3.16.2, GnuTLS-3.8.3, GTK+-3.24.41, keyutils-1.6.3, libaio-0.3.113, libusb-1.0.27, libgcrypt-1.10.3, libjpeg-turbo-3.0.1, libseccomp-2.5.5, libssh2-1.11.0, libpng-1.6.42, libtasn1-4.19.0, Linux-PAM-1.6.0, LZO-2.10, Nettle-3.9.1, Mesa-24.0.1, VTE-0.74.2, capstone, ceph, daxctl, JACK, glusterfs, libbpf, libcacard, libcap-ng, libdw, libfdt, libiscsi, libnfs, libpmem, libssh, libu2f-emu, lzfse, netmap, numactl, rdma-core, SELinux, snappy, spice, usbredir et VDE

Facultatives (à l'exécution)

Systemd-255

Facultatives (pour construire la documentation)

sphinx_rtd_theme-2.0.0

[Note]

Note

La liste des dépendances facultatives n'est pas complète. Regardez la sortie de ./configure --help pour une liste plus complète.

Notes des auteurs : https://wiki.linuxfromscratch.org/blfs/wiki/qemu

Prérequis de KVM

Avant de construite qemu, vérifier si votre processeur supporte la technologie de virtualisation (VT) :

grep -E '^flags.*(vmx|svm)' /proc/cpuinfo

Si vous avez une sortie, vous avez la technologie VT (vmx pour les processeurs Intel et svm pour les processeurs AMD). Vous devez ensuite allez voir dans votre BIOS et vérifier qu'elle est activée. Après l'activation, redémarrez sur votre LFS.

Configuration du noyau

Activez les options suivantes dans la configuration du noyau et recompilez le noyau si nécessaire :

[*] Virtualization --->                                         [VIRTUALIZATION]
  <*/M>   Kernel-based Virtual Machine (KVM) support                       [KVM]
  # Enable the option for your CPU:
  < /*/M>   KVM for Intel (and compatible) processors support        [KVM_INTEL]
  < /*/M>   KVM for AMD processors support                             [KVM_AMD]

Les options Intel ou AMD ne sont pas toutes les deux nécessaires, mais celle correspondante à votre processeur est obligatoire.

Pour pour utiliser les périphériques « pont » (bridge), comme expliqué ci-dessous, vérifiez que bridge-utils-1.7.1 est installé et que les options suivantes dans la configuration du noyau sont activées :

[*] Networking support --->                                                [NET]
  Networking options --->
    <*/M> 802.1d Ethernet Bridging                                      [BRIDGE]

Device Drivers --->
  [*] Network device support --->                                   [NETDEVICES]
    [*]   Network core driver support                                 [NET_CORE]
    <*/M>   Universal TUN/TAP device driver support                        [TUN]

Installation de qemu

La règle udev de LFS ne permet que l'utilisateur root, les utilisateurs qui ont une session de connexion prise en charge par la dépendance à l'exécution facultative Systemd-255, ou les utilisateurs dans le groupe kvm à utiliser le périphérique KVM. En tant qu'utilisateur root, ajoutez les utilisateurs non-root qui peuvent utiliser le périphérique KVM soit sans avoir installé Systemd-255 soit à distance (via une connexion SSH) au groupe kvm :

usermod -a -G kvm <username>

Installez qemu en exécutant les commandes suivantes :

[Note]

Note

Qemu est capable de faire tourner de nombreuses architectures. La procédure de construction est aussi capable de construire les différentes cibles en une fois à l'aide d'une liste de cibles séparées par des virgules à l'option --target-list. Lancez ./configure --help pour avoir une liste complète des cibles possibles.

if [ $(uname -m) = i686 ]; then
   QEMU_ARCH=i386-softmmu
else
   QEMU_ARCH=x86_64-softmmu
fi


mkdir -vp build &&
cd        build &&

../configure --prefix=/usr               \
             --sysconfdir=/etc           \
             --localstatedir=/var        \
             --target-list=$QEMU_ARCH    \
             --audio-drv-list=alsa       \
             --disable-pa                \
             --enable-slirp              \
             --docdir=/usr/share/doc/qemu-8.2.1 &&

unset QEMU_ARCH &&

make

qemu utilise ninja comme sous-processus lors de la construction. Pour lancer les tests, lancez : ninja test. Deux tests, bios-tables-test et migration-test, sont connus pour échouer.

Maintenant, en tant qu'utilisateur root :

make install

Modifiez les permissions et le propriétaire d'un script d'aide requis lorsque vous utilisez un périphérique « pont » (voir en bas). Toujours en tant qu'utilisateur root, exécutez :

[Note]

Note

Vous devez ajouter les utilisateurs qui pourraient utiliser le périphérique réseau « bridge » au groupe kvm même si Systemd-255 est installé.

chgrp kvm  /usr/libexec/qemu-bridge-helper &&
chmod 4750 /usr/libexec/qemu-bridge-helper
[Note]

Note

Par confort vous pouvez vouloir créer un lien symbolique pour lancer le programme installé. Par exemple (en tant qu'utilisateur root) :

ln -sv qemu-system-`uname -m` /usr/bin/qemu

Explication des commandes

--audio-drv-list=alsa : ce paramètre initialise le pilote audio pour ALSA. Voir plus bas pour activer d'autres pilotes audio.

--disable-pa : même si pa n'est pas dans la liste --audio-drv-list, le pilote pulseaudio est construit, à moins de le désactiver avec ce paramètre.

--enable-slirp : ce paramètre force le système de construction à vérifier la présence de Libslirp-4.7.0. Supprimez-le si vous n'avez pas besoin de la prise en charge de -netdev user.

--audio-drv-list=pa --disable-alsa : ce paramètre initialise le pilote audio pour utiliser pulseaudio. Pour les autres pilotes consultez les possibilités de la liste --audio-drv-list dans la sortie de configure --help. Le pilote audio par défaut est OSS. Pour activer la prise en charge simultanée d'alsa et pulseaudio, utilisez --audio-drv-list=alsa,pa

Utilisation de Qemu

Comme l'utilisation de qemu signifie d'utiliser un ordinateur virtuel, les étapes pour mettre en place la machine virtuelle sont très proches de celles d'un vrai ordinateur. Vous devrez décider du CPU, de la mémoire, des disques, des périphériques USB, des cartes réseau, de la taille de l'écran, etc. Une fois que le « matériel » est décidé, vous devrez par exemple choisir comment connecter la machine à internet et installer un système d'exploitation. Dans la suite, nous montrons des façons simples d'effectuer ces étapes. Mais qemu est bien plus que ça, et il est fortement recommandé de lire la documentation de qemu dans /usr/share/doc/qemu-8.2.1/qemu-doc.html.

[Note]

Note

Il est d'usage d'appeler l'ordinateur qui fait tourner qemu l'« hôte » et la machine émulée qui tourne sous qemu l'« invitée ». Nous utiliserons ces notations dans la suite.

[Note]

Note

Les instructions suivantes supposent que vous avez créé le lien symbolique facultatif, qemu. De plus, vous devez exécuter qemu dans un environnement X. Il est tout de même possible d'utiliser qemu en mode « headless » ou à travers SSH. Consultez la documentation pour voir les différentes possibilités.

Disk

Un disque virtuel peut être mis en place de cette manière :

VDISK_SIZE=50G
VDISK_FILENAME=vdisk.img
qemu-img create -f qcow2 $VDISK_FILENAME $VDISK_SIZE

Ajustez la taille du disque virtuel et le nom du fichier image comme vous le souhaitez. La taille réelle du fichier sera plus petite que spécifiée, mais s'agrandira quand il sera utilisé, donc une valeur élevée reste sure.

Système d'exploitation

Pour installer un système d'exploitation, téléchargez une image ISO de votre distribution Linux préférée. Pour les besoins de l'exemple, nous utiliserons une distribution Fedora-16-x86_64-Live-LXDE.iso dans le répertoire courant. Exécutez les commandes suivantes :

qemu -enable-kvm                           \
     -drive file=$VDISK_FILENAME           \
     -cdrom Fedora-16-x86_64-Live-LXDE.iso \
     -boot d                               \
     -m 1G

Suivez la procédure d'installation normale pour la distribution choisie. L'option -boot spécifie l'ordre de démarrage des disques comme une chaîne de lettres de lecteur. Les lettres valides de lecteurs sont : a, b (lecteur de disquettes 1 et 2), c (premier disque dur), d (premier lecteur CD-ROM). L'option -m est la quantité de mémoire à utiliser pour la machine virtuelle. Le choix dépend de la charge de l'hôte. Les distributions modernes devraient être à l'aise avec 1 Go. L'option -enable-kvm permet l'accélération matérielle. Sans ce paramètre, l'émulation est assez lente.

Définition du matériel virtuel

Le matériel de la machine virtuelle est défini par la ligne de commande de qemu. Par exemple :

qemu -enable-kvm                     \
     -smp 4                          \
     -cpu host                       \
     -m 1G                           \
     -drive file=$VDISK_FILENAME     \
     -cdrom grub-img.iso             \
     -boot order=c,once=d,menu=on    \
     -net nic,netdev=net0            \
     -netdev user,id=net0            \
     -device ac97                    \
     -vga std                        \
     -serial mon:stdio               \
     -name "fedora-16"

Signification des options de la ligne de commande

-enable-kvm : active le support complet de la virtualisation KVM. Sur certain matériels, il est nécessaire d'ajouter l'option non-documentée -machine smm=off pour activer KVM.

-smp <N> : active le multi-tâche symétrique avec <N> processeurs.

-cpu <model> : simule le <modèle> du processeur. La liste des modèles supportés peut être obtenu avec -cpu help.

-drive file=<filename> : définie un disque virtuel dont l'image est enregistrée dans <filename>.

-cdrom grub-img.iso : définit un fichier formaté en iso à utiliser comme cdrom. Ici nous utilisons le disque de secours de grub, qui peut être pratique lorsque quelque chose ne va pas au démarrage.

-boot order=c,once=d,menu=on : définit l'ordre de démarrage pour le BIOS virtuel.

-net nic,netdev=<netid> : définie la carte réseau connectée au périphérique réseau avec l'id <netid>.

-netdev user,id=<netid> : définie le périphérique « utilisateur » réseau. Il s'agit d'un réseau local virtuel avec les adresses 10.0.2.0/24, où l'hôte à l'adresse 10.0.2.2 et agit comme une passerelle vers internet, et avec un serveur de nom à l'adresse 10.0.2.3, et un serveur smb à l'adresse 10.0.2.4. Un serveur DHCP inclus peut allouer des adresses entre 10.0.2.15 et 10.0.2.31.

-soundhw <model> : définie le modèle de la carte son. La liste peut être obtenue avec -soundhw help.

-vga <type> : définit le type de carte VGA à émuler. Pour -vga std, si vous construisez un noyau Linux pour l'invité, il est recommandé d'activer CONFIG_DRM_BOCHS (comme partie du noyau ou en module du noyau) pour piloter toutes les fonctionnalités de la carte VGA émulée, et CONFIG_FB pour afficher une console Linux dessus. Les autres valeurs de <type> ne sont pas testées par les rédacteurs et peuvent nécessiter des dépendances supplémentaires.

-serial mon:stdio : envoie le port série de l'invité (/dev/ttyS0 sur les invités linux), multiplexé avec le moniteur qemu, vers l'entrée standard et la sortie du processus qemu.

-name <name> : définit le nom de l'invité. Ce nom est affiché dans le titre de la fenêtre de l'invité. Il peut être utile si vous lancez plusieurs invités en même temps.

-drive if=pflash,format=raw,readonly=on,file=/usr/share/qemu/edk2-x86_64-code.fd : charge un micrologiciel UEFI EDK2 préconstruit, au lieu du BIOS PC par défaut. Utilisez cette option si vous voulez démarrer le système hébergé avec UEFI.

-drive file=<filename>,if=virtio : fournit une interface Virtio au noyau invité pour accéder à une image disque au lieu de simuler un vrai disque matériel. Cela peut améliorer les performances d'entrée-sortie du disque, mais nécessite le pilote Virtio dans le noyau invité. Utilisez ceci au lieu de -drive seul si le noyau invité prend Virtio en charge. Pour construire un noyau Linux avec la prise en charge de Virtio pour l'invité, utilisez make defconfig && make kvm_guest.config pour créer une configuration de noyau initiale avec les périphériques Virtio activés, puis appliquez vos modifications. Ensuite, si le noyau hôte est Linux, les disques virtuels qui utilisent l'interface Virtio seront nommés vdx dans le devtmpfs, au lieu de sdx.

-net nic,netdev=net0,model=virtio-net-pci : fournit une interface Virtio au noyau invité pour accéder à l'interface réseau au lieu de simuler une vrai carte matérielle. Cela peut améliorer les performances d'entrée-sortie du réseau, mais nécessite un pilote Virtio dans le noyau invité. Utilisez ceci au lieu de -net seul si le noyau invité prend Virtio en charge.

Contrôle de l'affichage émulé

Pour paramétrer la résolution de l'écran émulé pour un serveur Xorg qui tourne dans le système Linux invité, consultez la section intitulée « Réglage fin des paramètres d'affichage ».

Networking

La solution pour le réseau ci-dessus permet à l'invité d'accéder au réseau local à travers l'hôte (et éventuellement d'accéder à internet à travers des routeurs locaux), mais l'inverse n'est pas vrai. Même l'hôte ne peut pas accéder à l'invité, à moins que la redirection de port ne soit activée. Et dans le cas où plusieurs invités tourneraient, ils ne peuvent pas communiquer entre eux. D'autres périphériques réseau peuvent être utilisés pour cela. Par exemple, le périphérique « socket » qui permet à plusieurs invités de partager un réseau virtuel commun. Dans la suite, nous décrivons plus en détails comment mettre en place le périphérique « bridge » qui permet aux invités d'apparaître comme s'ils étaient connectés au réseau local. Toutes les commandes ce-dessous devraient être lancés en tant qu'utilisateur root.

Autorisez le système hôte à transférer les paquets IP :

sysctl -w net.ipv4.ip_forward=1

Pour rendre cela permanent, ajoutez la commande au fichier etc/sysctl.d/60-net-forward.conf :

cat >> /etc/sysctl.d/60-net-forward.conf << EOF
net.ipv4.ip_forward=1
EOF

Initialisez un fichier de configuration requis :

install -vdm 755 /etc/qemu &&
echo allow br0 > /etc/qemu/bridge.conf

Dans la commande qemu au-dessus, remplacez l'option -netdev user,... par -netdev bridge,….

Contenu

Programmes installés: elf2dmp, qemu (lien symbolique), qemu-edid, qemu-ga, qemu-img, qemu-io, qemu-keymap, qemu-nbd, qemu-pr-helper, qemu-storage-daemon et qemu-system-<arch>
Bibliothèque installée: None
Répertoires installés: /usr/share/qemu et /usr/share/doc/qemu-8.2.1 (facultatif)

Descriptions courtes

elf2dmp

Convertit les fichiers du format elf au format dmp

qemu-edid

est un outil de test pour le générateur EDID de qemu

qemu-ga

implémente le support pour les commandes QMP (Protocole de surveillance QEMU) et les événements qui terminent et débutent respectivement au sein de l'invité à l'aide d'un agent intégré dans le cadre de QEMU

qemu-img

fournit les commandes pour gérer les images disques QEMU

qemu-io

est un programme de diagnostic et de manipulation pour les médias de mémoire (virtuels). Il est encore à un stade de développement précoce

qemu-keymap

génère les dispositions inverses à partir des dispositions xkb, que vous pouvez utiliser avec l'option « -k » de qemu en ligne de commande

qemu-nbd

exporte les images disques Qemu en utilisant le protocole disque QEMU "Network Block Device" (NBD)

qemu-pr-helper

Implémente l'outil de réservation persistante pour QEMU

qemu-storage-daemon

vous permet de modifier les images disque qui avec le protocole de surveillance de QEMU (QMP) sans lancer de VM

qemu-system-x86_64

est l'émulateur QEMU de système PC