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).
Ce paquet est connu pour pouvoir être construit et fonctionner
correctement avec une plateform 12.2.
Informations sur le paquet
-
Téléchargement (HTTP) : https://download.qemu.org/qemu-9.0.2.tar.xz
-
Téléchargement (FTP) :
-
Somme de contrôle MD5 du téléchargement :
f7f0462262d2571f146c6a8adda33b29
-
Taille du téléchargement : 126 Mo
-
Estimation de l'espace disque requis : 2,2 Go
(374 Mo installés)
-
Estimation du temps de construction : 1,6 SBU (plus
1,0 SBU pour les tests, tous deux avec parallélisme = 4)
Dépendances de Qemu
Requises
GLib-2.80.4 et Pixman-0.43.4
Recommandées
alsa-lib-1.2.12, dtc-1.7.1, libslirp-4.8.0 et SDL2-2.30.6
Note
Si dtc-1.7.1 n'est pas installé, le système de
construction essaiera de télécharger une copie du code source de
dtc sur Internet.
Facultatives
pipewire-1.2.3 ou PulseAudio-17.0 (peuvent être utilisés à la
place d'alsa-lib), BlueZ-5.77, cURL-8.9.1,
Cyrus SASL-2.1.28, Fuse-3.16.2, GnuTLS-3.8.7.1,
GTK+-3.24.43, keyutils-1.6.3, libaio-0.3.113,
libusb-1.0.27, libgcrypt-1.11.0, libjpeg-turbo-3.0.1, libseccomp-2.5.5, libssh2-1.11.0, libpng-1.6.43,
libtasn1-4.19.0, Linux-PAM-1.6.1,
LZO-2.10, Nettle-3.10, Mesa-24.1.5, VTE-0.76.4,
capstone, ceph, daxctl, JACK, glusterfs, libbpf,
libcacard,
libcap-ng,
libdw,
libiscsi, libnfs,
libpmem,
libssh,
libu2f-emu,
lzfse,
netmap, numactl, rdma-core, SELinux, snappy,
spice, usbredir et
VDE
Facultatives (à l'exécution)
Systemd-256.4
Facultatives (pour construire la documentation)
sphinx_rtd_theme-2.0.0
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
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-256.4, 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-256.4 soit à distance (via une
connexion SSH) au groupe kvm
:
usermod -a -G kvm <username>
Installez qemu en exécutant les
commandes suivantes :
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-9.0.2 &&
unset QEMU_ARCH &&
make
qemu utilise ninja comme sous-processus lors
de la construction. Pour lancer les tests, lancez :
ninja test. Un test,
bios-tables-test, est connu 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
Vous devez ajouter les utilisateurs qui pourraient utiliser le
périphérique réseau « bridge » au groupe kvm
même si Systemd-256.4 est installé.
chgrp kvm /usr/libexec/qemu-bridge-helper &&
chmod 4750 /usr/libexec/qemu-bridge-helper
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
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-9.0.2/qemu-doc.html
.
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
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,…
.