16 juin 2021

Tuto Virtualisation avec KVM, partie II : Installation d’une VM à partir d’une ISO

Dans cette deuxième partie de la série sur KVM, nous allons créer notre première VM de la façon la plus simple que soit : à partir d’une image ISO.

 

I – Préparatifs

On va commencer par télécharger l’ISO que l’on veut installer, au hasard … une Debian :

# mkdir /img
# cd /img
# wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.4.0-amd64-netinst.iso
# mv debian-10.4.0-amd64-netinst.iso debian.iso
# cd

On pourrait tout à fait choisir de tester FreeBSD, CentOS, Fedora ou tout autre distribution.

 

Pour créer les VMs, on va utiliser virt-install qui s’installe de la sorte :

# apt install virtinst --no-install-recommends

 

II  – KVM et le stockage

Niveau stockage, KVM peut utiliser différents formats.

Son format à lui, c’est le qcow2, mais il gère aussi les disques virtuels venant de Vmware, le stockage en NFS, etc, … et également ce que j’affectionne : LVM.

A – Vite fait sur Qcow2

Dans mes articles, j’utilise exclusivement LVM, mais pour info, si vous voulez utiliser qcow2, il faut déjà installer ceci :

# apt install qemu-utils

Puis pour créer votre fichier image :

# qemu-img create -f qcow2 /imgvms/test1.qcow2 5G

Et ensuite, dans les commande virt-inst, vous remplacez les LVs par vos fichiers qcow2 avec par ex :

--file /imgvms/test1.qcow2

B – LVM

Comme on part sur du LVM, on va déjà devoir l’installer :

# apt install lvm2

Virsh permet de builder automatiquement PV, VG, etc.. mais je préfère le faire à la main avant.

Admettons que ce soit la partition sda2 qui va servir.

On va la marquer comme LVM (8E) avec cfdisk par ex :

# cfdisk /dev/sda

La, vous changez le type, puis écrivez les modifications.

 

Ensuite, on créé le PV et le VG :

# pvcreate /dev/sda2
# vgcreate vg0 /dev/sda2

 

C – Création du pool LVM dans KVM

Maintenant, on peut passer à la définition du VG dans virsh :

# virsh pool-define-as kvm-lvm logical --source-name vg0 --target /dev/vg0

Notez bien que le nom de mon VG dans virsh est différent de son vrai nom.

Ensuite, on active :

# virsh pool-start kvm-lvm
# virsh pool-autostart kvm-lvm

On peut lister

# virsh pool-list

Les autres pools ne gênent pas, on va les garder (le img sert pour indexer les ISOs, je n’ai pas encore eu le temps de creuser cet aspect…)

Avoir un pool de stockage défini dans KVM est tout à fait optionnel. On pourrait tout à fait s’en passer et créer les LVs à la main mais pour certaines manipulations qu’on verra plus tard (clone par exemple, c’est nécessaire, enfin, si on passe par le clonage via virsh… bref, ça ne mange pas de pain…)

 

III – La première VM

A – Installation

On peut enfin lancer la création et l’installation de notre première VM avec :

virt-install --name debianmano \
--vcpus 1 \
--cpu host \
--ram 1024 \
--location /img/debian.iso \
--disk pool=kvm-lvm,size=4,bus=virtio \
--network network:ovs-front,model=virtio,mac=52:54:00:11:11:11,target=debianmano.0 \
--graphics none \
--console pty,target_type=serial \
--extra-args='console=ttyS0' \
--os-variant debian10

Au niveau des paramètres :

  • name : sérieusement ?
  • vcpus : indique le nombre de cpus virtuels
  • cpu host : permet de passer tout le jeu d’instruction du processeur hôte vers le(s) vcpu(s).
  • location : indique où se trouve notre ISO
  • disk : permet de créer directement le LV dans le pool. On aurait pu créer le LV avant et donner ici son chemin
  • network : indique le réseau KVM sur lequel est branché la VM, le driver, l’adresse MAC et le nom de l’interface qui sera connectée à openvswitch (sans, ce serait du genre vnet0…)
  • graphic : none désactive la console graphique
  • console et extra-args : active la console série
  • os-variant : permet d’activer des fonctions avancées durant l’install (acpid par exemple)

Plus d’infos ici : https://linux.die.net/man/1/virt-install

WARNING MAC :

Si vous êtes sur un serveur dédié, voyez avec votre prestataire comment gérer les Macs. Chez Online par ex, il faut la générer et faire en sorte que l’interface de VM qui sort avec l’IP FO soit bien configurée avec la MAC générée au préalable.

Chez soi, on s’en « cogne, » mais on peut tout à fait donc forcer une MAC (sans, ce sera au hasard, avec cependant toujours 52:54:00 qui correspond à KVM.

 

B – Installeur Debian

Une fois lancé et passé les messages de boot, on se retrouve avec un installeur Debian classique.

Choix de langue : C, puis on définit sa localisation.
Configuration du réseau (votre VM sera donc dans le même network que l’hyperviseur, par exemple une IP publique en cas de serveur dédié ou une IP en 192.168… si vous êtes chez vous).
Pour le partitionnement, on va prendre auto mais sans LVM, et on poursuit l’installation.

A la question GRUB : on l’installe sur /dev/vda.

Il se peut qu’à la fin, la VM ne se relance pas (je n’ai pas compris pourquoi, vu que ça ne le fait pas systématiquement)

La commande  qui permet de se connecter à la console :

# virsh console debianmano

vous dira que le domaine est coupé.

Dans ce cas, pour le démarrer :

# virsh start debianmano

Et si vous voulez la console en même temps.

# virsh start debianmano --console

 

On voit Grub puis le chargement initial. Les autres messages ne s’affichent pas (configuration par défaut de Grub)

Et à un moment, on arrive sur l’invite de connexion.

Vous pouvez alors vous connecter sur votre VM et cette dernière doit communiquer correctement sur le réseau (ping, etc…)

Pour quitter la console, c’est CTRL + ] (en physique car en ssh, je dois faire CTRL ¤)

 

IV – Commandes Virsh

Au passage, une liste (non exhaustive) de commande utile :

# virsh autostart debianmano

Active le démarrage automatique de la VM.

# virsh reboot debianmano

Reboot de la machine (via ACPI)

# virsh shutdown debianmano

Shutdown de la machine (via ACPI)

# virsh destroy debianmano

Simule le coup de la prise…

# virsh suspend debianmano
# virsh resume debianmano

Met en pause et réactive la VM

# virsh edit debianmano

Permet d’éditer le fichier de conf de la VM

# virsh dumpxml debianmano > file.xml

Dump la configuration de la VM dans un fichier

# virsh define file.xml

Créer une nouvelle machine selon un fichier

# virsh create file.xml

La même chose, mais démarre en plus la machine.

# virsh undefine debianmano

Supprime la VM (mais ne l’arrête pas si elle tourne…)

Pour supprimer aussi le LV créé automatiquement :

# virsh vol-delete debianmano kvm-lvm

 

V – Détails de la VM

Bon que remarque t’on  avec cette VM ?

Contrairement aux VMs de Xen qui, si on n’utilise pas PyGrub (ou PVGRUB), utilisent le kernel/initramfs de l’hyperviseur, ici, on a une machine « complète » : Grub, chargement du noyau…

Une machine en quelque sorte plus « autonome ». Il sera ainsi possible de faire des modifications du noyau directement dans la VM.

En parlant de Grub, sur la VM, on va éditer le fichier /etc/default/grub pour y modifier les deux lignes :

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"
GRUB_TERMINAL="serial console"

Puis :

debianmano# update-grub

Ceci nous permettra de voir les messages du kernel au boot.

Au niveau Openvswitch :

# ovs-vsctl show

nous montre bien le port nommé debianmano.0 connecté sur le br0

Et en ce qui concerne le LV :

# virsh vol-list kvm-lvm

Qu’on peut le voir aussi avec :

# lvs

Tout est en ordre.

Et si vous voulez voir le fichier de configuration de la VM :

#virsh edit debianmano

Ho, le joli XML… (je ne suis pas fan, mais ca n’engage que moi…)

 

VI – Le p’tit truc en plus

Admettons que la VM soit coupée et que vous souhaitiez accéder à ses fichiers.

Avec Xen et mon système de VMS, le FS (ext4) est directement sur le LV, je peux donc le monter directement :

# mount /dev/vg0/monvol /mnt

Mais ici, ce n’est pas le cas. Le LV contient la(les) partitions créées pendant l’installation de la Debian.

On verra plus tard comment s’y connecter de façon « bas niveau », mais en attendant, voila un outil pratique …

Cela s’installe avec :

# apt install libguestfs-tools --no-install-recommends

On va couper la VM :

virsh shutdown debianmano

Puis :

# guestmount -d debianmano -i /mnt

La, on patiente un peu..

Et on a le FS de la VM monté dans /mnt… Tada…

Pour démonter :

# guestunmount /mnt

On peut relancer la VM, on va en avoir besoin pour la suite :

# virsh start debianmano

 

VII – Conclusion

Voila, vous savez maintenant comment créer une VM à partir d’une ISO. Simple non ?

Avant de voir l’autre façon de faire à l’aide de debootstrap, nous allons discuter réseau dans la partie suivante.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *