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.