======= 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
----
=====Spice l'avenir de la virtualisation =====
{{:opensuse:suselien.png|}}**[[http://www.spicespace.org/|Spice]]** est encore en plein développement, mais semble utilisable et stable depuis la version 0.6. Projet **Redhat**, **Spice** a été intégré dans Fedora 14 avec le status experimental. La version 0.6.3 est la dernière en date, et la version 0.8, actuellement en dévelloppement, est prévue pour courant février.
Le dépot [[https://build.opensuse.org/project/show?project=home%3Akraxel|home:kraxel/openSUSE_11.3]] propose la version 0.6.1.
Actuellement **spice** est un driver pour une nouvelle carte vidéo virtuelle, ainsi qu'un protocole (genre vnc en mieux) pour s'y connecter.
Les points négatifs étant qu'actuellement le protocole n'est pas compatible avec **virt-manager**, il faut se contenter de **virsh**.
Il y a aussi le fait que **spice** necessite coté serveur, un system 64bits pour fonctionner car il est dépendant de [[http://fr.wikipedia.org/wiki/Atomicit%C3%A9_%28informatique%29|l'atomicité]] du x64 (it is dependent on 64-bit atomic operations).
Dans l'avenir il est prévu que **spice** gère la lecture de video, la 3d, le réseau, le son...
rien de tel qu'une vidéo **flash** éditée par **redhat** pour vous expliquer...
http://www.redhat.com/v/swf/rhev/spice.html
----