Virtualisation · 8 min read · Jan 12, 2026

Virtualisation Avec KVM Sur Ubuntu 12.04 LTS

Virtualisation Avec KVM Sur Ubuntu 12.04 LTS

Version 1.0
Auteur : Falko Timme
Suivez-moi sur Twitter

Ce guide explique comment vous pouvez installer et utiliser KVM pour créer et exécuter des machines virtuelles sur un serveur Ubuntu 12.04 LTS. Je vais montrer comment créer des machines virtuelles basées sur des images et aussi des machines virtuelles qui utilisent un volume logique (LVM). KVM est l’abréviation de Kernel-based Virtual Machine et utilise la virtualisation matérielle, c’est-à-dire que vous avez besoin d’un processeur qui prend en charge la virtualisation matérielle, par exemple Intel VT ou AMD-V.

Je ne donne aucune garantie que cela fonctionnera pour vous !

1 Remarque Préliminaire

J’utilise une machine avec le nom d’hôte server1.example.com et l’adresse IP 192.168.0.100 ici comme mon hôte KVM.

Parce que nous allons exécuter toutes les étapes de ce tutoriel avec des privilèges root, nous pouvons soit préfixer toutes les commandes de ce tutoriel avec la chaîne sudo, soit devenir root tout de suite en tapant

sudo su

2 Installation de KVM et vmbuilder

Vérifiez d’abord si votre processeur prend en charge la virtualisation matérielle - si c’est le cas, la commande

egrep '(vmx|svm)' --color=always /proc/cpuinfo

devrait afficher quelque chose, par exemple comme ceci :

root@server1:~# egrep '(vmx|svm)' --color=always /proc/cpuinfo  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush  
mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid  
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv  
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush  
mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid  
pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch lbrv  
root@server1:~#

Si rien n’est affiché, alors votre processeur ne prend pas en charge la virtualisation matérielle, et vous devez vous arrêter ici.

Pour installer KVM et vmbuilder (un script pour créer des machines virtuelles basées sur Ubuntu), nous exécutons

apt-get install ubuntu-virt-server python-vm-builder kvm-ipxe

Ensuite, nous devons ajouter l’utilisateur avec lequel nous sommes actuellement connectés (root) au groupe libvirtd :

adduser `id -un` libvirtd  
adduser `id -un` kvm

Vous devez vous déconnecter et vous reconnecter pour que les nouveaux membres du groupe prennent effet.

Pour vérifier si KVM a été installé avec succès, exécutez

virsh -c qemu:///system list

Cela devrait afficher quelque chose comme ceci :

root@server1:~# virsh -c qemu:///system list  
 Id Name                 State  
----------------------------------  
  
root@server1:~#

S’il affiche une erreur à la place, alors quelque chose a mal tourné.

Ensuite, nous devons configurer un pont réseau sur notre serveur afin que nos machines virtuelles puissent être accessibles depuis d’autres hôtes comme si elles étaient des systèmes physiques dans le réseau.

Pour ce faire, nous installons le paquet bridge-utils…

apt-get install bridge-utils

… et configurons un pont. Ouvrez /etc/network/interfaces :

vi /etc/network/interfaces

Avant la modification, mon fichier ressemble à ceci :

| # Ce fichier décrit les interfaces réseau disponibles sur votre système # et comment les activer. Pour plus d'informations, voir interfaces(5). # L'interface réseau de boucle auto lo iface lo inet loopback # L'interface réseau principale auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 |

Je le change pour qu’il ressemble à ceci :

| # Ce fichier décrit les interfaces réseau disponibles sur votre système # et comment les activer. Pour plus d'informations, voir interfaces(5). # L'interface réseau de boucle auto lo iface lo inet loopback # L'interface réseau principale auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 8.8.8.8 8.8.4.4 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off |

(Assurez-vous d’utiliser les paramètres corrects pour votre réseau !)

Redémarrez le réseau…

/etc/init.d/networking restart

… et exécutez

ifconfig

Cela devrait maintenant afficher le pont réseau (br0) :

root@server1:~# ifconfig  
br0       Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02  
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0  
          inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:29 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:29 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:1934 (1.9 KB)  TX bytes:2844 (2.8 KB)  
  
eth0      Link encap:Ethernet  HWaddr 00:1e:90:f3:f0:02  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:44613 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:23445 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:63663064 (63.6 MB)  TX bytes:1792940 (1.7 MB)  
          Interrupt:41 Base address:0xa000  
  
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  
virbr0    Link encap:Ethernet  HWaddr 2a:4a:49:13:de:8f  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  
  
root@server1:~#

Avant de commencer notre première machine virtuelle, je recommande de redémarrer le système :

reboot

Si vous ne le faites pas, vous pourriez obtenir une erreur comme open /dev/kvm: Permission denied dans les journaux de la machine virtuelle dans le répertoire /var/log/libvirt/qemu/.

3 Création d’une VM Basée sur une Image

Nous pouvons maintenant créer notre première VM - une VM basée sur une image (si vous vous attendez à beaucoup de trafic et de nombreuses opérations de lecture et d’écriture pour cette VM, utilisez une VM basée sur LVM à la place comme indiqué au chapitre 6 - les VMs basées sur des images sont lourdes en IO disque dur).

Je veux créer mes machines virtuelles dans le répertoire /var/lib/libvirt/images/ (elles ne peuvent pas être créées dans le répertoire /root car l’utilisateur libvirt-qemu n’a pas de permissions de lecture dans ce répertoire).

Nous allons créer un nouveau répertoire pour chaque VM que nous voulons créer, par exemple /var/lib/libvirt/images/vm1, /var/lib/libvirt/images/vm2, /var/lib/libvirt/images/vm3, et ainsi de suite, car chaque VM aura un sous-répertoire appelé ubuntu-kvm, et évidemment, il ne peut y avoir qu’un seul tel répertoire dans /var/lib/libvirt/images/vm1, par exemple. Si vous essayez de créer une deuxième VM dans /var/lib/libvirt/images/vm1, par exemple, vous obtiendrez un message d’erreur disant ubuntu-kvm existe déjà (à moins que vous n’exécutiez vmbuilder avec l’argument –dest=DESTDIR) :

root@server1:/var/lib/libvirt/images/vm1# vmbuilder kvm ubuntu -c vm2.cfg  
2009-05-07 16:32:44,185 INFO     Cleaning up  
ubuntu-kvm already exists  
root@server1:/var/lib/libvirt/images/vm1#

Nous allons utiliser l’outil vmbuilder pour créer des VMs. (Vous pouvez en apprendre plus sur vmbuilder ici.) vmbuilder utilise un modèle pour créer des machines virtuelles - ce modèle est situé dans le répertoire /etc/vmbuilder/libvirt/. D’abord, nous créons une copie :

mkdir -p /var/lib/libvirt/images/vm1/mytemplates/libvirt  
cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm1/mytemplates/libvirt/

Maintenant, nous arrivons à la partition de notre VM. Nous créons un fichier appelé vmbuilder.partition…

vi /var/lib/libvirt/images/vm1/vmbuilder.partition

… et définissons les partitions souhaitées comme suit :

| root 8000 swap 4000 --- /var 20000 |

Cela définit une partition racine (/) avec une taille de 8000 Mo, une partition swap de 4000 Mo, et une partition /var de 20000 Mo. La ligne — fait que la partition suivante (/var dans cet exemple) se trouve sur une image disque séparée (c’est-à-dire que cela créerait deux images disque, une pour root et swap et une pour /var). Bien sûr, vous êtes libre de définir les partitions que vous aimez (tant que vous définissez également root et swap), et bien sûr, elles peuvent être dans une seule image disque - ceci n’est qu’un exemple.

Je veux installer openssh-server dans la VM. Pour m’assurer que chaque VM obtienne une clé OpenSSH unique, nous ne pouvons pas installer openssh-server lorsque nous créons la VM. Par conséquent, nous créons un script appelé boot.sh qui sera exécuté lorsque la VM sera démarrée pour la première fois. Il installera openssh-server (avec une clé unique) et forcera également l’utilisateur (j’utiliserai le nom d’utilisateur par défaut administrateur pour mes VMs avec le mot de passe par défaut howtoforge) à changer le mot de passe lorsqu’il se connecte pour la première fois :

vi /var/lib/libvirt/images/vm1/boot.sh

| # Ce script s'exécutera la première fois que la machine virtuelle démarre # Il est exécuté en tant que root. # Expirer le compte utilisateur passwd -e administrateur # Installer openssh-server apt-get update apt-get install -qqy --force-yes openssh-server |

Assurez-vous de remplacer le nom d’utilisateur administrateur par votre nom de connexion par défaut.

(Vous pouvez en savoir plus à ce sujet ici : https://help.ubuntu.com/community/JeOSVMBuilder#First%20boot)

(Vous pouvez également définir un script “première connexion” comme décrit ici : https://help.ubuntu.com/community/JeOSVMBuilder#First%20login)

Maintenant, jetez un œil à

vmbuilder kvm ubuntu --help

pour en savoir plus sur les options disponibles.

Pour créer notre première VM, vm1, nous allons dans le répertoire de la VM…

cd /var/lib/libvirt/images/vm1/

… et exécutons vmbuilder, par exemple comme suit :

vmbuilder kvm ubuntu --suite=precise --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=192.168.0.101 --gw=192.168.0.1 --part=vmbuilder.partition --templates=mytemplates --user=administrateur --name=Administrateur --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=/var/lib/libvirt/images/vm1/boot.sh --mem=256 --hostname=vm1 --bridge=br0

La plupart des options sont explicites. –part spécifie le fichier contenant les détails de partitionnement, relatif à notre répertoire de travail (c’est pourquoi nous avons dû aller dans notre répertoire de VM avant d’exécuter vmbuilder), –templates spécifie le répertoire qui contient le fichier modèle (encore une fois relatif à notre répertoire de travail), et –firstboot spécifie le script de première connexion. –libvirt=qemu:///system indique à KVM d’ajouter cette VM à la liste des machines virtuelles disponibles. –addpkg vous permet de spécifier des paquets Ubuntu que vous souhaitez installer lors de la création de la VM (voir ci-dessus pourquoi vous ne devriez pas ajouter openssh-server à cette liste et utiliser le script de première connexion à la place). –bridge configure un réseau en pont ; comme nous avons créé le pont br0 au chapitre 2, nous spécifions ce pont ici.

Dans la ligne –mirror, vous pouvez spécifier un dépôt officiel d’Ubuntu dans –mirror, par exemple http://de.archive.ubuntu.com/ubuntu. Si vous omettez –mirror, alors le dépôt par défaut d’Ubuntu (http://archive.ubuntu.com/ubuntu) sera utilisé.

Le processus de construction peut prendre quelques minutes.

Ensuite, vous pouvez trouver un fichier de configuration XML pour la VM dans /etc/libvirt/qemu/ (=> /etc/libvirt/qemu/vm1.xml) :

ls -l /etc/libvirt/qemu/
root@server1:/var/lib/libvirt/images/vm1# ls -l /etc/libvirt/qemu/  
total 8  
drwxr-xr-x 3 root root 4096 May 21 13:00 networks  
-rw------- 1 root root 2082 May 21 13:15 vm1.xml  
root@server1:/var/lib/libvirt/images/vm1#

Les images disque sont situées dans le sous-répertoire ubuntu-kvm/ de notre répertoire VM :

ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/
root@server1:/var/lib/libvirt/images/vm1# ls -l /var/lib/libvirt/images/vm1/ubuntu-kvm/  
total 604312  
-rw-r--r-- 1 root root 324337664 May 21 13:14 tmpE4IiRv.qcow2  
-rw-r--r-- 1 root root 294715392 May 21 13:15 tmpxvSVOT.qcow2  
root@server1:/var/lib/libvirt/images/vm1#
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.