Motivations
Cette migration vers Qemu-KVM a été entreprise du fait de la conjonction de trois événements : * l'apparition de sérieux problèmes d'installation des mises à jour du logiciel Virtualbox en version testing de debian ayant rendu la machine virtuelle Windows 7 indisponible * le caractère obsolète de windows7 et le nécessaire passage à windows10 * le fait que la multiplication des usages des Raspberies Pi imposait une façon plus efficace de compiler les logiciels embarqués que sur une instance dédiée de RaspberryPi.
Cette migration s'est révélée plus difficile que prévu !
Sommaire
-
Environnement dépendances et téléchargements
-
Création de la machine virtuelle et installation de windows10
a. Configuration standard de virt-manager
Téléchargements
1. Environnement dépendances et téléchargements
L'installation a été réalisée et testée sur une machine debian testing (bullseye]
équipée d'une cartegraphique nvidia
.
1.1 ISO windows10
Il est nécessaire disposer d'une licence VDA
de windows10
pour pouvoir l'installer dans une machine virtuelle. Cette licence particulière pour machines virtuelle dispose d'une documentation concernant exclusivement l'utilisation des solutions propriétaires du vendeur et il faut trouver le support Qemu-KVM ailleurs. L'image ISO
qui m'a été fournie propose plusieurs installations possibles, il est bien sûr crucial de choisir l'installation qui correspond au code qui vous a été fourni. En ce qui me concerne la désignation du code qui m'avait été fourni n'avait rien à voir avec aucun des noms d'installations proposés, je suis passé par le support pour obtenir le nom de l'installation à utiliser.
Vous devez disposer d'une image iso du type X##-$$$$$.ISO
1.2 Vérification de la configuration hardware
Pour installer la virtualisation il est nécessaire que ces fonctions aient été activées depuis le BIOS. Afin de vérifier plusieurs solutions sont possibles.
La plus simple
Utiliser la commande lscpu
et vérifier que la ligne "Virtualisation contient une information, par exemple :
Virtualisation : VT-x
La plus aboutie
Installer le paquet libvirt-clients
et utiliser la commande de validation de l'hote.
sudo apt install libvirt-clients
[sudo] Mot de passe de ######## :
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
cpp-7 lib32asan4 lib32gcc-7-dev libasan4 libx32asan4 libx32gcc-7-dev libx86emu2
Veuillez utiliser « sudo apt autoremove » pour les supprimer.
Les paquets supplémentaires suivants seront installés :
dmeventd libdevmapper-event1.02.1 liblvm2cmd2.03 libvirt0 lvm2 thin-provisioning-tools
Paquets suggérés :
libvirt-daemon
Les NOUVEAUX paquets suivants seront installés :
dmeventd libdevmapper-event1.02.1 liblvm2cmd2.03 libvirt-clients libvirt0 lvm2 thin-provisioning-tools
0 mis à jour, 7 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 6 447 ko dans les archives.
Après cette opération, 33,0 Mo d'espace disque supplémentaires seront utilisés.
.../...
virt-host-validate
QEMU : Vérification for hardware virtualization : PASS
QEMU : Vérification if device /dev/kvm exists : PASS
QEMU : Vérification if device /dev/kvm is accessible : PASS
QEMU : Vérification if device /dev/vhost-net exists : PASS
QEMU : Vérification if device /dev/net/tun exists : PASS
QEMU : Vérification for cgroup 'cpu' controller support : PASS
QEMU : Vérification for cgroup 'cpuacct' controller support : PASS
QEMU : Vérification for cgroup 'cpuset' controller support : PASS
QEMU : Vérification for cgroup 'memory' controller support : PASS
QEMU : Vérification for cgroup 'devices' controller support : PASS
QEMU : Vérification for cgroup 'blkio' controller support : PASS
QEMU : Vérification for device assignment IOMMU support : PASS
QEMU : Vérification if IOMMU is enabled by kernel : PASS
LXC : Vérification pour Linux >= 2.6.26 : PASS
LXC : Vérification for namespace ipc : PASS
LXC : Vérification for namespace mnt : PASS
LXC : Vérification for namespace pid : PASS
LXC : Vérification for namespace uts : PASS
LXC : Vérification for namespace net : PASS
LXC : Vérification for namespace user : PASS
LXC : Vérification for cgroup 'cpu' controller support : PASS
LXC : Vérification for cgroup 'cpuacct' controller support : PASS
LXC : Vérification for cgroup 'cpuset' controller support : PASS
LXC : Vérification for cgroup 'memory' controller support : PASS
LXC : Vérification for cgroup 'devices' controller support : PASS
LXC : Vérification for cgroup 'freezer' controller support : PASS
LXC : Vérification for cgroup 'blkio' controller support : PASS
LXC : Vérification if device /sys/fs/fuse/connections exists : PASS
D'autres solutions et explications sont disponibles sur Test des cpu
1.3 Installation des paquets nécessaires
Il est possible de construire des images "à la main" en composant soi même la commande qemu
qui créera la machine virtuelle mais il est plus simple d'utiliser l'interface graphique de virt-manager
qui s'appuie sut la librairie libvirt
. Fette stratégie facilite la configuration mais impose un certain nombre de choix compatibles avec l'usage moyen, pour des utilisations particulières prévoir une autre stratégie.
sudo apt install qemu-kvm virt-manager libvirt-daemon
[sudo] Mot de passe de vidal :
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
augeas-lenses gir1.2-gtk-vnc-2.0 gir1.2-libosinfo-1.0 gir1.2-libvirt-glib-1.0
gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 libaugeas0 libgovirt-common libgovirt2
libnetcf1 libnss-mymachines libvirt-daemon-driver-lxc libvirt-daemon-driver-qemu
libvirt-daemon-driver-vbox libvirt-daemon-driver-xen libvirt-daemon-system
libvirt-daemon-system-systemd libvirt-glib-1.0-0 libxencall1 libxendevicemodel1
libxenevtchn1 libxenforeignmemory1 libxengnttab1 libxenmisc4.11 libxenstore3.0
libxentoolcore1 libxentoollog1 libxml2-utils netcat-openbsd ovmf python3-libvirt
qemu-system-x86 seabios systemd-container virt-viewer virtinst
Paquets suggérés :
augeas-doc augeas-tools libvirt-daemon-driver-storage-gluster
libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-storage-zfs numad auditd nfs-common
open-iscsi pm-utils radvd systemtap zfsutils samba vde2 qemu-block-extra python3-guestfs
ssh-askpass
Les NOUVEAUX paquets suivants seront installés :
augeas-lenses gir1.2-gtk-vnc-2.0 gir1.2-libosinfo-1.0 gir1.2-libvirt-glib-1.0
gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 libaugeas0 libgovirt-common libgovirt2
libnetcf1 libnss-mymachines libvirt-daemon libvirt-daemon-driver-lxc
libvirt-daemon-driver-qemu libvirt-daemon-driver-vbox libvirt-daemon-driver-xen
libvirt-daemon-system libvirt-daemon-system-systemd libvirt-glib-1.0-0 libxencall1
libxendevicemodel1 libxenevtchn1 libxenforeignmemory1 libxengnttab1 libxenmisc4.11
libxenstore3.0 libxentoolcore1 libxentoollog1 libxml2-utils netcat-openbsd ovmf
python3-libvirt qemu-kvm qemu-system-x86 seabios systemd-container virt-manager virt-viewer
virtinst
0 mis à jour, 39 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 16,7 Mo dans les archives.
Après cette opération, 64,5 Mo d'espace disque supplémentaires seront utilisés.
Il est aussi nécessaire de télécharger une image contenant les logiciels windows nécessaires à la gestion de la virtualisation depuis le site fedora
.
curl https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.171-1/virtio-win-0.1.171.iso -o virtio-win
2. Création de la machine virtuelle et installation de windows10
On utilise le gestionnaire de machines virtuelles virt-manger
connecté au serveur libvirt, suivant les types d'installation les services libvirt*
peuvent ne pas être démarrés par défaut, ils sont lancé au premier démarrage de virt-manager
.
2.1 Configuration standard de virt-manager
ajouter le user qui lancera la machine au groupe kvm sinon seul root dispose de ce privilège sudo adduser name kvm
- Lancer virt-manager autoriser la connection au serveur
qemu
et choisir "créer une nouvelle machinevirtuelle" - Choisir le media d'installation
X##-$$$$$.ISO
choisir manuellement windows10 - Choisir la taille de la mémoire et le nombre de cpus de la machine virtuelle
- Sélectionner un stockage personnalisé
- Créer une image au format raw (impératif pour des raisons de performance
- Nommer la nouvelle machine et cocher "personnaliser la configuration avant l'installation"
- terminer et activer le réseau virtuel (proposé automatiquement) Modifier les paramètres avancés du disque dur :
Mode de cache none
mode d'E/S native
Lancer l'installation.
Avec cette configuration on obtient un client windows10 opérationnel (après un reboot et une phase d'installation classique de windows) mais qui peut être très lent voir même se figer complètement. ce problème n'arrive peut-être pas pour toutes les configurations (ça reste du windows ;-) ), ce n'est pas risqué de tester car l'arrêt forcé fonctionne bien et ne cause pas de dommages à la machine virtuelle qui vient d'être installée. Le chapitre suivant précise les modifications de configuration à effectuer pour éviter cette lenteur si elle apparait..
Le plus efficace est d'éteindre proprement la machine avant qu'elle ne ralentisse pour procéder aux manipulations suivantes La commande suivante permet de lancer automatiquement le réseau lorsque libvirt démarre.
virsh net-autostart default
2.2 Configuration particulière de virt-manager
Les modifications proposées permettent soit d'éviterle bug de lenteur excessive de windows soit de profiter des avantages de libvirt
. Relancer virt-manager, choisir la machine qui vient d'être installée puis ouvrir
, cliquer sur l'ampoule afficher les détails puis réaliser les modifications suivantes.
- Ajouter un lecteur de cd contenant le lien vers la deuxième image téléchargée depuis
fedora
nomméevirtio-win.iso
dans cet article. - Ajouter un disque dur au format VirtIO qui permettra de rajouter le driver
virtIO
dans le client win10 - Vérifier et modifier si nécessaire les paramètres avancés des deux disques durs :
Mode de cache none
mode d'E/S native
- Dans les préférences du gestionnaire
virt-manager
autoriser la modification des fichiers XML puis ans l'un des quatre premiers éléments de la liste du matériel choisir l'onglet XML chercher le paramètremachine
ajouterkernel_irqchip=on
Au redémarrage vous devez obtenir une machine windows10 stable (ne ralentissant pas et ne se figeant pas).Le premier travail à réaliser est l'ajout de guest-additions
depuis le CD VirtIO
. pour cela ouvrir le navigateur de fichiers, le CD VirtIO
, aller dans le répertoire guest agent
choisir l'xécutable qemu-ga-x86_64
. Une autre cause de ralentissement peut-être le fait que windows10 ne dispose pas nativement des drivers pour la machine virtuelle. Dans ce cas taper dans la barre de recherche "device manager" ensuite cliquer sur le bouton droit de la souris sur les drivers présentant une anomalie (icone jaune attention sur le coin de l'icone du driver) et rechercher le driver dans le CDROM virtIO
, la procédure est automatisée le driver se trouve et se charge seul.
Il est possible que certains problèmes apparaissent, voici une solution si le réseau défault à disparu (après un reboot de l'hôte par exemple) et que la machine virtuelle refuse de booter. Exécuter la liste de commandes suivante.
sudo virsh net-define /etc/libvirt/qemu/networks/default.xml
sudo virsh net-autostart default
sudo virsh net-start default
sudo virsh net-list
```shell
Dernière cause possible la gestion du cache de windows10, aller dans performance du paneau de configuration et dimensionner le cache manuellement.
une fois toutes les améliorations de driver effectuées il est possible de passer le disque dur en `virtIO` ce qui est aussi sensé améliorer la performance.
## <a name="head2.3"></a>2.3 En cas d'utilisation de disque externe
Si on utilise un disque externe monté sur `/media/user` il est nécessaire de permettre à `libvirt-qemu` d'accéder à ce disque en modifiant les ` ACL` avec la commande suivante :
```shell
sudo setfacl -m u:libvirt-qemu:rx /media/vidal
S'il ne s'agit pas d'une installation standard et si le user qui lance la machine virtuelle n'est pas libvirt-qemu
modifier le nom de user en conséquence.
3. Mise en production
La machine windows10 est totalement opérationnelle, il ne reste plus qu'ajouter le code d'activation et configurer l'univers windows comme vous le spouhaitez. Bon travail.
Commentaires