19 mars 2024

Tuto Virtualisation avec KVM, partie VII : Création d’une VM à partir du template

Dans cette septième partie de la série sur KVM, nous allons voir la création d’une VM à partir du template créé précédemment.

Ici, nous allons faire une VM « complète » avec son propre noyau.

 

I – Préparation des volumes lvm

A – Création des LVS

Création via virsh :

# virsh vol-create-as kvm-lvm mavmquidechire 4G
# virsh vol-create-as kvm-lvm mavmquidechire-swap 1G

Pour le swap, je préfère avoir un volume dédié plutôt qu’une partition sur le volume principal.

 

B – Partitionnement

A la différence d’une machine dont le process de boot est géré par l’hyperviseur, ici, on ne peut pas avoir le FS (etx4) directement sur le LV. Nous avons besoin d’un système de partitions (tout comme la première VM que nous avions monté depuis l’ISO).
Et la, on est confronté à un choix… MBR ou GPT ?

MBR, c’est « l’ancien » système, utilisé conjointement avec le BIOS. Limitation à 4 partitions primaires et 2 To Max.
GPT, c’est le « futur », utilisé conjointement avec l’UEFI. Limitation à 256 partions et en espace, on est large.

Mais on peut aussi tout à fait utiliser MBR avec l’UEFI ou GPT avec le BIOS.

Restons simples avec un BIOS classique. Pour une VM, l’UEFI n’apporte rien…
Ensuite,il faut savoir GPT complique le processus de réduction de volumes. Certes, on ne fait pas ça tous les jours, mais cela peut arriver, et je préfère donc garder la possibilité de pouvoir le faire ;).
Et pour terminer limitation à 2 To ne gêne pas, mes VMS ayant généralement un disque dur de taille minimale.

Bref, partitionnons !

On va utiliser parted (le paquet ajoute également partprobe qu’on utilisera juste après).

# apt install parted

Pour le faire en MBR :

parted --script /dev/vg0/mavmquidechire 'mklabel msdos'
parted --script /dev/vg0/mavmquidechire 'mkpart primary ext4 1MiB 100%'

Pour les curieux, en GPT, ce serait :

parted --script /dev/vg0/mavmquidechire  'mklabel gpt'
parted --script /dev/vg0/mavmquidechire  'mkpart primary 1MIB 2MIB'
parted --script /dev/vg0/mavmquidechire  'mkpart primary ext4 2MIB 100%'
parted --script /dev/vg0/mavmquidechire  'set 1 bios_grub on'

La première partition est requise pour Grub avec GPT et démarrage BIOS. Si on avait un boot en UEFI, il y aurait en plus une autre partition de 500 Mo en deuxième position.

Bref, faites comme vous voulez,  mais je conseille de rester simple en faisant du MBR. Par la suite, on travaillera donc sur la partition 1 (si vous le faites en GPT, vous travaillerez sur la partition 2).

 

C – Préparation du Swap

Pour le swap, la, pas besoin de partition, on va directement le mettre sur le LV :

# mkswap /dev/vg0/mavmquidechire-swap

 

D – Partition, ou es tu ?

Maintenant, il s’agit d’accéder à notre partition que l’on a créée sur le LV.

On exécute partprobe, qui va scanner les partitions :

# partprobe

La, un petit :

# lsblk

On doit y voir :

├─vg0-mavmquidechire 253:4 0 4G 0 lvm
│ └─vg0-mavmquidechire1 253:7 0 4G 0 part

La partition est dans le périphérique : /dev/mapper/vg0-mavmquidechire1

On prend note du petit 1 derrière 😉

Warning !

Si vous nommez votre disque avec un numérique à la fin, par exemple mavmquidechire1 le device sera : /dev/mapper/vg0-mavmquidechire1p1.

Notez donc ici l’ajout du p1.

On formate cette partition :

# mkfs.ext4 /dev/mapper/vg0-mavmquidechire1

Et on la monte :

# mount /dev/mapper/vg0-mavmquidechire1 /mnt/

Note :

On peut trouver le même type de méthode avec losetup pour ensuite accéder à un périphérique /dev/loopXpX

Ici, avec LVM, c’est superflu, vu que les partions sont accessibles sans cette bidouille (grâce à dmsetup qui fait son taf comme un grand)

 

II – Mise en place du template

A – Décompression

Pour commencer, on va décompresser notre template :

# tar -C /mnt -xvf debugo.tar.gz --strip-components=1

L’option –strip-components=1 élude le debugo/ des chemins afin de bien décompresser directement dans /mnt et non /mnt/debugo.

Edit : Oui, j’aurais pu faire mon tar d’origine autrement, mais bon, ca marche dans les deux cas…

On peut vérifier avec

# ls /mnt -l

qui doit nous afficher une structure que l’on connait bien.

Il ne reste plus alors qu’à faire quelques ajustements.

B – Montages

Tout d’abord :

# mount -t sysfs /sys /mnt/sys
# mount -t proc /proc /mnt/proc
# mount --bind /dev /mnt/dev
# mount -t devpts /dev/pts /mnt/dev/pts

C – Modification fstab

On va modifier le fstab de notre future VM pour qu’il ait les bons uuids.

# rootuuid=$(blkid -s UUID -o value "/dev/mapper/vg0-mavmquidechire1")
# swapuuid=$(blkid -s UUID -o value "/dev/mapper/vg0-mavmquidechire--swap")
# sed -i "s/rootuuid/$rootuuid/g" /mnt/etc/fstab
# sed -i "s/swapuuid/$swapuuid/g" /mnt/etc/fstab

Notez bien que le device pour le swap est  vg0-mavmquidechire–swap et non vg0-mavmquidechire-swap.

D – Interfaces

On modifie les adresses IPS :

# sed -i "s/IP/66/g" /mnt/etc/network/interfaces

Cette VM aura donc les adresses : 10.10.1.66; 10.20.1.66 et 10.99.1.66…

E – Nom de la vm

On change le nom de la vm dans :

# sed -i "s/debian/mavmquidechire/g" /mnt/etc/hostname
# sed -i "s/debian/mavmquidechire/g" /mnt/etc/hosts

F – Changement du mot de passe root

On change le password du root :

chroot# passwd root

G – GRUB

Et pour terminer, on va installer Grub, sans quoi la VM ne pourrait pas démarrer.

chroot# grub-mkconfig -o /boot/grub/grub.cfg
chroot# grub-install /dev/mapper/vg0-mamvquidechire

Attention ici, on pointe bien sur le « disque » et non sur une partition.

Et on peut sortir du chroot…

chroot# exit

H – Nettoyage

Avant de lancer la création de la VM, on pense à démonter tout proprement :

umount /mnt/{sys,proc,dev/pts,dev}
umount /mnt

Et c’est prêt !

 

III – Création de la VM

Bah voila, on y est… On va enfin pouvoir créer la VM.

virt-install -n mavmquidechire \
--vcpus 1 \
--cpu host \
--ram 1024 \
--import \
--disk vol=kvm-lvm/mavmquidechire,bus=virtio \
--disk vol=kvm-lvm/mavmquidechire-swap,bus=virtio \
--network network:ovs-vlans,portgroup=vlans1020,model=virtio,target=mavmquidechire.0 \
--network network:ovs-vlans,portgroup=vlan99,model=virtio,target=mavmquidechire.1 \
--graphics none \
--console pty,target_type=serial \
--os-variant debian10

Une fois celle ci démarrée, elle est prête à être utiliser.

 

IV – Conclusion

Bon, tapées à la main, ces opérations prennent un peu de temps, mais une fois scriptées, vos VM seront prêtes en moins de dix secondes…

Direction donc : Tuto Virtualisation avec KVM, partie VIII : Scripts d’automatisation

 

 

 

 

 

 

 

 

Laisser un commentaire

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