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