Vous êtes sur la page 1sur 15

APPRENTISSAGE DE QEMU/LIBVIRT PAR LEXEMPLE

La rdaction des billets de ce blog ncessite de travailler sur plusieurs systmes


d'exploitations diffrents. Plutt que de monter une salle machine dans ma maison (pas
sur que ma compagne soit d'accord! "'ai donc opt pour un virtualisation sur un serveur
ddi #$% qui a le gros avantage de disposer d'une &'( consquente de )* +o (pour
une machine en l'an ,-),. .ravaillant la plupart du temps du temps sous Linux! mon
choix c'est donc port sur la solution /emu01$( (Kernel2based Virtual Machine.
INSTALLATION DE QEMU/KVM
Pour que /emu01$( ait des performances acceptables! il faut vrifier que votre
processeur soit compatible avec les extensions de virtualisation. 3ous Linux! il est facile
de vrifier cela avec la ligne de commande suivante.
egrep '^flags.!"#$%s"#&' /pr'(/(p)*+f' ,/-e"/+)ll .. e(/' 01 %% e(/' 10
3ur mon serveur de test (1imsufi )*+ che4 #$% pas de problme de ce cot l5.
6'obtiens un beau OK.
Le serveur peut donc supporter la virtualisation hard7are. 8he4 #$%! le noyau par
dfaut est statique! il n'est donc pas possible d'a"outer dynamiquement des modules
(comme le 9vm:intel par exemple. ;l faut donc s)*"re (e22e pr'(3-)re. La dernire
version des noyaux semble intgrer par dfaut les modules 1$(.
#n peut ensuite passer 5 l'installation des briques logicielles (environ ,<= (o 5
tlcharger>
qemu-kvm 4 5)ll "*r2)al*6a2*'+ '+ $78 /ar-9are
virtinst 4 Pr'gra#s 2' (rea2e a+- (l'+e "*r2)al #a(/*+es
libvirt-bin 4 2/e pr'gra#s f'r 2/e l*:"*r2 l*:rar;
#n utilise les versions disponibles dans les dpts ?ebian>
s)-' ap24ge2 *+s2all <e#)4="# "*r2*+s2 l*:"*r24:*+
@n petit reboot de la machine pour Atre sBr que tous les modules sont chargs avant de
poursuivre.
C!ATION DE SA "EMI#E MAC$INE VITUELLE %VM&
Cous allons commencer par crer une machine virtuelle avec comme systme hte une
@buntu ?es9top )).)-. @ne machine virtuelle a besoin d'un conteneur dans lequel elle
va pourvoir sDexcuter> ce conteneur s'appelle une im'(e )isque. Ensuite! il faudra
installer le systme hte 5 l'intrieur de cette image disque.
;l est possible d'utiliser la ligne de commande pour effectuer ces oprations (ce qui
ouvre la voie 5 une automatisation par scripts. Cous aborderons cela un peu plus loin
dans l'article. Pour commencer! nous allons utiliser le module libvirt-m'n'(er qui
propose une interface graphique (+.1 permettant d'administrer 5 distance (via un
tunnel 33% son serveur d'hypervision /emu01$(.
#n commence par vrifier que le daemon d'administration est bien lanc sur le serveur
d'hypervision (ce qui devrait Atre le cas si vous ave4 suivi les tapes d'installations de ce
billet>
s)-' /e2(/*+*2.-/l*:"*r24:*+ s2a2)s
>/e(=*+g s2a2)s 'f l*:"*r2 #a+age#e+2 -ae#'+? l*:"*r2- r)++*+g.
Ensuite il faut a"outer votre utilisateur (nicolargo dans mon cas dans les groupes
'libvirt' et 'kvm'>
s)-' )ser#'- 4a 4G l*:"*r2 +*('larg'
s)-' )ser#'- 4a 4G ="# +*('larg'
3ur la machine +C@0Linux cliente (disposant d'une interface graphique! il faut installer
les pac9ages (par exemple sous ?ebian0@buntu>
s)-' ap24ge2 *+s2all "*r24#a+ager
'u lancement du client! il faut cliquer sur le menu File G 'dd connection...
Puis paramtrer la connexion vers votre serveur>
Cotre serveur est alors disponible dans la liste! on peut alors configurer ses proprits>
#n configure le type de rseau que l'on va utiliser. 8omme "e ne dispose que d'une seule adresse
publique sur mon serveur #$% 1imsufi! "'utilise la translation d'adresse (voir l'explication dans un
chapitre suivant qui est configure par dfaut>
Puis on configure les rpertoires ou l'on pourra trouver les ;3#s pour l'installation des machines
htes>
Et voila le rsultat aprs tlchargement de quelques images ;3# depuis le rpertoire H0iso (le
serveur disposant d'une accs )-- (bs direct sur ;nternet! cela va asse4 vite I.
#n peut passer 5 la cration de la $( proprement dite en cliquant sur le bouton J8reate
a ne7 virtual machineJ. #n accde alors 5 un 7i4ard>
#n entre le nom de la $( (sans espace>
Puis l'image ;3# qui va nous servir pour l'installation du systme d'exploitation (le
JKro7seJ sur le serveur peut prendre un certain temps>
#n dfini ensuite les ressources de la $( (8P@ et mmoire. ' noter que la limite 5 , +o
de &'( sur ma configuration de test>
#n donne ensuite la taille de l'image disque qui contiendra notre $(. 6e conseille )* +o
pour les #3 rcents.
Enfin on finalise la configuration cot rseau (C'. et hyperviseur (1$(>
@ne fenAtre avec un dport d'affichage devrait alors s'afficher et l'installation du
systme guest (@buntu )).)- commencer>
;l ne vous reste plus qu'5 finaliser l'installation I
UTILISATION DE SA VM
@ne fois l'installation de la $( effectue (voir le chapitre prcdant. 8elle2ci
devrait apparaLtre dans la liste propos par $irtual (achine (anager. Pour la lancer! il
faut slectionner la $( puis cliquer sur le bouton 'play' (Po7er #n the virtual machine>
Et voil5 le travail>
NIVEAU PER50RMAN>E @
;l ne faut pas s'attendre 5 des miracles. La virtualisation par /em01$( bien qu'aillant
fait de gros progrs dans les dernires versions restent en dessous d'une solution
comme $mMare ou Nen. Elles sont par contre suffisante dans mon cas ou "e souhaite
valider des procdures et des logiciels systme et rseau.
*ESTION EN LI*NE DE COMMANDE
C!ATION DE L+IMA*E DISQUE
#n commence par crer un rpertoire H0vm qui va contenir toutes mes images disques>
#=-*r A/"#
Puis on utilise la commande qemu-im( pour gnrer l'image disque JviergeJ>
(- A/"#
<e#)4*#g (rea2e 4f <('9B -e:*a+8ser"er.<('9B C8G
8ette dernire commande va donc gnrer une image disque
nomme debian*server.qco7, de type qco7, (voir ci2dessous la liste des types
disponibles sous ?ebian * avec une taille maximale de )* +iga octets.
3ur mon systme! la liste des JtypesJ d'image disque est la suivante>
ra9? pas -e ('#press*'+D l'*#age -*s<)e es2 -*re(2e#e+2 E-)#p3eE -a+s )+ f*(/*er
/'s2F-e"*(e
<('9B? f'r#a2 par -3fa)2 -e Qe#) !Qe#) I#age 5'r#a2&
<('9? a+(*e+ f'r#a2 )2*l*s3 par Qe#) !+e pas )2*l*ser p')r la (r3a2*'+ -e +')"elle
*#age -*s<)e&
"-*? f'r#a2 ('#pa2*:le a"e( V*r2)alB'$
"#-=? f'r#a2 ('#pa2*:le a"e( VMGare
"p(? f'r#a2 ('#pa2*:le a"e( V*r2)alP>
;l est possible de convertir une image d'un format 5 un autre. Par exemple! si vous ave4
une image au format $(Mare et que vous voule4 la convertir vers un format /co7,! il
suffit de saisir la commande suivante>
<e#)4*#g ('+"er2 4f "#-= -*s=."#-= 40 <('9B -*s=.<('9B
C!ATION DE LA VM
Pour installer la $(! nous avons besoin de l'image ;3# du systme d'exploitation 5
installer (?ebian * server dans mon exemple. #n va donc tlcharger cette image sur
notre serveur (c'est dans ces moments l5 que l'on est heureux d'avoir un serveur avec
une connexion 5 )--(bps vers ;nternet...>
#=-*r A/*s'
(- A/*s'
9ge2 /22p?//(-*#age.-e:*a+.'rg/-e:*a+4(-/8.H.I/*I78/*s'4(-/-e:*a+48.H.I4*I784>D4C.*s'
(aintenant que nous disposons de l'image disque H0vm0debian*server.qco7, et du
mdia d'installation H0iso0debian2*.-.O2iOP*28?2).iso! nous allons crer la machine
virtuelle en utilisant la couche d'abstraction libvirt.
Pourquoi utiliser libvirt plutt que d'utiliser directement les commandes quivalentes
/emu Q 3i demain vous dcide4 de changer votre systme de virtualisation! vos
procdures0scripts resteront les mAmes. En effet libvirt communique de manire
transparente vers )+ gra+- +'#:re -e s;s2J#es -e "*r2)al*sa2*'+ en proposant en
bonus )+e API -e -3"el'ppe#e+2 (notamment en P;2/'+.
#n utilise donc la commande suivante pour crer la $(>
"*r24*+s2all 44ra#KBHLM 44+a#eK-e:*a+8ser"er 44f*leK//'#e/+*('larg'/"#/-e:*a+8ser"er.<('9B
44(-r'#K//'#e/+*('larg'/*s'/-e:*a+48.H.I4*I784>D4C.*s' 44/"# 44"+( 44+'a)2'('+s'le
Cote> la commande virt:install ne semble pas trop aimer les H dans les paths. ;l faut
donc donner le chemin absolu.
Cote,> La taille maximale de &'( que "e peux allouer est de ,-R=(o.
8ette commande va donc crer une $( nomme debian*server qui disposera de , +o
de &'( (d'ou l'avantage de faire tourner votre hyperviseur sur une machine disposant
de pas mal de &'( 0 )* +o dans mon cas sur une 1imsufi )*+.
3i tout est o9! le message suivant devrait s'afficher>
?omain installation still in progress.
Sou can reconnect to the console to complete the installation process.
Pour l'accs 5 la console (dport $C8 via un tunnel 33%! "e vous conseille d'utiliser
l'interface d'administration de libvirt que vous pouve4 lancer sur un P8 client disposant
d'une interface graphique.
*ESTION DU !SEAU "A TANSLATION
(on serveur dispose d'une seule adresse ;P publique. Les $( auront donc des adresses
;P prives et l'on utilisera la translation s'adresse (C'. pour permettre au $( de sortir
sur ;nternet (voir ce billet pour la cration d'un rseau par C'..
8ertaines configurations sont 5 faire sur votre serveur>
sudo sh 2c Jecho ) TgtU 0proc0sys0net0ipvR0ip:for7ardJ
sudo vi 0etc0sysctl.conf
V @ncomment the next line to enable pac9et for7arding for ;PvR
net.ipvR.ip:for7ardW)
3i vous utilise4 des rgles ;ptables alors il faut a"outer les lignes suivantes dans votre
scripts (attention de bien vrifier que votre script ne repositionne pas la valeur
net.ipvR.ip:for7ard 5 -... "e me suis fais avoir>
V /emu rules (C'. $( and allo7 $( to ?%8P
0sbin0iptables 2t nat 2' P#3.&#@.;C+ 2s )X,.)*P.),,.-0,R I 2d )X,.)*P.),,.-0,R 2"
('3/@E&'?E
0sbin0iptables 2' ;CP@. 2i virbr- 2" '88EP.
0sbin0iptables 2' #@.P@. 2o virbr- 2" '88EP.
0sbin0iptables 2' ;CP@. 2i virbr- 2p udp 2m udp 22dport <O 2" '88EP.
0sbin0iptables 2' ;CP@. 2i virbr- 2p tcp 2m tcp 22dport <O 2" '88EP.
0sbin0iptables 2' ;CP@. 2i virbr- 2p udp 22dport *=>*P 22sport *=>*P 2" '88EP.
0sbin0iptables 2' F#&M'&? 2d )X,.)*P.),,.-0,R 2o virbr- 2m state 22state
&EL'.E?!E3.'KL;3%E? 2" '88EP.
0sbin0iptables 2' F#&M'&? 2s )X,.)*P.),,.-0,R 2i virbr- 2" '88EP.
0sbin0iptables 2' F#&M'&? 2i virbr- 2o virbr- 2" '88EP.
echo ) TgtU 0proc0sys0net0ipvR0ip:for7ard
PETITE N0TE P0UR LES GUESTS EBSDE
Pour un guest sous #penK3?! il faut penser 5 effectuer les actions suivantes pour faire
fonctionner correctement la carte rseau>
arrN2er la VM
3-*2er le f*(/*er /e2(/l*:"*r2/<e#)/0pe+BSDFO.H.$#l
Yinterface typeW'net7or9'G
...
YstrongGYmodel typeW'e)---'GY0strongG
Y0interfaceG
&elancer la $(