24 janvier 2021

Tuto Virtualisation avec KVM, partie VI : Préparation d’un template pour les VMs

Dans cette sixième partie de la série sur KVM, nous allons voir la création d’un template à partir de deboostrap.

Ce template servira à la création de VM autonome, c’est à dire avec un grub, un noyau propre bref plus facilement bidouillable (c’est bien plus simple et moins risqué pour faire des modifs du noyau, etc…)

Ceci reste faisable avec la méthode précédente, en faisant du coup le travail sur des copies du noyau sur l’hyperviseur, mais ça laisse quand même un gros risque de « foirage »…

Puis la, on peut templater ce qu’on veut au final, une veille version de Debian, une sid, voir une autre distribution de Linux.

 

I – Préparation Squelette

Afin de faciliter le déploiement de mes VMs, j’ai un répertoire skel contenant les fichiers qui seront chargés (et modifiés pour certains) pour chaque VM à l’aide de commandes sed.

On va donc préparer tout cela.

Ici, je reste simple et ne couvre pas certains fichiers, mais libre à vous d’ajouter ceux que vous désirez.

Pour commencer, on se positionne dans le répertoire /root :

# cd

Puis :

# mkdir vm/skel/etc -p
# cd vm/skel/etc

Le répertoire /root/vm contiendra des scripts bash dont on parlera plus tard.

 

A – Sources.list pour Apt

On créé un répertoire :

# mkdir apt

On va copier le fichier sources.list depuis l’hyperviseur

# cp /etc/apt/sources.list apt/

 

B – Grub

On va créer un répertoire :

# mkdir default
# cd default

Et dedans, créez un fichier grub semblable à cela :

GRUB_DEFAULT=0
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0"
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"

On règle pour visionner les messages de boot, pour avoir la console et au passage, on remet le nom des interfaces en ethX.

On revient dans /root/vm/skel/etc/ :

#cd ..

 

C – Fstab

Créez un fichier fstab avec ceci :

UUID=rootuuid / ext4 errors=remount-ro 0 1
UUID=swapuuid none swap sw 0 0

« rootuuid » et « swapuuid » seront modifiés lors de la création de notre VM.

 

D – Hostname

un fichier hostname  :

debian

Ici, on modifiera « debian » en fonction de la future VM.

 

E – Hosts

Un fichiers hosts :

127.0.0.1 localhost
127.0.1.1 debian

La encore, ce sera « debian » qui sera modifié

 

F – Interfaces

Pour le réseau, création du répertoire :

# mkdir network
# cd network

Et ici, un fichier interfaces :

auto lo
 iface lo inet loopback

auto eth0.10
 iface eth0.10 inet static
 address 10.10.1.IP
 netmask 255.255.255.0
 gateway 10.10.1.1

auto eth0.20
 iface eth0.20 inet static
 address 10.20.1.IP
 netmask 255.255.255.0

auto eth1
 iface eth1 inet static
 address 10.99.1.IP
 netmask 255.255.255.0

Ici, c’est « IP » qui sera modifié.

Et on revient en arrière :

# cd ..

 

G – Resolv.conf

Et pour finir, un fichier resolv.conf avec votre resolveur :

nameserver 1.1.1.1

par exemple…

 

II – Debootstrap

On revient dans /root/vm :

# cd /root/vm

Et on va y créer un dossier pour le template :

# mkdir debugo

Pour le debootstrap, une petite astuce pour aller plus vite en utilisant l’iso :

# mount -o loop /img/debian.iso /media/cdrom/

Et on lance :

# debootstrap --no-check-gpg --include=grub-pc,linux-image-amd64,locales \
--exclude=os-prober stable debugo file:/media/cdrom

Je rajoute les paquets pour grub et le noyau et j’exclue au passage os-prober qui nous ferait apparaitre l’OS de l’hyperviseur dans le Grub de la VM…

III – Préparation du template

On va préparer le template en quelques étapes.

A – Montages

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

Puis :

cp /etc/apt/sources.list debugo/etc/apt/

Pourquoi je copie le sources.list à ce moment ?

Pour la suite, les apt dans le chroot nécessitent un sources.list, qui n’est pas présent par défaut.

Et je ne copie que celui ci car durant la création du template je peux rajouter des paquets qui modifient des fichiers que j’ai déjà configuré (par ex, postfix), la copie du squelette ne doit donc intervenir qu’à la fin.

 

Maintenant, chrootons :

# LANG=C chroot /mnt

Et pour être sur (au cas ou votre iso ne serait pas à jour par exemple et que vous ne l’ayez pas vu) :

chroot# apt-get update && apt-get upgrade -y

 

B – Réglage timezone

Première chose à configurer, la timezone.

Dans le chroot :

chroot# ln -fs /usr/share/zoneinfo/Europe/Paris /etc/localtime
chroot# dpkg-reconfigure --frontend=noninteractive tzdata

 

C – Réglage Locales

Toujours dans le chroot :

chroot# sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
chroot# sed -i -e 's/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' /etc/locale.gen
chroot# dpkg-reconfigure --frontend=noninteractive locales
chroot# update-locale LANG=fr_FR.UTF-8

 

D – ACPID

On va installer le paquet acpid, qui va permettre l’extinction et le reboot de la machine depuis l’hyperviseur.

chroot# apt-get install acpid -y
chroot# systemctl enable acpid

Et voila, nos futures VMs auront un bouton power.

 

E – Paquets supplémentaires

Ici, on va rajouter tous les paquets que l’on désire :

chroot# apt-get install ssh htop bash-completion wget man-db dnsutils \
bsd-mailx net-tools whois telnet tcpdump traceroute parted postfix

Liste non exhaustive…

J’évite d’utiliser tasksel pour installer les trucs standards car il a tendance à en mettre trop. Du coup, je le fais à la mimine.

 

F – Copie squelette

On sort du chroot :

chroot# exit

Et on lance la copie de nos fichiers :

# cp skel/etc/* debugo/etc/ -r

 

G – Démontage

Pour être propre :

# umount debugo/{sys,proc,dev/pts,dev,tmp}
# umount /media/cdrom/

 

H – Création de l’archive

On termine en créant notre archive :

# tar zcvf debugo.tar.gz debugo/

Et on peut supprimer le répertoire

# rm debugo/ -r

 

IV – Conclusion

Et voila, on a un tar tout chaud pour nos VMS, et on va voir comment s’en servir pour se créer une VM en quelques secondes.

Laisser un commentaire

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