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 su2 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/cpuinfodevrait 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-ipxeEnsuite, nous devons ajouter l’utilisateur avec lequel nous sommes actuellement connectés (root) au groupe libvirtd :
adduser `id -un` libvirtd
adduser `id -un` kvmVous 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 listCela 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/interfacesAvant 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
ifconfigCela 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 :
rebootSi 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 --helppour 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=br0La 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#Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.