Virtualisation d’un windows avec kvm

Windows ? Mais pourquoi ?

Très intéressé par SARAH, un logiciel open source qui ne fonctionne que sous windows, j’ai pensé que c’était une bonne occasion pour tester kvm. (Car des windows chez moi il y en a pas des masses…) J’ai découvert qu’il existait déjà un nombre monstrueux de tuto sur le net, et au moins autant de façon de procéder à la mise en place d’une VM. Comme aucun de ces tuto ne m’a vraiment semblé complet, je vais vous résumer les étapes que j’ai suivies de mon coté.

 

Sarah

Dommage, mais en fait non. Après quelques heures j’ai laissé tombé l’idée de le faire tourner dans une machine virtuelle. En effet, il faut évidement une carte son pleinement fonctionnelle pour la reconnaissance vocale d’un coté et la synthèse de l’autre. Or, il existe de nombreux bugs sur kvm autour de la gestion du son. Bien que ce soit certainement possible, je n’ai ni le temps ni le courage de me débattre avec tous ces bugs. Sarah, ce sera donc pour une prochaine fois. L’expérience de la virtualisation reste intéressante, let’s go !

 

Paramétrage du réseau

Le paramétrage réseau et de loin l’aspect le plus compliqué de la virtualisation. On va gagner du temps en utilisant la configuration par défaut. Les machines virtuelles auront accès à internet et passant par l’OS qui les héberge. Par contre, il n’est pas possible pour une autre machine présente sur le réseau de les atteindre directement. Pour plus d’informations sur le sujet, il existe de nombreux documents sur internet, à commencer par la documentation officielle, ou alors beaucoup plus détaillé ici.

 

Les outils

Il existe (au moins) deux façon d’utiliser KVM. Soit directement, soit en passant par libvirt. Mes premiers essais se sont fait avec kvm en direct. Avantages : C’est très facile, une ligne de commande et on lance une VM. Inconvénients : Le nombre d’option de cette ligne devient vite pénible. (Ce que beaucoup contourne en créant des scripts perso). Mais le vrai soucis est le manque de contrôle des VM une fois lancés. Le simple fait de les arrêter est compliqué car il faut impérativement se connecter dessus en mode console etc. Impossible d’envoyer un « signal d’arrêt » ou ce genre de chose. libvirt propose ce genre de fonctionnalités, et beaucoup, beaucoup d’autre. Même si cela nécessite de passer par une couche d’abstraction supplémentaire, le jeu en vaut la chandelle, alors allons-y pour libvirt.

 

Première étape : Création du disque virtuel

Après avoir installé les outils de virtualisation (apt-get install kvm libvirt-bin), il faut créer un fichier qui servira de disque virtuel. Ce fichier peut être « formaté » de deux façon différentes : raw ou qcow2. Pour que l’installation de windows se passe correctement, j’ai du choisir le mode « raw » :

qemu-img create ~/VM/seven.img 40G

Dans cet exemple j’avais crée un répertoire VM dans mon « home » utilisateur. 40 GB est bien sur la taille du disque et comme rien n’est précisé, c’est le mode raw qui est utilisé.

 

Deuxième étape : Création de la machine virtuelle

virt-install --name=seven --arch=x86_64 --vcpus=4 --ram=4096 --os-type=windows --os-variant=win7 --hvm --connect=qemu:system --network bridge:virbr0 --cdrom=windows_7_version_officielle_mon_cul.iso --disk path=~/VM/seven.img --accelerate --vnc --noautoconsole --keymap=fr --sound

On constate que je crée cette machine virtuelle avec 4 CPU et 4 GB de ram (à adapter bien sur en fonction de votre matériel…) Notez aussi la variante utilisée, ici « win7 ». Pour connaitre la liste des variantes reconnues :

virt-install --os-variant list

Pour le réseau, j’utilise le bridge virbr0, automatiquement crée sous ubuntu lors de l’installation des paquets liés à la virtualisation. A ce stade, la machine virtuelle est lancée, boot sur le CD, et lance l’installation de Windows. Pour suivre l’installation, il faut lancer un client vnc (celui que vous voulez, moi j’aime bien remmina), et le faire pointer sur localhost (port par défaut). Terminez l’installation de windows normalement.

 

Troisième étape : Installation des pilotes supplémentaires.

Télécharger l’image iso du CD contenant les drivers windows ici. Comme c’est toujours le CD de windows 7 qui est « inséré » dans le lecteur virtuel. il faut changer le CD :

virsh domblklist seven #hdc chez moi virsh seven change-media hdc nouveau_fichier.iso

Installer les drivers via le gestionnaire de périphérique windows en indiquant le bon emplacement sur le CD.

 

Quatrième étape : Post Installation

Une fois que vous avez installé ce que vous voulez (rien que les mises à jour de windows, prévoyez une bonne après-midi minimum), il reste quelque petits détail à corriger. Par exemple, vous avez peut être remarqué que windows ne reconnait que deux cpus, alors qu’on lui en avait donné lors de la création de la VM. Pourquoi ? Et bien ce fut pour moi le GROS LOL du jour. Par défaut, kvm présente des cpu « normaux ». Autrement dit, seven détecte la présence de 4 cpu dans la machine virtuelle. Or, seven est limité (bridé) pour ne pouvoir utiliser que deux cpus physiques maximum. Les deux cpu supplémentaires n’apparaissent donc pas. Il faut modifier la configuration de kvm pour ne pas présenter des cpus physiques différents, mais un seul et unique cpu physiques avec des cœurs distincts. De plus, maintenant que Windows est installé, cela ne pose plus de problème d’utiliser une image disque au format qcow2 (qui dispose de plus de fonctionnalité, notamment snapshot, compression…) que le format raw.

On va donc convertir l’image disque et passer de raw à qcow2. On va aussi « enlever » le CD pour que l’iso ne soit plus automatiquement « insérer » à chaque lancement.

Conversion de l’image disque

STOPPER Windows. Puis :

qemu-img convert -c -O qcow2 ~/VM/seven.img ~/VM/seven.qcow2

Admirez la réduction de taille du fichier.

Modifier les paramètres de la VM

virsh dumpxml >/tmp/seven.xml

Éditer le fichier /tmp/seven.xml et modifier le nom de l’image disque et le type (qcow2). Supprimer la ligne mentionnant l’iso de windows. Enfin, pour le problème des cpu, ajouter le paragraphe suivant après la section « vcpu » :

<cpu> <topology sockets=’1′ cores=’4′ threads=’1’/> </cpu>

Il ne reste plus qu’a importer cette nouvelle configuration et à relancer la VM:

virsh undefine seven
virsh define /tmp/seven.xml
virsh start seven

Voila pour les bases de la création d’une VM sous Windows. Amusez vous bien !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.