======= La virtualisation via KVM ======= {{:opensuse:suselien.png|}}Toutes ces manipulations ont été faites sous opensuse 11.3, à partir des paquets officiels. Mais cela devrait fonctionner sur des versions antérieures d'opensuse. =====Compatibilitée matériel:===== {{:opensuse:suselien.png|}}Sous linux, les instructions de virtualisation s'appellent **vmx** pour Intel, **svm** pour AMD. Il arrive de temps en temps que cette fonction soit désactivée dans le bios par défaut . Ou beaucoup plus rarement, non géré par la carte mère. Dans un terminal # egrep --color '(vmx|svm)' /proc/cpuinfo Si **vmx** ou **svm** apparait dans la liste, votre processeur est compatible. Vous pouvez aussi vérifier la présence des instructions de virtualisation sur le site [[http://ark.intel.com/MySearch.aspx?VTX=true|d'Intel]] ou [[http://products.amd.com/en-us/desktopcpuresult.aspx?f1=&f2=&f3=&f4=&f5=&f6=&f7=&f8=&f9=&f10=&f11=&f12=True|d'amd]] avec la référence de votre processeur. Quelques [[http://www.pcinpact.com/actu/news/55115-amd-intel-athlon-sempron-phenom-core-i3-i5-i7-pentium-tableau-comparatif-2010.htm|info]] Dans un terminal # egrep 'model name' /proc/cpuinfo model name : Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz model name : Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz __ Se retrouver parmi toutes les instructions de virtualisation__ | [[http://ark.intel.com/MySearch.aspx?VTX=true|vt-x]] | intel | **vmx** | instruction processeur base pour la virtualisation | | [[http://ark.intel.com/MySearch.aspx?VTD=true|vt-d]] | intel | **iommu** | instruction processeur **ET** chipset **ET** bios permettant d'attacher un périphérique physique à une machine virtuelle | | [[http://www.intel.com/network/connectivity/solutions/virtualization.htm|vt-c]] | intel | iommu?? | instruction [[http://www.intel.com/cd/products/services/emea/fra/ethernet/458263.htm|carte réseau]] intel dépendant de vt-d | | amd-v | amd | **svm** | instruction processeur base pour la virtualisation | | amd-vi | amd | **iommu** | instruction chipset (série [[http://en.wikipedia.org/wiki/AMD_800_chipset_series#Desktop_comparison_matrix|890FX]] actuellement) permettant d'attacher un périphérique physique à une machine virtuelle | | via vt | via | ??? | instruction processeur base pour la virtualisation | ---- =====Installation KVM et libvirt:===== {{:opensuse:suselien.png|}}Tout ce dont vous avez besoin est trouvable dans les dépots officiels d'opensuse 11.3. Le dépot [[http://download.opensuse.org/repositories/Virtualization/openSUSE_11.3/|Virtualization/openSUSE_11.3]] est un peu plus à jour. Dans un terminal en root # zypper install kvm libvirt A l'aide de yast: {{:opensuse:opensuse-kvm01.png|}} Verifiez que libvirt est lancé: # service libvirtd status Checking status of libvirtd running ---- ===== Préparez le reseau (facultatif): ===== {{:opensuse:suselien.png|}}La mise en réseau d'une machine virtuelle passe soit par du **nat** entre votre réseau ethernet et un réseau local virtuel, soit par un **pont réseau** (**bridge**). Un réseau isolé peut aussi être crée entre plusieurs machines virtuelles. Par défaut s'il n'y a pas de **pont réseau** en place, c'est **nat** qui vous sera proposé. ---- ==== Pont reseau (bridge): ==== Si vous avez un pc muni de __deux__ ports Ethernet, je vous conseille de dédier cette seconde à votre machine virtuelle, à l'aide d'un **pont réseau**. ===Pont réseau en console:=== **Premier cas:** //vous avez **__deux__** cartes réseau, créer un pont réseau nommé br0 relié par la carte réseau eth0 __dédié__ à la machine virtuelle.// Il n'y a pas de fichier ifcfg-eth0 à éditer, si vous en avez un supprimez le. Dans un terminal en root vi /etc/sysconfig/network/ifcfg-br0 BOOTPROTO='static' BRIDGE='yes' BRIDGE_FORWARDDELAY='0' BRIDGE_PORTS='eth0' BRIDGE_STP='off' BROADCAST='' ETHTOOL_OPTIONS='' IPADDR='0.0.0.0/24' MTU='' NAME='' NETWORK='' REMOTE_IPADDR='' STARTMODE='auto' USERCONTROL='no' Relancez le reseau: Dans un terminal en root service network restart **Second cas:** //créer un pont réseau nommé br0 relié par la carte réseau eth0, utilisé pour la machine physique en dhcp ET pour la machine virtuelle// Dans un terminal en root vi /etc/sysconfig/network/ifcfg-br0 BOOTPROTO='dhcp' BRIDGE='yes' BRIDGE_FORWARDDELAY='0' BRIDGE_PORTS='eth0' BRIDGE_STP='off' BROADCAST='' ETHTOOL_OPTIONS='' IPADDR='' MTU='' NAME='' NETMASK='' NETWORK='' REMOTE_IPADDR='' STARTMODE='auto' USERCONTROL='no' vi /etc/sysconfig/network/ifcfg-eth0 BOOTPROTO='static' BROADCAST='' ETHTOOL_OPTIONS='' IPADDR='0.0.0.0/32' MTU='' NAME='88E8001 Gigabit Ethernet Controller' NETMASK='' NETWORK='' REMOTE_IPADDR='' STARTMODE='auto' USERCONTROL='no' Relancez le reseau: Dans un terminal en root service network restart ===Pont réseau avec Yast:=== Cliquez sur Ajouter {{ opensuse:opensuse-bridge01v2.png }} Sélectionnez pont, ou bridge si yast est en anglais, ainsi que le numéro que vous souhaitez attribuer a votre pont réseau: {{ opensuse:opensuse-bridge02v2.png }} Si vous n'avez qu'une carte réseau utilisée jusqu'a maintenant en dhcp: {{ opensuse:opensuse-bridge06v2.png }} Si la carte réseau est dédiée au pont réseau de votre future machine virtuelle: {{ opensuse:opensuse-bridge03v2.png }} Sélectionnez la carte réseau à mettre en bridge: {{ opensuse:opensuse-bridge04v2.png }} Voilà votre bridge est en place: {{ opensuse:opensuse-bridge05v2.png }} ---- ==== Open Vswitch: ==== [[http://openvswitch.org/|Open vSwitch]] permet créer un switch virtuel, pour reliez toutes les machines virtuelles entres elles. Ca a l'air compliqué comme ca, et ca l'est surement... j'ai pas encore eu le temps de tester... ---- =====virt-manager administrez graphiquement vos machines virtuelles===== {{:opensuse:suselien.png|}}**virt-manager** permet de gérer graphiquement des machines virtuelles locales ou distantes. **xen**, **qemu** et **kvm/qemu** sont gérés par **virt-manager**. C'est aussi l'interface pour la virtualisation proposé par yast. Il n'est pas obligatoire pour la création de machines virtuelles. Si vous ne voulez pas utiliser **virt-manager**, sautez a l'étape **virsh**. ---- ==== Installation virt-manager:==== Veillez à ce que libgtk-vnc soit en version 3.1, la version 4.x refusant le lancement de virt-manager. Dans un terminal en root zypper install virt-manager A l'aide de yast: {{:opensuse:opensuse-virt-manager00.png|}} ---- ==== Lancement de virt-manager ==== Dans un terminal su - virt-manager A l'aide de yast: (**virt-manager** sera lancé en français) {{ opensuse:opensuse-virt-manager12.png }} Une fois virt-manager lancé: ajoutez une connection {{ opensuse:opensuse-virt-manager01v3.png }} Le menu 'Add Connection': sélectionnez l'hyperviseur **QUEMU/KVM** //cela va créer une connection vers votre hyperviseur kvm sur votre machine locale// {{ opensuse:opensuse-virt-manager02.png }} ---- ==== Creation d'une machine virtuelle: ==== Cliquez sur l'icône 'New' {{ opensuse:opensuse-virt-manager03v2.png }} Passez la page d'accueil de création de machine virtuelle {{ opensuse:opensuse-virt-manager04v2.png }} Si vous avez déjà un disque virtuel sélectionnez le second choix. Laissez tel quel pour créer un disque dur virtuel. {{ opensuse:opensuse-virt-manager05v2.png }} Choisissez au plus proche, le type de système d'exploitation que vous souhaitez installer. {{ opensuse:opensuse-virt-manager06v2.png }} Petit récapitulatif de la configuration "matérielle" de la machine virtuelle que vous allez créer. Quelques modifications doivent encore être apportées. {{ opensuse:opensuse-virt-manager07v2.png }} Dans la section: Name of Virtual Machine Editez le nom de la machine (à faire avant de créer le disque dur virtuel...) {{ opensuse:opensuse-virt-manager17v2.png }} Dans la section: Operating System Intallation Vous sélectionnez le média d'installation {{ opensuse:opensuse-virt-manager08v2.png }} Installation à partir du lecteur cd/dvd de votre pc ou d'un iso {{ opensuse:opensuse-virt-manager09v2.png }} Dans la section: Network Adapter Ajoutez ou modifiez, le pilote, la mac, ou le lien de votre carte réseau virtuelle (virtio par défaut pour Linux et plus performant que realtaek ou e1000) {{ opensuse:opensuse-virt-manager10v2.png }} Les bridges (br0) permettent de dédier une carte réseau à une vm. {{ opensuse:opensuse-virt-manager11v2.png }} Dans la section: Disks Ajoutez ou modifiez, la taille, la source et le format de votre disque dur virtuel {{ opensuse:opensuse-virt-manager13.png?497 }} L'édition d'un disque dur virtuel {{ opensuse:opensuse-virt-manager14.png?497 }} Dans la section: Graphics and Keyboard Modifiez le pilote graphique et le clavier. (vesa vga ne semble basculer automatiquement vers cirrus logic lors d'une installation) {{ opensuse:opensuse-virt-manager15v2.png }} Dans la section: Hardware Configurez la quantitée de ram dédiée à la machine virtuel ainsi que le nombre de processeurs virtuels. {{ opensuse:opensuse-virt-manager16v2.png }} Dernier récapitulatif avant installation {{ opensuse:opensuse-virt-manager18v2.png?650 }} Quelques instants pour la création de la machine virtuelle... {{ opensuse:opensuse-virt-manager19.png }} ---- ==== Installation: ==== Pour détacher le pointeur de la souris de la fenêtre de la machine virtuelle. Appuiez simultanément sur les touches **CTRL** et **ALT** La machine boot sur le dvd d'installation {{ opensuse:opensuse-virt-manager20.png?650 }} {{:opensuse:opensuse-virt-manager21.png?650;|}} La machine virtuelle s'affiche dans le manager de virt-manager {{:opensuse:opensuse-virt-manager22.png?650;|}} Pour des raisons de performances, une partition d"échange swap n'est pas toujours conseillé pour une machine virutelle {{:opensuse:opensuse-virt-manager24.png?650;|}} Opensuse 11.3 installé, après son premier boot //Il arrive que la souris ne fonctionne pas après l'installation, ajoutez une souris usb virtuelle// {{:opensuse:opensuse-virt-manager26.png?650;|}} ---- ==== Post installation: ==== Dans l'onglet Detail, vous pouvez modifier le matériel virtuel de la machine ainsi que quelques réglages. {{:opensuse:opensuse-virt-manager28.png?650;|}} Quelques statistiques {{:opensuse:opensuse-virt-manager30.png?650;|}} Ajout d'un périphérique virtuel (une souris usb par example) Necessite que la machine virtuelle soit éteinte {{:opensuse:opensuse-virt-manager32.png|}} {{:opensuse:opensuse-virt-manager33.png|}} ---- ==== Administration distante: ==== virt-manager permet d'administrer une machine virtuelle à distance, juste à travers ssh {{ opensuse:opensuse-virt-manager42.png }} Une fois connecté... {{ opensuse:opensuse-virt-manager43v2.png }} {{ opensuse:opensuse-virt-manager44v2.png }} ---- ==== IOMMU: ==== Ajout d'un périphérique physique sur une machine virtuelle. (IOMMU) Cela nécessite: * Un processeur compatible [[http://ark.intel.com/MySearch.aspx?VTD=true|vt-d]] ou **amd-v** * Un chipset compatible [[http://en.wikipedia.org/wiki/List_of...ore_2_chipsets|vt-d]] ou **amd-vi** * Surtout que le fabriquant ait activé la fonction **vt-d** ou **amd-vi** sur la carte mere. Dans mon cas, asus ne l'a pas activé donc je n'ai malheureusement pas pu tester. (P5Q-Deluxe P5Q-Premium P5QL) === Identifier le périphérique: === Cette manipulation n'est pas gérée par **virt-manager**, il faudra utiliser **virsh** en console Dans un terminal en root: # virsh nodedev-list --tree La liste de votre matériel apparait computer | +- net_lo_00_00_00_00_00_00 +- pci_0000_00_00_0 +- pci_0000_00_01_0 | | | +- pci_0000_01_00_0 | +- pci_0000_00_1a_0 | | | +- usb_usb3 | | | +- usb_3_0_1_0 | +- pci_0000_00_1a_1 | | | +- usb_usb4 | | | +- usb_4_0_1_0 | +- pci_0000_00_1a_7 | | | +- usb_usb1 | | | +- usb_1_0_1_0 | +- pci_0000_00_1b_0 +- pci_0000_00_1c_0 +- pci_0000_00_1c_5 | | | +- pci_0000_02_00_0 | | | +- net_eth0_00_22_15_15_26_e7 Pour détacher la carte réseau eth0 il faut l'identifiant pci de cette dernière. Dans ce cas **pci_0000_02_00_0** === Détacher le périphérique: === Cette manipulation n'est pas gérée par **virt-manager**, il faudra utiliser **virsh** en console Dans un terminal en root: # virsh nodedev-dettach pci_0000_02_00_0 Device pci_0000_02_00_0 dettached === Attacher le périphérique: === La suite est gérée par **virt-manager** {{ opensuse:opensuse-virt-manager50.png }} Je vous invite à la lecture de ces articles si vous avez les moyens matériel de tester http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization/sect-Virtualization-PCding_a_PCI_device_to_a_host.html http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization/chap-Virtualization-PCI_passthrough.html ---- =====Virsh la virtualisation en console===== {{:opensuse:suselien.png|}}[[http://docs.redhat.com/docs/fr-FR/Red_Hat_Enterprise_Linux/5/html/Virtualization/ch-virt-task-virsh.html|Virsh]] est un outil en ligne de commande pour administrer et gérer ses machines virtuelles. Il est tout à fait compatible avec le machine virtuelle créee ou lancée à l'aide de **virt-manager**. Son avantage est de permettre des réglages plus fins que **virt-manager**. Si xen est installé sur votre machine, **virsh** et **virt-install** peuvent s'embrouiller entre **xen** et **kvm/qem**. Il est conseillé dans ce cas de lancer **virsh** ou **virt-install** avec l'option -c qemu:///system Example: # virsh -c qemu:///system list --all Id Name State ---------------------------------- 14 opensuse11 running ---- ====Creez une machine virtuelle==== Pour éviter d'embrouiller ceux qui ont suivit la partie **virt-manager**, le même nom et les mêmes caractéristiques que pour la machine crée précedement vont etre utilisé. Ceux ayant suivit la partie **virt-manager** peuvent sauter cette étape. **virt-install** est l'outil de création de machine virtuelle. Utilisation du prompt de **virt-install**: Dans un terminal en root: # virt-install --prompt What is the name of your virtual machine? opensuse11 How much RAM should be allocated (in megabytes)? 1024 What would you like to use as the disk (file path)? /var/lib/kvm/images/opensuse11/disk0.raw How large would you like the disk (/var/lib/kvm/images/opensuse11/disk0.raw) to be (in gigabytes)? 10 This will overwrite the existing path '/var/lib/kvm/images/opensuse11/disk0.raw' Do you really want to use this disk (yes or no) yes What is the install CD-ROM/ISO or URL? /home/[...]/openSUSE-11.3-DVD-x86_64.iso C'est pas finit... **virt-install** en une ligne: Dans un terminal en root: (un truc du genre) # virt-install -n opensuse11 -r 1024 --vcpus=2 -f URL-IMAGE-DISK.raw -s 10 -c URL-IMAGE-DVD.iso --vnc --noautoconsole --os-type linux --os-variant opensuse11 --accelerate --network=bridge:br0 --hvm ---- ====Administrez une machine virtuelle==== Lister les machines virtuelles actives et inactives: Dans un terminal en root: # virsh list --all Id Name State ---------------------------------- 14 opensuse11 running Démarrer une machine virtuelle: # virsh start opensuse11 Domain opensuse11 started Eteindre une machine virtuelle: # virsh shutdown opensuse11 Domain opensuse11 is being shutdown Eteindre sauvagement une machine virtuelle : # virsh destroy opensuse11 Domain opensuse11 destroyed Mettre en veille une machine virtuelle: # virsh suspend opensuse11 Domain opensuse11 suspended Réveiller une machine virtuelle: # virsh resume opensuse11 Domain opensuse11 resumed ---- ====Modifiez une machine virtuelle==== //la fonction **edit** de virsh reprend les commandes de l'éditeur **vi**// Dans un terminal en root virsh edit opensuse11 En modifiant la valeur **vram='9216'** vous modifiez la quantité de mémoire alouée à la carte vidéo virtuelle