Sommaire
Introduction
Pour le contexte, je viens d'acheter un PC et bien que j'aie fouillé et patienté longtemps, aucune offre sans OS n'arrivait ou ne convenait donc j'ai cédé à la vente forcée d'un PC avec Windows.
Dans ce petit tutoriel, je vous explique donc comment déplacer cette licence Windows OEM vers une VM sur le même PC. Si vous avez déjà une licence achetée à part, il vous suffit de la spécifier à l'installation, on s'intéresse ici au cas des licences OEM préinstallées sur la carte mère.
L'intérêt de déplacer Windows dans une VM, c'est de ne pas bloquer une partie de l'espace disque avec une partition qui ne servira quasiment jamais. Là on peut déplacer l'image disque vers un stockage externe ou recréer la VM au besoin.
Dans ce tutoriel j'utilise libvirt via le GUI virt-manager, mais je me suis largement appuyé sur cet excellent tutoriel pour Proxmox d'Oliver Poncet que je vous invite à consulter.
Je précise immédiatement qu'il n'est pas nécessaire d'avoir gardé le Windows préinstallé sur la machine, ni même de l'avoir démarré une seule fois.
Dépendances
Pour parvenir à vos fins, il vous faudra les dépendances suivantes (en espérant ne rien oublier):
- dmidecode pour lire les infos de la carte mère
- libvirt
- qemu/KVM
- swtpm pour émuler un TPM
- edk2-ovmf pour émuler un UEFI avec Secure Boot
- Le fichier .iso de Windows 11 disponible sur le site de microsoft.
Sous ArchLinux: pacman -S dmidecode libvirt dnsmasq qemu-desktop swtmp
J'ai utilisé virt-manager pour me faciliter la vie, j'imagine qu'on peut s'en sortir en ligne de commande directement avec qemu.
Installation
Récupérer les informations utiles
Pour valider automatiquement votre licence, Windows utilise des informations disponibles depuis la carte mère.
D'abord, le numéro de série, modèle etc.:
$ sudo dmidecode
...
BIOS Information
Vendor: LENOVO
Version: NCCN16WW
Release Date: 02/02/2024
...
BIOS Revision: 1.16
Firmware Revision: 1.16
...
System Information
Manufacturer: LENOVO
Product Name: 83E3
Version: Yoga Pro 7 14AHP9
Serial Number: 9F5OEMTZ
UUID: a0a73af8-a886-4fbf-8f0d-5fd32c264a16
SKU Number: LENOVO_MT_83E3_BU_idea_FM_Yoga Pro 7 14AHP9
Family: Yoga Pro 7 14AHP9
(j'ai édité le serial et l'uuid)
Ensuite des informations enregistrées dans des tables ACPI:
sudo cat /sys/firmware/acpi/tables/MSDM > ~/VMs/MSDM.bin
sudo cat /sys/firmware/acpi/tables/SLIC > ~/VMs/SLIC.bin
Créer la VM
La procédure démarre comme d'habitude, on suit l'assistant de virt-manager jusqu'au moment où il faut bien demander à modifier la configuration avant de démarrer.
Dans les options du BIOS, choisissez la config avec Secure Boot activé, chez moi le fichier se nomme OVMF_CODE.secboot.4m.fd
.
Ensuite il faut éditer directement le code XML qui décrit la configuration de la machine.
Si c'est la première fois dans virt-manager, il faut cocher une case dans les paramètres de l'appli pour le rendre éditable.
Pour commencer, modifiez le nœud racine xml pour spécifier le schéma, sinon certaines options seront rejetées :
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
Mettez aussi à jour l'uuid pour qu'il corresponde à celui indiqué par dmidecode:
<uuid>a0a73af8-a886-4fbf-8f0d-5fd32c264a16</uuid>
Ensuite, il faut indiquer à qemu d'intégrer les tables ACPI :
<qemu:commandline>
<qemu:arg value='-acpitable'/>
<qemu:arg value='file=/home/ngranger/VMs/MSDM.bin'/>
<qemu:arg value='-acpitable'/>
<qemu:arg value='file=/home/ngranger/VMs/SLIC.bin'/>
</qemu:commandline>
Puis il faut ajouter les informations de la carte mère :
<sysinfo type='smbios'>
<bios>
<entry name='vendor'>LENOVO</entry>
<entry name='version'>NCCN16WW</entry>
<entry name='date'>02/02/2024</entry>
<entry name='release'>1.16</entry>
</bios>
<system>
<entry name='manufacturer'>LENOVO</entry>
<entry name='product'>83E3</entry>
<entry name='version'>Yoga Pro 7 14AHP9</entry>
<entry name='uuid'>a0a73af8-a886-4fbf-8f0d-5fd32c264a16</entry>
<entry name='serial'>9F5OEMTZ</entry>
<entry name='family'>Yoga Pro 7 14AHP9</entry>
<entry name='sku'>LENOVO_MT_83E3_BU_idea_FM_Yoga Pro 7 14AHP9</entry>
</system>
</sysinfo>
Installation de Windows
La procédure est désormais habituelle.
Pour éviter d'avoir à utiliser un compte Microsoft, vous pouvez couper internet au moment où Windows redémarre pour la configuration du système.
Lorsque l'assistant en arrive à la connexion au réseau, tapez Maj-F10 pour ouvrir le terminal et exécutez la commande oobe\BypassNRO
.
Le PC redémarrera sur un assistant qui rend la connexion facultative.
Au démarrage, vous pourrez remettre internet et vérifier que la licence est bien activée.
Liens utiles
- Le tutoriel d'Oliver Poncet que j'ai adapté pour passer de Proxmox à libvirt.
- La documentation du fichier de config XML des VMs libvirt et le complément pour les argument qemu.
- Un commentaire sur les restrictions de licence pour les VMs (a priori c'est OK).
- La documentation de Microsoft sur les tables ACPI servant à la validation de la licence.
# Thx
Posté par Tarnyko (site web personnel) . Évalué à 4.
Procédure incroyable qui se révèlera utile dans peu de temps ; merci bien !
# Depuis le disque
Posté par nud . Évalué à 3. Dernière modification le 03 juin 2024 à 12:08.
As-tu déjà essayé de booter le windows dans une VM depuis le disque sur lequel il est déjà installé?
J'ai jamais réussi mais ça m'intéresserait pour le PC du bureau.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.