<divclass="col-main cell cell--auto"><!-- start custom main top snippet --><divid="results-container"class="search-result js-search-result"></div><!-- end custom main top snippet -->
<p><strong>KVM</strong> est une bifurcation de <strong>QEMU</strong>. Le code KVM est modifié pour prendre en charge l’accélération matérielle lorsqu’elle est disponible (même architecture pour la VM hôte et la VM invitée).</p>
<p>La plupart du temps, la <strong>QEMU</strong> est utilisée pour émuler une autre architecture (par exemple, émuler ARM/Power arch. en utilisant un processeur x86. Exemple : faire tourner une image RaspberryPI qui fonctionne sur ARM dans un ordinateur équipé d’un processeur Intel)</p>
<p>Une différence entre les deux est que la <strong>QEMU</strong> fonctionne sur un processeur sans avoir besoin d’une extension de virtualisation matérielle (Intel VT/VT-d, AMD-V) alors que la <strong>KVM</strong> l’utilise. Les extensions de virtualisation matérielle vous permettent d’accéder directement au matériel sur la machine physique. L’inconvénient est que la base de code <strong>KVM</strong> ne peut pas émuler une autre architecture.</p>
<h1id="kvmqemu">KVM/Qemu</h1>
<p><em>Kernel-based Virtual Machine (KVM) est un module de virtualisation pour le noyau Linux qui le transforme en hyperviseur</em></p>
<p><u>Simuler une machine complète pour avoir son propre environnement d’exécution.</u><br/>
<em>Les avantages sont nombreux, isolations des processus, plusieurs environnements différents, etc…</em></p>
<p>La virtualisation matérielle est possible au moyen de ce que l’on appelle des hyperviseurs.<br/>
<strong>Il existe plusieurs types d’hyperviseurs, classés en 2 niveaux.</strong></p>
<ul>
<li>Le niveau 1 est dit “natif”.
<ul>
<li><strong>Natif</strong> car les instructions processeurs du système virtuelle sont directement transmis aux hardware. Il faut donc vérifier la compatibilité entre les systèmes virtualisés et les composants matérielles.</li>
</ul>
</li>
<li>Le niveau 2 est dit “hosted”.
<ul>
<li><strong>Hosted</strong> car la virtualisation s’effectue grâce à un logiciel installé sur un système d’exploitation. Donc la machine virtualisée n’interagit pas directement avec le Hardware.</li>
</ul>
</li>
</ul>
<p><strong><u>KVM est un hyperviseur de type 1</u></strong>, il est intégré de manière native à beaucoup de distribution basées sur le noyau Linux. KVM pour Kernel-based Virtual Machine car il transforme le noyau linux sur lequel il est exécuté en hyperviseur, proxmox est basé dessus.
Il en existe d’autres.</p>
<p>On utilise <strong>QEMU</strong> (QuickEmulator) pour interagir avec <strong>KVM</strong>.</p>
<ul>
<li><u>**Qemu** est de type 1 et 2</u>.
<ul>
<li>Il peut simuler un environnement pour une machine totalement différente de la votre, par exemple une py sur un PC. Dans ce cas la il transforme les exécutions de processeurs pour les rendre compatibles avec le hardware, donc la il est de <strong>type 2</strong>.</li>
<li>Mais quand il est utilise avec <strong>KVM</strong> dans ce cas la il fonctionne en <strong>type 1</strong> avec des performances bien meilleures.</li>
</ul>
</li>
</ul>
<blockquote>
<p>En clair <strong>Qemu sert à manager les machines virtuels, c’est un client</strong>.<br/>
Et la liaison entre Qemu et KVM est faite via l’API libvirt ( management du réseau, stockages, clavier, souris, etc )</p>
</blockquote>
<p><ahref="http://libvirt.org/">libvirt</a> est une bibliothèque permettant d’interagir avec différentes solutions de virtualisation (cet article s’intéressera uniquement à KVM/QEMU, mais Xen, VirtualBox et d’autres sont aussi possibles)<br/>
<ahref="http://virt-manager.org/">Virtual Machine Manager</a> est un ensemble d’applications permettant de gérer les machines virtuelles</p>
<p>En mode graphique :</p>
<ul>
<li><strong>virt-viewer</strong> est une interface graphique permettant de se connecter sur une machine virtuelle</li>
<li><strong>virt-manager</strong> est une interface graphique permettant de gérer les machines virtuelles</li>
</ul>
<p>En ligne de commande :</p>
<ul>
<li><strong>virt-clone</strong> permet de dupliquer une machine existante</li>
<li><strong>virt-convert</strong> permet de convertir l’image d’une machine</li>
<li><strong>virt-image</strong> permet de créer un nouvelle machine à partir d’une image</li>
<li><strong>virt-install</strong> permet de créer une nouvelle machine ou d’importer une machine déjà créé ultérieurement avec qemu ou qemu-kvm</li>
</ul>
<p><ahref="http://www.nongnu.org/qemu/">QEMU</a> est une <u>solution d'émulation et de virtualisation</u> (avec kqemu un pilote permettant d’optimiser l’émulation lorsque qu’elle concerne la même architecture).QEMU peut utiliser KVM lors de l’exécution d’une architecture cible identique à l’architecture hôte. Par exemple, lorsque vous exécutez qemu-system-x86 sur un processeur compatible x86, vous pouvez profiter de l’accélération KVM - ce qui vous donne un avantage pour votre hôte et votre système invité.</p>
<p><ahref="http://www.linux-kvm.org/page/Main_Page">KVM</a> (<em>Kernel-based Virtual Machine</em>) est une <u>solution de virtualisation</u>, pour les processeurs disposant des capacités nécessaires, et intégré au noyau linux.Il supporte les processeurs Intel et AMD récents (x86 et x86_64), PPC 440, PPC 970, S/390, ARM (Cortex A15, AArch64), et les processeurs MIPS32.</p>
<fontcolor="red"><b>Vous ne pouvez pas utiliser KVM en même temps que VirtualBox. Il faudra en effet fermer KVM pour utiliser VirtualBox et vice versa. Ou désactiver le support de la virtualisation processeur dans VirtualBox</b></font>
<h3id="debian">Debian</h3>
<p>Vous pouvez utiliser KVM pour exécuter plusieurs systèmes d’exploitation tels que Windows, *BSD, distribution Linux en utilisant des machines virtuelles. Chaque machine virtuelle a son disque privé, sa carte graphique, une carte réseau et plus encore.</p>
<ul>
<li>Le serveur hôte situé dans le centre de données distant et c’est un serveur sans affichage.</li>
<li>Toutes les commandes de ce tutoriel ont été tapées via une session <strong>ssh</strong>.</li>
<li>Vous avez besoin d’un client vnc pour installer le système d’exploitation invité.</li>
<li>Dans ce tutoriel, vous apprendrez comment installer le logiciel KVM sur le serveur Debian Linux 9.x et utiliser KVM pour configurer votre première VM invitée.</li>
</ul>
<h4id="installation-sur-serveur-debian">Installation sur serveur debian</h4>
<p>On utilise ssh pour se connecter au serveur<br/>
<p>Pour que le module soit rechargé au prochain démarrage</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>echo "vhost_net" | sudo tee -a /etc/modules
</code></pre></div></div>
<h4id="ajout-utilisateur-au-groupe-libvirt">Ajout utilisateur au groupe libvirt</h4>
<p>Si vous voulez que l’utilisateur normal/régulier puisse gérer les machines virtuelles. Ajouter l’utilisateur $USER à libvirt et libvirt-qemu en utilisant la commande <em>usermod</em></p>
<h4id="kvm-supporté-par-le-cpu-">kvm supporté par le CPU ?</h4>
<p>Exécutez la commande <em>egrep</em> suivante pour vérifier que <strong>Intel VMX</strong> ou <strong>AMD SVM</strong> est supporté sur votre CPU</p>
<p>Lors de l’utilisation du réseau par défaut de libvirt, libvirt va connecter l’interface de la machine virtuelle à un pont appelé virbr0. Il existe un processus dnsmasq géré par libvirt qui distribuera une adresse IP sur le sous-réseau 192.168.122.0/24, et libvirt a des règles iptables pour faire NAT pour les adresses IP sur ce sous-réseau.</p>
</blockquote>
<h4id="machine-virtuelle">Machine virtuelle</h4>
<p>Voyons d’abord s’il existe des machines virtuelles. Pour afficher la liste des machines virtuelles disponibles, exécutez :</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>sudo virsh list --all
</code></pre></div></div>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code> Id Name State
--------------------
</code></pre></div></div>
<p>Il n’y a pas de machine virtuelle disponible en ce moment.<br/>
Créer une machine virtuelle <strong>manjaro-xfce</strong> avec 2000 Mo de RAM (2Go), 1 CPU core, 10 Go Hdd.</p>
<p>Veuillez vous assurer d’avoir manjaro-xfce-18 ISO image dans le chemin <strong>/var/lib/libvirt/boot/</strong> ou tout autre chemin que vous avez donné dans la commande ci-dessus.</p>
<p>Décomposons la commande ci-dessus et voyons ce que chaque option fait.</p>
<ul>
<li><strong>-name</strong> : Cette option définit le nom du nom virtuel. Dans notre cas, le nom de VM est Ubuntu-16.04.</li>
<li><strong>-ram=512</strong> : Affecte 512 Mo de RAM à la VM.</li>
<li><strong>-vcpus=1</strong> : Indique le nombre de cœurs CPU dans la VM.</li>
<li><strong>-cpu host</strong> : Optimise les propriétés du CPU pour la VM en exposant la configuration du CPU de l’hôte à l’invité.</li>
<li><strong>-hvm</strong> : Demande la virtualisation complète du matériel.(Non Utilisé)</li>
<li><strong>–network</strong> : Réseau par défaut</li>
<li><strong>-disk path</strong> : L’emplacement pour sauvegarder le hdd et la taille de la machine virtuelle. Dans notre exemple, j’ai alloué une taille de hdd de 8 Go.</li>
<li><strong>-cdrom</strong> : L’emplacement de l’image ISO de l’installateur. Veuillez noter que vous devez avoir l’image ISO actuelle à cet endroit.</li>
<li><strong>-graphics vnc</strong> : Permet à la VNC d’accéder à la VM depuis un client distant.</li>
</ul>
<p>Le déroulement</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>WARNING No operating system detected, VM performance may suffer. Specify an OS with --os-variant for optimal results.
WARNING Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package.
WARNING No console to launch for the guest, defaulting to --wait -1
Starting install...
Allocating 'manjaro-xfce-18-vm1' | 10 GB 00:00:00
Domain installation still in progress. Waiting for installation to complete.
</code></pre></div></div>
<blockquote>
<p><strong>ATTENTION!!!</strong><br/>
<em>Rien n’est apparu parce que vous avez lancé virt-install sur un terminal qui n’avait pas d’information d’affichage X disponible, donc il ne pouvait pas démarrer virt-viewer pour afficher la console de la machine virtuelle.<br/>
Éventuellement, l’installation de la VM sera terminée et la VM s’éteindra. A ce stade, virt-install redémarrera la VM et quittera elle-même. Vous pouvez également appuyer sur Ctrl+C pour arrêter l’attente de l’installation virt-install. Comme la VM est toujours en cours d’exécution, l’installation se poursuivra, mais la VM restera éteinte à la fin, plutôt que de redémarrer dans le système nouvellement installé.<br/>
Vous pouvez également utiliser virt-manager sur votre système local pour visualiser la console de la VM pendant l’installation, si virt-manager a la permission de gérer l’hyperviseur distant.</em></p>
</blockquote>
<h4id="accès-aux-machines-virtuelles-via-virtual-manager--ssh">Accès aux machines virtuelles via Virtual Manager + ssh</h4>
<p>Client test</p>
<p>La boîte de dialogue de l’interface graphique du gestionnaire de virt n’a pas la possibilité de spécifier un port ssh autre que par défaut ou la clé privée à utiliser lors de la connexion au serveur distant, mais cela se fait facilement en démarrant virt-manager avec le paramètre ‘-c’.</p>
<p>Dans l’exemple ci-dessus, nous nous connectons en tant que’myuser’ au port d’écoute ssh non par défaut de 2222, et utilisons la clé privée trouvée dans le répertoire courant du fichier’id_rsa’.</p>
<p>virt-manager devrait vous demander immédiatement la phrase de chiffrement protégeant la clé privée (ce n’est pas le mot de passe de l’utilisateur !), et une fois que vous l’aurez entré, vous verrez virt-manager comme si vous étiez assis sur l’hôte KVM localement.</p>
<p>Notez le numéro de port 5900. Installez n’importe quelle application client VNC.</p>
</blockquote>
<p>Pour ce guide, j’utiliserai TigerVnc. TigerVNC est disponible dans les dépôts par défaut d’Arch Linux. Pour l’installer sur des systèmes basés sur Arch, exécutez :</p>
<p>Commencez ensuite à installer la VM Manjaro comme vous le faites dans le système physique.</p>
<p>De même, vous pouvez configurer autant de machines virtuelles en fonction des spécifications matérielles du serveur.</p>
<p>Vous pouvez également utiliser l’utilitaire <strong>virt-viewer</strong> pour installer le système d’exploitation dans les machines invitées. virt-viewer est disponible dans la plupart des dépôts par défaut de la distribution Linux. Après avoir installé virt-viewer, exécutez la commande suivante pour établir l’accès VNC à la VM.</p>
<li><codeclass="language-plaintext highlighter-rouge">-hda</code> : l’image à utiliser comme disque dur</li>
<li><codeclass="language-plaintext highlighter-rouge">-boot d </code>: boot sur le cd</li>
<li><codeclass="language-plaintext highlighter-rouge">-cdrom</code> : l’iso à utiliser</li>
<li><codeclass="language-plaintext highlighter-rouge">-net nic</code> : crée une interface réseau</li>
<li><codeclass="language-plaintext highlighter-rouge">-net user</code> : user mode networking, le dhcp et la passerelle sont émulés. Il suffit de lancer un client dhcp pour avoir accès au réseau internet de la machine hôte (en NAT). (Note: cela ne fonctionne qu’avec les protocoles tcp et udp, donc, ICMP, et par conséquent ping ne fonctionneront pas)</li>
</ul>
<p>Pour un système en 32 bits, la commande à utiliser est : <codeclass="language-plaintext highlighter-rouge">qemu-system-i386</code></p>
<p><em>Contrairement à d’autres programmes de virtualisation tels que VirtualBox et VMware, QEMU ne fournit pas d’interface graphique pour gérer les machines virtuelles (autre que la fenêtre qui apparaît lors de l’exécution d’une machine virtuelle), ni un moyen de créer des machines virtuelles persistantes avec des paramètres sauvegardés. Tous les paramètres pour exécuter une machine virtuelle doivent être spécifiés sur la ligne de commande à chaque lancement, sauf si vous avez créé un script personnalisé pour démarrer votre (vos) machine(s) virtuelle(s). Cependant, il existe plusieurs interfaces graphiques pour QEMU : <strong>virt-manager</strong> , gnome-boxes, qemu-launcherAUR, qtemuAUR, aqemuAUR</em><br/>
Des frontaux supplémentaires avec support QEMU sont disponibles pour libvirt.</p>
<p><strong>Support matériel</strong></p>
<p>KVM exige que le processeur de l’hôte de la machine virtuelle soit compatible avec la virtualisation (nommé VT-x pour les processeurs Intel et AMD-V pour les processeurs AMD). Vous pouvez vérifier si votre processeur prend en charge la virtualisation matérielle à l’aide de la commande suivante :</p>
<p>Si rien n’est affiché après l’exécution de la commande, alors votre processeur ne prend pas en charge la virtualisation matérielle et vous ne pourrez pas utiliser KVM.</p>
<blockquote>
<p><strong>Remarque</strong> : Vérifier l’activation de la prise en charge de la virtualisation dans le BIOS.</p>
</blockquote>
<p><strong>Support du noyau</strong></p>
<p>Les noyaux Arch Linux fournissent les modules de noyau appropriés pour supporter KVM et VIRTIO.</p>
<p><strong>Modules KVM</strong></p>
<p>Vous pouvez vérifier si les modules nécessaires (kvm et l’un de kvm_amd, kvm_intel) sont disponibles dans votre noyau avec la commande suivante (en supposant que votre noyau est compilé avec CONFIG_IKCONFIG_PROC) :</p>
<p><em>La para-virtualisation fournit un moyen de communication rapide et efficace permettant aux invités d’utiliser des appareils sur la machine hôte. KVM fournit des périphériques para-virtualisés aux machines virtuelles en utilisant l’API Virtio comme couche entre l’hyperviseur et l’invité.</em></p>
<p>Tous les périphériques virtio ont deux parties : le périphérique hôte et le pilote invité.</p>
<p>Utilisez la commande suivante pour vérifier si les modules nécessaires sont disponibles :</p>
<p>Si les commandes ci-dessus ne renvoient rien, vous devez <ahref="https://wiki.archlinux.org/index.php/Kernel_modules#Manual_module_handling">charger les modules du noyau manuellement</a>.</p>
</blockquote>
<p>Liste des dispositifs para-virtualisés</p>
<ul>
<li>dispositif de réseau (virtio-net)</li>
<li>dispositif de blocage (virtio-blk)</li>
<li>dispositif de contrôle (virtio-scsi)</li>
<li>appareil en série (virtio-serial)</li>
<li>dispositif à ballonnet (virtio-balloon)</li>
</ul>
<p><strong>Chargement des modules du noyau</strong></p>
<p>Les modules kvm et kvm-intel/kvm-amd doivent être chargés automatiquement, sinon, voir la page traitant des <ahref="https://wiki.archlinux.fr/Kernel_modules">modules du noyau</a>.</p>
<p><strong>Astuce</strong> : Si modprobing kvm_intel ou kvm_amd échoue mais que modprobing kvm réussit, (et lscpu prétend que l’accélération matérielle est supportée), vérifiez vos paramètres BIOS.</p>
</blockquote>
<p>Certains fournisseurs (en particulier les fournisseurs d’ordinateurs portables) désactivent ces extensions de processeur par défaut. Pour déterminer s’il n’y a pas de support matériel ou si les extensions sont désactivées dans le BIOS, la sortie de dmesg après avoir échoué à modprobe le dira.</p>
<p>libguestfs est un ensemble d’outils utilisés pour accéder et modifier les images disque des machines virtuelles (VM). Vous pouvez l’utiliser pour :</p>
<ul>
<li>visualiser et modifier des fichiers à l’intérieur des invités</li>
<li>la modification des scripts des VM</li>
<li>surveillance du disque utilisé/ statistiques gratuites</li>
<p>Note : si systemd est installé le fichier /etc/sysctl.conf n’existe plus et est remplacé par un dossier sysctl.d où mettre les *.conf nécessaires. On doit y créer un fichier (ex: /etc/sysctl.d/99-sysctl.conf). Dans ce cas, pour que la commande “sysctl -p” fonctionne il faut indiquer le fichier, par ex sysctl -p /etc/sysctl.d/fichier.conf. Ou avoir créé un lien symbolique /etc/sysctl.conf vers /etc/sysctl.d/99-sysctl.conf</p>
</blockquote>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>sudo nano /etc/sysctl.d/99-sysctl.conf # activation au démarrage
net.ipv4.ip_forward = 1
</code></pre></div></div>
<h4id="service-libvirtd-1">Service libvirtd</h4>
<p>Il faut lancer le service <strong>libvirtd</strong></p>
<h4id="créer-et-configurer-une-passerelle-réseau-pour-kvm">Créer et configurer une passerelle réseau pour KVM</h4>
<p>Le pont Linux, lorsqu’il est utilisé dans KVM, permet à une machine virtuelle d’accéder à un réseau et à des services externes en dehors de l’environnement virtuel.</p>
<p>Il existe différentes façons de configurer le Bridge Networking sous Linux pour une utilisation en KVM. Le réseau par défaut utilisé par une machine virtuelle lancée dans KVM est le réseau NAT. Avec le réseau NAT, un réseau virtuel est créé pour les machines invitées qui est ensuite mis en correspondance avec le réseau hôte pour fournir une connectivité internet.</p>
<p>Lorsque vous configurez et utilisez la mise en réseau pontée, les systèmes d’exploitation invités accèdent à un réseau externe connecté directement à la machine hôte. Un pont peut être créé soit à l’aide du <strong>gestionnaire de machines virtuelles</strong>, soit à l’aide de l’outil de ligne de commande <strong>virsh</strong>, soit en éditant directement des scripts réseau, soit en utilisant les outils de gestion de réseau Linux.</p>
<h4id="création-dune-passerelle-réseau-avec-le-gestionnaire-de-machines-virtuelles">Création d’une passerelle réseau avec le “Gestionnaire de machines virtuelles”</h4>
<p>Ouvrez le <strong>Gestionnaire de machines virtuelles</strong>, puis allez dans <br/>
Édition → Détails de la connexion → Réseaux virtuels</p>
<p>Configurez une nouvelle interface réseau en cliquant sur le + en bas de la fenêtre. Donnez un nom au réseau virtuel.<br/>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code> 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 : WARN (No ACPI DMAR table found, IOMMU either disabled in BIOS or not supported by this hardware platform)
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
</code></pre></div></div>
<p>Dans notre cas , une alerte <strong>IOMMU</strong> (<em>En informatique, une unité de gestion de mémoire d’entrée-sortie (IOMMU) est une unité de gestion de mémoire (MMU) qui connecte un bus E/S à accès direct à la mémoire principale (compatible DMA). Comme une MMU traditionnelle, qui traduit les adresses virtuelles visibles par le CPU en adresses physiques, l’IOMMU met en correspondance les adresses virtuelles visibles par l’appareil (appelées aussi adresses d’appareil ou adresses E/S dans ce contexte) en adresses physiques.</em>)<br/>
Pour activer le support <strong>IOMMU</strong> , éditer (en mode root) le fichier <strong>/etc/default/grub</strong> et ajouter <em>intel_iommu=on</em> à la ligne existante <strong>GRUB_CMDLINE_LINUX</strong><br/>
<p><strong>utilisateur</strong> et <strong>groupe</strong> sont remplacés par ceux du dossier que l’on veut partager sur la machine hôte et supprimer le # en début de ligne.</p>
<p>Redémarrer le service libvirtd pour que ces modifications soient prises en compte:</p>
<p><em>Cela va permettre à la machine virtuelle d’écrire dans le dossier partagé avec l’identité de notre utilisateur plutôt qu’avec l’identité Libvirt Qemu paramétrée par défaut. Ainsi notre utilisateur aura accès aux fichiers créés par le serveur situé sur la VM et pourra les modifier sans souci.</em></p>
<p>Dans <strong>virt-manager</strong>, <strong>“Edition” -> “Détails de la machine virtuelle”</strong> et dans les informations de la machine (icône “Afficher les détails du matériel virtuel”) ,cliquer sur “Ajouter un matériel”, puis sur “Système de fichiers”.Modifier suivant le modèle ci-dessous.</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>sudo mount -a
</code></pre></div></div>
<blockquote>
<p><em>Le partage ne peut pas être monté et édité sur plusieurs hôtes en même temps. Assurez-vous donc de le démonter avant de le monter sur un autre hôte invité.</em></p>
</blockquote>
<h3id="créer-booter-installer-un-os-et-importer">Créer ,booter ,installer un os et importer</h3>
<h4id="créer-une-image-via-qemu">Créer une image via qemu</h4>
<li><strong>-f</strong> → format de KVM pour le fichier image, qcow2 est le format kvm par défaut, raw est compatible avec Virtualbox et VMware</li>
<li><strong>20G</strong> → Remplacer par la valeur souhaitée, ce sera la taille du disque dur virtuel</li>
</ul>
<h4id="booter-sur-une-iso-et-installer-los-via-kvm-dans-limage-précédemment-créée">Booter sur une ISO et installer l’OS via KVM dans l’image précédemment créée</h4>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>kvm -m 1024 -cdrom /CHEMIN_VERS_VOTRE_ISO -boot d /var/lib/libvirt/images/DOMAINE.img
</code></pre></div></div>
<ul>
<li><strong>-m 1024</strong> → La quantité de ram allouée</li>
<li><strong>-cdrom</strong> → spécifie le chemin vers votre ISO</li>
<li><strong>-boot d</strong> → spécifie sur quelle domaine booter, un système émulé s’appelle domaine, remplacer DOMAINE par un titre parlant par exemple DebianVM</li>
</ul>
<h4id="booter-simplement-sur-los-fraîchement-installé-directement-via-kvm">Booter simplement sur l’OS fraîchement installé directement via KVM</h4>
<p><strong>Attention</strong> en utilisant KVM directement et non avec <strong>libvirt</strong>, <u>les machines virtuelles ne seront pas listés avec virtmanager ou la commande</u> : <codeclass="language-plaintext highlighter-rouge">virsh list</code></p>
</blockquote>
<h4id="import-machine-créée-via-qemu-pour-gestion-avec-virt-manager-libvirt">Import machine créée via “qemu” pour gestion avec “virt-manager” (libvirt)</h4>
<p>Si vous avez déjà créé précédemment une machine virtuelle avec <strong>qemu</strong> vous pouvez importer cette machine virtuelle pour qu’elle soit gérée via <strong>virt-manager</strong> et par conséquent qu’elle utilise <strong>libvirt</strong>.</p>
<p>Par exemple, si vous avez une image qui se trouve dans <strong>/srv/vms/Fedora12.img</strong>, effectuez ces opérations:</p>
<li>Les options <em>–name</em>, <em>–ram</em> sont obligatoires.</li>
<li>Les options <em>–os-type</em> et <em>–os-variant</em> ne sont pas obligatoires mais permettent tout de même une meilleure gestion pour le démarrage et mémoire au boot.</li>
</ul>
<p>Pour les machines virtuelles Windows, c’est toujours aussi simple:</p>
<p>Aussitôt la génération de la configuration effectuée, la machine va démarrer. Elle apparait alors dans <strong>virt-manager</strong>.</p>
<h3id="kvmqemu-cli-avec-virsh">KVM/Qemu cli avec “virsh”</h3>
<ul>
<li><ahref="https://www.zenzla.com/linux/1462-la-virtualisation-avec-kvm-libvirt-et-virt-manager.html">La virtualisation avec KVM, libvirt et virt-manager</a></li>
</ul>
<p>Sur l’ordinateur hôte (où kvm/qemu est installé)</p>
<h4id="connexion-à-lhyperviseur">Connexion à l’hyperviseur</h4>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>Bienvenue dans virsh, le terminal de virtualisation interactif.
Taper: «help» pour l'aide ou «help» avec la commande
«quit» pour quitter
virsh #
</code></pre></div></div>
<h4id="liste-des-commandes-sous-virsh">Liste des commandes sous “virsh”</h4>
<p>Toutes les commandes suivantes se font à la suite du <em>prompt</em><strong>virsh</strong></p>
<p>Confirmez la création du pont et l’adresse IP.</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>ip addr show dev br10
</code></pre></div></div>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>4: br10: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
<p>En cas d’erreur : <ahref="http://ask.xmodulo.com/network-default-is-not-active.html">How to fix “network ‘default’ is not active” error in libvirt</a></p>
<h4id="personnaliser-sa-configuration-réseau">personnaliser sa configuration réseau</h4>
<h4id="démarrage-des-machines-virtuelles-qemu-au-démarrage">Démarrage des machines virtuelles QEMU au démarrage</h4>
<p>Si une <u>machine virtuelle est configurée avec libvirt</u>, elle peut être configurée avec <strong>virsh autostart</strong> ou via l’interface graphique du gestionnaire de virt (vmm, virt-manager) pour démarrer au démarrage de l’hôte en allant dans les <strong>Options de démarrage</strong> de la machine virtuelle et en sélectionnant <em>“Démarrer la machine virtuelle au démarrage de l’hôte”</em>.</p>
<p>Démarre automatiquement le réseau au démarrage de l’hôte (instruction en ligne de commande)</p>
<p>Si la valeur est a 0, dé-commenter dans <strong>/etc/sysctl.conf</strong> le paramètre <em>net.ipv4.ip_forward</em> pour l’activer au démarrage :</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code># Uncomment the next line to enable packet forwarding for IPv4
<p><em>Monter un disque virtuel VDI sur une partition linux avec Qemu et nbd</em><br/>
L’image VDI ne doit pas être utilisée (stopper la machine virtuelle qui l’utilise).</p>
<p>Nous allons utiliser QEMU pour monter le disque VDI.Il faut installer le binaire <strong>qemu-nbd</strong>, qui est contenu dans <strong>qemu-utils</strong> sous Debian , <strong>qemu-img</strong> sous Fedora.<br/>
mount /dev/nbd0p1 /mnt # contenu disk.vdi accessible dans /mnt.
</code></pre></div></div>
<blockquote>
<p><strong>disk.vdi</strong> : image VDI, <strong>/dev/ndb0</strong> : disque vu par le système, <strong>/dev/nbd0p1</strong> : première partition du disque.</p>
<li><ahref="https://www.utappia.org/2016/04/how-to-migrate-your-virtual-box.html">How to migrate your Virtual Box machines to the KVM-VirtManager (Part 2)</a>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>VBoxManage clonehd "/home/yannick/virtuel/Vbox/winten/winten.vdi" /home/yannick/virtuel/KVM/winten.raw --format raw
qemu-img convert -f raw /home/yannick/virtuel/KVM/winten.raw -O qcow2 /home/yannick/virtuel/KVM/winten.qcow2
rm /home/yannick/virtuel/KVM/winten.raw
</code></pre></div></div>
<h3id="kvm-qemussh">KVM qemu+ssh</h3>
<p><em>KVM : virt-manager pour se connecter à une console distante avec qemu+ssh</em><br/>
Si vous exécutez <ahref="https://www.linux-kvm.org/page/Main_Page">KVM</a> sur un serveur en console seule, vous avez toujours la possibilité d’utiliser le gestionnaire graphique <ahref="https://virt-manager.org/">virt-manager</a>. Il suffit de préciser le <ahref="https://libvirt.org/remote.html">mode de communication</a> (ssh, tls, tcp, tcp, etc).</p>
<p>Dans cet article, je vais montrer comment utiliser virt-manager à partir d’un bureau client Ubuntu vers un serveur exécutant KVM et libvirtd, avec la connexion “tunneled” sur ssh et authentifié avec PKI.</p>
<p>L’affichage VNC à distance de ces VMs est envoyé par ce même tunnel ssh.</p>
<p>En utilisant la solution de tunneling ssh décrite dans cet article, le service libvirtd côté serveur n’a <em>pas</em> besoin d’activer l’écoute sur TCP dans “/etc/libvirt/libvirtd.conf”.</p>
<h4id="ssh-prérequis">SSH prérequis</h4>
<p>La première condition est que vous puissiez utiliser ssh pour vous connecter au serveur KVM distant en utilisant la clé privée pour l’authentification. Cet article montre comment configurer SSH pour l’<ahref="https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-ubuntu-1604">authentification par clé publique (en)</a>.</p>
<p>Après avoir activé l’authentification par clé publique, vous devriez pouvoir effectuer un ssh dans l’hôte distant en utilisant la clé privée locale.</p>
<p>Au minimum, vous avez besoin de l’interface graphique du gestionnaire de virt et de l’utilitaire qui vous demande la phrase de passe (passphrase) ssh.</p>
# une installation plus complète si vous effectuez un travail KVM local
sudo apt-get install virt-manager
</code></pre></div></div>
<h4id="test-client">Test client</h4>
<p>La boîte de dialogue de l’interface graphique du gestionnaire de virt n’a pas la possibilité de spécifier un port ssh autre que par défaut ou la clé privée à utiliser lors de la connexion au serveur distant, mais cela se fait facilement en démarrant virt-manager avec le paramètre’-c’.</p>
<p>Dans l’exemple ci-dessus, nous nous connectons en tant que ‘myuser’ au port d’écoute ssh non par défaut de 2222, et utilisons la clé privée trouvée dans le répertoire courant (fichier’id_rsa’).</p>
<p>virt-manager devrait vous demander immédiatement la phrase de chiffrement protégeant la clé privée (ce n’est pas le mot de passe de l’utilisateur !), et une fois que vous l’aurez entré, vous verrez virt-manager comme si vous étiez assis sur l’hôte KVM localement.</p>
<p>If you want to open a remote console to a VM, then before powering on make sure you are using the “Display VNC” (not Spice!) listening to ‘localhost’ with the port automatically selected. This communication will be tunneled over SSH and does not require additional ports open on the server firewall.
Si vous voulez ouvrir une console distante à une VM, alors avant de mettre sous tension, assurez-vous d’utiliser la fonction “Afficher VNC” (Display VNC) pour écouter’localhost’ avec le port automatiquement sélectionné. Cette communication sera tunnelisée par SSH et ne nécessite pas de ports supplémentaires ouverts sur le pare-feu du serveur.</p>
<h4id="notes">NOTES</h4>
<p>Spécification du port VNC avec virt-install</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code># Utiliser le port statique 5900
--graphics vnc,port=5900
# utiliser la numérotation automatique (5900 pour la 1ère VM, 5901 pour la 2ème, etc)
--graphics vnc,port=-1
</code></pre></div></div>
<h3id="exécuter-virt-manager-sans-privilèges-root">Exécuter Virt-Manager sans privilèges root</h3>
<p><em>Comment exécuter Virt-Manager, Libvirt avec un utilisateur normal sans privilèges root et sans mot de passe</em><br/>
<strong>Virt-manager</strong> et <strong>libvirt</strong> sont les principaux outils utilisés pour la virtualisation dans l’écosystème Linux. En tant qu’utilisateur final, j’utilise ces outils pour créer et exécuter des machines virtuelles. Mais chaque fois que j’essaie de faire fonctionner cet outil, le mot de passe sudo m’est demandé.<br/>
<strong>Solution pour exécuter ces outils sans mettre de mot de passe et changer aucune autorisation du côté de la virtualisation</strong></p>
<h4id="polkit">Polkit</h4>
<p>PolicyKit ou simplement Polkit est un composant utilisé pour contrôler les privilèges du système dans les systèmes d’exploitation Unix et Linux.<br/>
Nous allons utiliser Polkit pour nous authentifier et démarrer <strong>virt-manager</strong> sans mot de passe.</p>
<h4id="créer-un-groupe-pour-la-virtualisation">Créer un groupe pour la virtualisation</h4>
<p>Pour exécuter des services et des logiciels de virtualisation, nous avons besoin d’un groupe ayant le droit d’accéder aux ressources système associées.</p>
<fontcolor="red"><b>La plupart des systèmes d'exploitation génére le groupe sous le nom de <fontcolor="green">libvirt</font> au cours de l'installation<br/>
Sinon, créez le groupe avec la commande suivante.(nécessite des privilèges root)</b></font>
<h4id="mettre-lutilisateur-dans-le-groupe-de-virtualisation">Mettre l’utilisateur dans le groupe de virtualisation</h4>
<p>Nous devons maintenant placer notre utilisateur normal ou actuel dans le groupe de virtualisation. Comme indiqué à l’étape précédente, le nom du groupe est <strong>libvirt</strong><br/>
Dans cette commande, nous ajoutons le groupe secondaire nommé <strong>libvirt</strong> à l’utilisateur courant $USER</p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>sudo usermod -a -G libvirt $USER # on peut spécifier le nom utilisateur au lieu de $USER
<p>Un “reboot” de la machine est nécessaire pour la prise en charge</p>
</blockquote>
<h1id="comment-installer-une-image-virtuelle-sur-un-serveur-debian-linux-9-headless-sans-affichage">Comment installer une image virtuelle sur un serveur Debian Linux 9 Headless (sans affichage)</h1>
<p>La machine virtuelle basée sur le noyau (KVM) est un module de virtualisation pour le noyau Linux qui le transforme en hyperviseur.<br/>
Vous pouvez utiliser KVM pour exécuter plusieurs systèmes d’exploitation tels que Windows, * BSD et la distribution Linux à l’aide de machines virtuelles. Chaque machine virtuelle a son disque privé, sa carte graphique, une carte réseau, etc.</p>
<p>Procédure d’installation du serveur KVM sur un serveur Debian Linux 9.x</p>
<ol>
<li>Le serveur hôte est distant, c’est un serveur sans affichage.</li>
<li>Toutes les commandes sont saisies dans une <u>session ssh</u>.</li>
<li>Avoir un client vnc pour installer le système d’exploitation invité.</li>
<li>Le but est d’installer le logiciel KVM sur un serveur sans affichage Debian Linux 9.x et à utiliser KVM pour configurer une machine virtuelle invitée.</li>
<h4id="configurer-la-mise-en-réseau-pont-sur-debian">Configurer la mise en réseau “pont” sur Debian</h4>
<p>Création de l’interface pont br0 (bridge Interface) comme connexion réseau dans la configuration d’invités de machine virtuelle pour l’interface eth0</p>
<divclass="language-bash highlighter-rouge"><divclass="highlight"><preclass="highlight"><code><spanclass="c">### make sure all config related to eth0 deleted ##</span>
auto br0
iface br0 inet static
address 192.168.2.23 <spanclass="c">## set up/netmask/broadcast/gateway as per your setup</span>
broadcast 192.168.2.255
netmask 255.255.255.0
gateway 192.168.2.254
bridge_ports eth0 <spanclass="c"># replace eth0 with your actual interface name</span>
bridge_stp off <spanclass="c"># disable Spanning Tree Protocol</span>
bridge_waitport 0 <spanclass="c"># no delay before a port becomes available</span>
bridge_fd 0 <spanclass="c"># no forwarding delay</span>
</code></pre></div></div>
<p>Redémarrer le service réseau sur Linux (si network-manager utilisé)</p>
<h4id="création-machine-virtuelle-à-laide-dun-programme-dinstallation-dimage-iso">Création machine virtuelle à l’aide d’un programme d’installation d’image ISO</h4>
<p>Vous pouvez également utiliser la commande suivante</p>
<p>sudo virsh vncdisplay centos7</p>
<p>Veuillez noter la valeur du port (5901). Vous devez utiliser un client SSH pour configurer le tunnel et un client VNC pour accéder au serveur vnc distant.<br/>
Tapez la commande de transfert de port SSH suivante à partir de votre client/bureau:</p>
<p>Une fois le tunnel ssh établi, vous pouvez pointer votre client VNC vers votre propre adresse 127.0.0.1 (localhost) et le port 5901 comme suit:</p>
<p><imgsrc="/images/kvm-vnc1.png"alt=""/><br/>
Client VNC pour terminer l’installation de CentOS 7.x</p>
<p>L’écran d’installation invité de CentOS Linux 7 devrait s’afficher comme suit:</p>
<p><imgsrc="/images/kvm-vnc2.png"alt=""/><br/>
Installation de CentOS 7.x sur une machine virtuelle basée sur KVM</p>
<p>Suivez maintenant les instructions à l’écran et installez CentOS 7. Une fois installé, continuez et cliquez sur le bouton de redémarrage. Le serveur distant a fermé la connexion de notre client VNC. Vous pouvez vous reconnecter via le client KVM pour configurer le reste du serveur, y compris la session ou le pare-feu SSH.</p>
<h4id="utiliser-virt-builder-pour-créer-une-machine-virtuelle">Utiliser virt-builder pour créer une machine virtuelle</h4>
<p>La méthode ci-dessus (virt-install) fonctionne bien, mais si vous avez besoin de créer rapidement de nouvelles machines virtuelles, utliser <strong>virt-builder</strong>.</p>
<h4id="lister-les-machines-virtuelles-disponibles">lister les machines virtuelles disponibles</h4>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code>virt-builder --list | more
</code></pre></div></div>
<p>Vous pouvez utiliser la commande grep pour filtrer uniquement les machines virtuelles basées sur x86_64</p>
This template was generated by a script in the libguestfs source tree:
builder/templates/make-template.ml
Associated files used to prepare this template can be found in the
same directory.
</code></pre></div></div>
<h4id="créer-une-machine-virtuelle-debian-9x">Créer une machine virtuelle Debian 9.x</h4>
<p>Créer une machine virtuelle Debian 9 avec 10 Go d’espace disque, 2 Go de RAM, 2 vCPU et un mot de passe aléatoire pour le compte root (commande <codeclass="language-plaintext highlighter-rouge">virt-builder</code>)</p>
<p>Vous devez <u>désactiver le compte root pour la session SSH</u> et créer des clés SSH pour votre machine virtuelle . Connectez-vous comme ci-dessus:</p>
<p>Vérifiez que vous pouvez vous connecter en utilisant une adresse IP pour un utilisateur vmuser et utilisez ‘su -‘ pour devenir un utilisateur root:</p>
<p><ahref="https://serverfault.com/questions/627608/redirect-all-incoming-traffic-from-a-secondary-public-ip-to-an-internal-ip-addre/627624">Redirect all incoming traffic from a secondary public IP to an internal IP address using iptables — Server Fault</a></p>
<divclass="language-plaintext highlighter-rouge"><divclass="highlight"><preclass="highlight"><code># on the VM
roo@vm:/ fdisk -l /dev/vdaCommand (m for help): p
Device Boot Start End Sectors Size Id Type
/dev/vda1 * 2048 33554432 33552385 16G 83 LinuxCommand (m for help): d
[1,2.5]: 1
# delete the swap also and create it again as second primary, so start and en sector will set automaticly correctly.
Command (m for help): d
[1,2.5]: 2
Command (m for help): n
[primary ,extend]: p
partition number: 1
# WICHTIG: start sector take the value above showed!!
Command (m for help): t
# ext4
type: 83
Command (m for help): n
[primary ,extend]: p
partition number: 2
# start and end sector select default
Command (m for help): w
roo@vm:/ resize2fs /dev/sda1
roo@vm:/ reboot
</code></pre></div></div>
<h1id="liens">Liens</h1>
<ul>
<li><ahref="https://www.cyberciti.biz/faq/install-kvm-server-debian-linux-9-headless-server/">How to install KVM server on Debian Linux 9 Headless Server</a></li>
<li><ahref="https://www.zenzla.com/linux/1462-la-virtualisation-avec-kvm-libvirt-et-virt-manager.html">La virtualisation avec KVM, libvirt et virt-manager</a></li>
<li><ahref="https://blog.seboss666.info/2013/11/la-virtualisation-kvm-avec-libvirt/">La virtualisation KVM avec libvirt</a></li>
<li><ahref="https://blog.hedilenoir.com/index.php/2018/10/21/virtualisation-materielle-libre-sur-debian-jessie/">Virtualisation matérielle libre sur Linux avec QEMU/KVM + virt-manager (graphique)</a></li>
<li><ahref="https://www.fosslinux.com/2484/how-to-install-virtual-machine-manager-kvm-in-manjaro-and-arch-linux.htm">How to install Virtual Machine Manager (KVM) in Manjaro and Arch Linux</a></li>
<li><ahref="https://doc.fedora-fr.org/wiki/Virtualisation_:_KVM,_Qemu,_libvirt_en_images">KVM,Qemu,libvirt en images</a></li>
<li><ahref="https://blog.nicolargo.com/2012/02/apprentissage-de-qemulibvirt-par-lexemple.html">Apprentissage de Qemu/LibVirt par l’exemple</a></li>
<li><ahref="https://www.it-connect.fr/virtualisation-les-types-de-connexion-au-reseau/">Virtualisation – Les types de connexion au réseau</a></li>
<li><ahref="https://wiki.debian.org/fr/BridgeNetworkConnections">Etablir des ponts entre les connexions réseaux</a></li>
<li><ahref="https://libvirt.org/remote.html">Official libvirt documentation on remote connections</a></li>
<li><ahref="https://help.ubuntu.com/community/KVM/VirtManager">Ubuntu official virt-manager doc</a></li>
<li><ahref="https://www.michelebologna.net/2018/accessing-virt-manager-on-a-non-standard-ssh-port/">Specifying ‘-c’ to pass custom connection definition</a></li>
<li><ahref="https://www.cyberciti.biz/faq/how-to-reset-forgotten-root-password-for-linux-kvm-qcow2-image-vm/">Réinitialiser le mot de passe root pour la machine virtuelle KVM Linux</a></li>
<li><ahref="https://www.cyberciti.biz/faq/how-to-clone-existing-kvm-virtual-machine-images-on-linux/">Cloner des images de machine virtuelle KVM existantes sous Linux</a></li>
<li><ahref="https://www.cyberciti.biz/faq/reset-a-kvm-clone-virtual-machines-with-virt-sysprep-on-linux/">Réinitialiser une machine virtuelle clonée KVM avec virt-sysprep sous Linux</a></li>
<li><ahref="https://www.cyberciti.biz/faq/kvm-forward-ports-to-guests-vm-with-ufw-on-linux/">Ports de transfert KVM aux ordinateurs virtuels invités avec UFW sous Linux</a></li>
<li><ahref="https://www.cyberciti.biz/faq/create-vm-using-the-qcow2-image-file-in-kvm/">Créer une VM en utilisant le fichier image qcow2 dans KVM</a></li>
<li><ahref="https://www.ostechnix.com/setup-headless-virtualization-server-using-kvm-ubuntu/">Setup Headless Virtualization Server Using KVM In Ubuntu 18.04 LTS</a></li>
<li><ahref="https://computingforgeeks.com/complete-installation-of-kvmqemu-and-virt-manager-on-arch-linux-and-manjaro/">Complete Installation of KVM, QEMU and Virt Manager on Arch Linux and Manjaro</a></li>
<divclass="article__section-navigator clearfix"><divclass="previous"><span>PRÉCÉDENT</span><ahref="/2020/09/12/KVM-Partage-NFS-vm-windows.html">KVM QEMU virtualiser windows 10 sur Archlinux + partage NFS</a></div><divclass="next"><span>SUIVANT</span><ahref="/2020/09/13/PC1-ArchLinux-XFCE-ASUS-H110M-A.html">PC1 Ordinateur Bureau ArchLinux xfce</a></div></div></div>
</div>
<script>(function(){
var SOURCES = window.TEXT_VARIABLES.sources;
window.Lazyload.js(SOURCES.jquery, function() {
$(function() {
var $this ,$scroll;
var $articleContent = $('.js-article-content');
var hasSidebar = $('.js-page-root').hasClass('layout--page--sidebar');
var scroll = hasSidebar ? '.js-page-main' : 'html, body';