logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
atelier:chantier:virtualisation-avec-libvirt [08/05/2020 16:05]
framend
atelier:chantier:virtualisation-avec-libvirt [06/07/2020 23:00]
framend [Installation de la machine virtuelle]
Ligne 19: Ligne 19:
 Voici donc une méthode utilisant l'​hyperviseur KVM/qemu. J'ai choisi la techno libvirt/​KVM,​ pour son coté «full-virtualization» apportant, en principe, de meilleures performances. Voici donc une méthode utilisant l'​hyperviseur KVM/qemu. J'ai choisi la techno libvirt/​KVM,​ pour son coté «full-virtualization» apportant, en principe, de meilleures performances.
  
-En effet, lorsqu'​un CPU emule un CPU virtuel (vCPU) l'​hyperviseur doit «traduire » les instructions de l'un vers l'​autre. Ce qui implique un impact conséquent en terme de performances. Pour éviter ceci les technologies du type Intel VT-x et AMD-V permettent un transfert plus direct des instructions. Ce qui signifie que les instructions données au vCPU peuvent-être directement exécutés sur une partie du CPU physique.+En effet, lorsqu'​un CPU emule un CPU virtuel (vCPU) l'​hyperviseur doit «traduire» ​les instructions de l'un vers l'​autre. Ce qui implique un impact conséquent en terme de performances. Pour éviter ceci les technologies du type Intel VT-x et AMD-V permettent un transfert plus direct des instructions. Ce qui signifie que les instructions données au vCPU peuvent-être directement exécutés ​directement ​sur une partie du CPU physique.
  
 Je considère donc qemu comme l'​hyperviseur des machines virtuelles, KVM comme un agent accélérateur d'​instructions et libvirt (et tous ses composants),​ comme un gestionnaire de VM. Je considère donc qemu comme l'​hyperviseur des machines virtuelles, KVM comme un agent accélérateur d'​instructions et libvirt (et tous ses composants),​ comme un gestionnaire de VM.
Ligne 59: Ligne 59:
 newgrp <​user>​ libvirt-qemu</​code>​ newgrp <​user>​ libvirt-qemu</​code>​
  
-Il va maintenant s'agir de lancer le profil réseau de libvirt. Pour des VM créées en user non privilégié,​ il faudra utiliser sudo, sinon passer root via:<​code>​su -l</​code>​. +Il va maintenant s'agir de lancer le profil réseau de libvirt. Pour des VM créées en user non privilégié,​ il faudra utiliser sudo, sinon passer root via:<​code ​user>su -l</​code>​. 
-Libvirt utilise un profil déja enregistré sous le nom de « default». On va donc le lancer et le passer en auto-start afin d'​éviter d'​avoir à le faire à chaque utilisation:​+Libvirt utilise un profil déja enregistré sous le nom de «default». On va donc le lancer et le passer en auto-start afin d'​éviter d'​avoir à le faire à chaque utilisation:​
 <code user>​sudo virsh net-start default <code user>​sudo virsh net-start default
 sudo virsh net-autostart default sudo virsh net-autostart default
Ligne 66: Ligne 66:
 <note warning>​Attention:​ Avant d'​éditer un profil réseau il est impératif de le stopper!</​note>​ <note warning>​Attention:​ Avant d'​éditer un profil réseau il est impératif de le stopper!</​note>​
 En cas de besoin, vous pouvez stopper le profil réseau via: En cas de besoin, vous pouvez stopper le profil réseau via:
-<code user>​sudo virsh net-autostart ​default</​code>​+<code user>​sudo virsh net-destroy ​default</​code
 +La liste des profil réseau existants s'​obtient via: 
 +<code user>​sudo virsh net-list --all</​code>​ 
 +Ce qui doit renvoyer, pour un service nommé «default» lancé: 
 +<file sudo virsh net-list --all> Name      State    Autostart ​  ​Persistent 
 +-------------------------------------------- 
 + ​default ​  ​active ​  ​yes ​        yes 
 +</file>
  
 ===== Création du bridge réseau ===== ===== Création du bridge réseau =====
Ligne 73: Ligne 80:
 Plusieurs possiblités,​ via network-manager ou via le fichier /​etc/​network/​interfaces. Plusieurs possiblités,​ via network-manager ou via le fichier /​etc/​network/​interfaces.
  
-Ici, j'ai éliminé l'​usage de network-manager que je n'​utilise que sur des machines disposants d'une connection wifi. Un tuto sur son usage est cependant disponible ici: https://​debian-facile.org/​doc:​reseau:​network-manager+Ici, j'ai éliminé l'​usage de network-manager que je n'​utilise que sur des machines disposants d'une connection wifi. Un tuto sur son usage est cependant disponible ici:   
 +  * https://​debian-facile.org/​doc:​reseau:​network-manager
  
 Donc, pour un bridge réseau, éditer le fichier /​etc/​network/​interfaces de la manière suivante, en remplaçant évidemment le nom des interfaces par les votres: Donc, pour un bridge réseau, éditer le fichier /​etc/​network/​interfaces de la manière suivante, en remplaçant évidemment le nom des interfaces par les votres:
Ligne 99: Ligne 107:
     bridge_fd 0     bridge_fd 0
 </​file>​ </​file>​
 +
 +Ceci fait, un redémarrage du service networking sera de mise:
 +<code root>​systemctl restart networking.service</​code>​
 +Une vérification du fait qu'une adresse IP est obtenue par le bridge (et non plus par l'​interface physique), via:
 +<code user>ip a</​code>​
 +Doit renvoyer quelque chose de cet ordre:
 +<file >
 +[…]
 +2: enp0s7: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
 +    link/ether 00:​1c:​25:​02:​43:​50 brd ff:​ff:​ff:​ff:​ff:​ff
 +3: br0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc noqueue state UP group default qlen 1000
 +    link/ether 00:​1c:​25:​02:​43:​50 brd ff:​ff:​ff:​ff:​ff:​ff
 +    inet 192.168.0.45/​24 brd 192.168.0.255 scope global dynamic br0
 +       ​valid_lft 769121sec preferred_lft 769121sec
 +    inet6 2a01:​e0a:​37f:​93a0:​21c:​25ff:​fe02:​4350/​64 scope global dynamic mngtmpaddr
 +       ​valid_lft 85982sec preferred_lft 85982sec
 +    inet6 fe80::​21c:​25ff:​fe02:​4350/​64 scope link
 +       ​valid_lft forever preferred_lft forever
 +</​file>​
 +Sinon relancer une demande d'ip au DHCP via:
 +<code root>​dhclient</​code>​
 +
 +===== Installation de la machine virtuelle =====
 +Je préfére mettre les images des machines virtuelles dans un repertoire que je maitrise plutôt que l'​espace de stockage par defaut alloué par libvirt. Donc il faut les créer:<​code user>​mkdir -p $HOME/​Virtu/​vm</​code>​
 +Ou tout autre chemin que vous souhaitez…
 +
 +Une dernière étape avant l'​installation proprement dite de la VM est de mettre un bit setuid sur un script de qemu dans /​usr/​lib/​qemu/​qemu-bridge-helper:​
 +<code root>​chmod u+s /​usr/​lib/​qemu/​qemu-bridge-helper</​code>​
 +Ne reste plus qu'a installer la VM proprement dite. En l'​occurence je prends l'​exemple d'un guest (la VM) Debian buster auquel j'​alloue 10Go d'​espcace disque, 1Go de RAM et un seul vCPU. Remplacez évidemment <​nom_VM>​ par le nom que vous souhaitez lui donner.
 +<code user>
 +virt-install \
 +--name <​nom_VM>​ \
 +--memory 1024 \
 +--vcpus 1 \
 +--os-type linux \
 +--os-variant debian10 \
 +--graphics none \
 +--network bridge=br0 \
 +--extra-args '​console=ttyS0,​115200n8 serial'​ \
 +--location http://​deb.debian.org/​debian/​dists/​stable/​main/​installer-amd64/​ \
 +--disk ~/​Virtu/​vm/<​nom_VM>​.img,​device=disk,​size=10,​format=qcow2
 +</​code>​
 +Une fois l'​installation terminé (je ne détaille pas, c'est une Debian, donc fastoche), le reboot final se fera seul. Et voilà vous avez une belle Debian dans une Debian !
 +
 +===== Utilisation de base =====
 +
 +Lister les VM's
 +<code user>
 +virsh list --all
 +</​code>​
 +
 +Lancer une VM
 +<code user>
 +virsh start --domain <​vm_name>​
 +</​code>​
 +
 +Se connecter à la console d'une VM
 +<code user>
 +virsh console <​vm_name>​
 +</​code>​
 +
 +Suspendre une VM
 +<code user>
 +virsh suspend <​vm_name>​
 +</​code>​
 +
 +Reprendre après suspension
 +<code user>
 +virsh resume <​vm_name>​
 +</​code>​
 +
 +Arrêt gracieux ​ de la VM
 +<code user>
 +virsh shutdown --domain <​vm_name>​
 +</​code>​
 +
 +Arrêt brutal de la VM (si shutdown ne fonctionne pas)
 +<code user>
 +virsh destroy --domain <​vm_name>​
 +</​code>​
 +
 +Supprimer la VM
 +<code user>
 +virsh undefine --domain <​vm_name>​
 +</​code>​
 +
 +Les fichiers de stockage des vm ne sont pas supprimés automatiquement,​ il faut le faire à la main, en l'​occurence:​
 +<code user>
 +rm -rf $HOME/​Virtu/​vm/<​nom_VM>​.img
 +</​code>​
 +
 +===== Documentation =====
 +Les différents manuels sont extrèmement instructifs (normal, c'est leur rôle).
 +<code user>man virt-install</​code>​
 +<code user>man virsh</​code>​
 +
 +Documentations supplémentaires:​
 +
 +  * https://​wiki.debian.org/​KVM#​Managing_VMs_from_the_command-line
 +  * https://​wiki.debian.org/​fr/​BridgeNetworkConnections
 +  * https://​wiki.libvirt.org/​page/​Networking#​Altering_the_interface_config
 +  * https://​wiki.libvirt.org/​page/​Libvirtd_and_dnsmasq
 +  * https://​wiki.qemu.org/​Features/​HelperNetworking
 +  * https://​www.raymii.org/​s/​articles/​virt-install_introduction_and_copy_paste_distro_install_commands.html
  
  
atelier/chantier/virtualisation-avec-libvirt.txt · Dernière modification: 22/05/2023 21:50 par lagrenouille

Pied de page des forums

Propulsé par FluxBB