====== KVM/QEMU ====== KVM (//Kernel-based Virtual Machine//) est une solution de virtualisation libre. Cette technologie est intégrée au noyau Linux. Elle a plusieurs avantages : * stockage (tout ce que le noyau Linux prend en charge) * migration à chaud * planification et contrôle des ressources QEMU est une machine virtuelle (ou émulateur). On peut utiliser ce dernier sans dépendre de l'hyperviseur KVM. Dans cette page nous allons voir comment utiliser ces deux technologies ensemble par l'intermédiaire de la bibliothèque **libvirt**. Le système hôte est une Debian. Il faudra adapter la partie "Installation" à d'autres distributions. De plus, on va uniquement s'intéresser à l'architecture **x86**. Toutes les __**manipulations**__ doivent se faire avec un **utilisateur privilégié**. ===== Installation ===== apt install --no-install-recommends qemu-system-x86 qemu-utils qemu-block-extra Pour gérer les machines virtuelles, on installe également les paquets liés à **libvirt**. On utilise ici, l'option ''--no-install-recommends'' sinon avec la gestion des dépendances, on va également installer le paquet **virt-manager**. Or dans notre cas on souhaite en utiliser un autre. apt install --no-install-recommends libvirt-clients libvirt-daemon-system virtinst libosinfo-bin ===== Lancement du service ===== En principe le service **libvirtd** est actif, pour vérifier son état → ''systemctl status libvirtd''. Si ce n'est pas le cas : systemctl start libvirtd systemctl enable libvirtd La dernière ligne précise, que ce service doit être lancé à chaque démarrage de la machine. ===== Gestion du réseau ===== Avant de créer notre première machine virtuelle, il faut activer le réseau : virsh net-list --all Nom État Démarrage automatique Persistent --------------------------------------------------------- default inactif no Oui Pour changer cet état, ''virsh net-start default''. Pour éviter de devoir taper la commande précédente à chaque fois, on active l'option **net-autostart** → ''virsh net-autostart default''. virsh net-list --all Nom État Démarrage automatique Persistent ------------------------------------------------------- default actif Oui Oui On constate, que l'état du réseau à changer. ===== Création d'une machine virtuelle ===== Un utilisateur classique est suffisant, ici. Dans un premier temps, nous allons définir une image disque, d'une taille définie (cela représente en quelque sorte un disque dur physique). Pour notre essais, nous allons partir sur **20G**, et installer la Linux Mint 20.2 ((Il faut avoir l'image .iso quelque part sur le disque dur.)). fallocate -l 20G linuxmint-20.img Puis cette image disque doit être dans un format (Qcow) compréhensible par QEMU. qemu-img create -f qcow2 linuxmint-20.img 20G Maintenant nous allons créer à proprement parler notre machine virtuelle (on parle de « domaine » dans le jargon **libvirt**). Il faut lancer les commandes ci-dessous avec un utilisateur privilégié (**root** ou précédé de **sudo**). virt-install --connect qemu:///system \ --name linuxmint \ --virt-type kvm \ --hvm \ --ram 2048 \ --noautoconsole \ --disk path=linuxmint-20.img,size=20 \ --network bridge=virbr0 \ --cdrom linuxmint-20.2-mate-64bit.iso \ --graphics vnc \ --os-variant ubuntu20.04 On va détailler les différentes options : * **--name** → nom de la machine virtuelle * **virt-type** → on précise que l'on souhaite utiliser KVM (et pas uniquement QEMU) * **--connect** → précise le système de virtualisation (qemu://, xen://, lxc://, vbox://) * **--ram** → la quantité de mémoire allouée (par défaut c'est 1024, mais il vaut mieux doubler cette valeur) * **--noautoconsole** → évite de lancer **virt-viewer**, c'est utile si l'on souhaite utiliser un client VNC particulier * **--graphics vnc** → accès à la machine virtuelle par l'intermédiaire d'un client VNC * **--os-variant** → charge des optimisations ((Linux Mint 20 est basée sur Ubuntu 20.04, ''osinfo-query os | grep ubuntu''.)) Si la commande s'est bien exécutée → ''virsh list --all''. Avec une session VNC, il vaut mieux éditer (à chaud → ''virsh edit linuxmint'') le fichier de configuration de la machine virtuelle pour avoir un clavier AZERTY (fr). On rajoute un attribut **keymap** au nœud **graphics**. Ci dessous les attributs par défaut du nœud **graphics** : [...] [...] Après avoir rajouter l'attribut **keymap**. [...] [...] Quand on modifie un paramètre de la machine virtuelle, il est préférable de la relancer. virsh destroy linuxmint Cette commande peut endommager la machine virtuelle (dans notre cas, il n'y a rien). Sinon il faut privilégier l'option **shutdown**. Pour la lancer : virsh --connect qemu:///system start linuxmint