Ce guide à pour objectif de vous expliquer comment installer un hyperviseur complet sous Debian Buster. C’est l’équivalent d’un serveur Hyper-V ou VMware ESX.
Voici les fonctionnalités supportées
Il faudra bien entendu un processeur supportant la virtualisation (Intel VT ou AMD-V). Il est également possible de virtualiser avec certains processeurs ARM ou PowerPC. Plus d’information :
La mémoire vive est également très importante, minimum 4 Go ou plus suivant le nombre de machines que vous prévoyez de faire fonctionner. Enfin prévoyez un disque dur externe pour les sauvegardes.
Effectuez une installation classique d’une Debian Jessie à l’aide d’une Netinstall par exemple. N’oubliez pas de partitionner votre disque avec LVM prenant le soin de laisser un peu de place dans votre pool LVM. Je suggère le schéma de partitionnement suivant.
L’espace libre dans le pool lvm servira à d’éventuel snapshot de la partition home dans le but de faire les sauvegardes. Cet espace devra pouvoir accueillir les données modifiées tout le long de votre sauvegarde.
Installation de l’utilitaire de pont réseau
apt-get install bridge-utils
Modifier le fichier /etc/network/interfaces
auto br0
iface br0 inet static
address 192.168.3.4
netmask 255.255.255.0
gateway 192.168.3.1
bridge_ports eth0
Activer l’IP forwarding
sysctl -w net.ipv4.ip_forward=1
Installer les paquets nécessaires
apt-get install kvm libvirt-daemon libvirt-daemon-system sasl2-bin lxc debootstrap cgroupfs-mount xz-utils
Modifier le fichier /etc/default/libvirtd et activer les options suivantes
cgroups="memory devices"
libvirtd_opts="-l"
Modifier le fichier /etc/libvirt/libvirtd.conf et activer les options suivantes
listen_tls = 0
listen_tcp = 1
Créer le fichier template pour LXC et libvirt
cat > ~/.template-lxc.xml << EOF
<domain type='lxc'>
<name>HOSTNAME</name>
<memory>128000</memory>
<os>
<type>exe</type>
<init>/sbin/init</init>
</os>
<vcpu>1</vcpu>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/lib/libvirt/libvirt_lxc</emulator>
<filesystem type='mount'>
<source dir='/var/lib/lxc/HOSTNAME/rootfs'/>
<target dir='/'/>
</filesystem>
<interface type='network'>
<source network='default'/>
</interface>
<console type='pty'/>
</devices>
</domain>
EOF
Création d’un mot de passe pour libvirt
saslpasswd2 -a libvirt root
Vérifier le nom du compte créé
sasldblistusers2 -f /etc/libvirt/passwd.db
Créer un fichier de configuration qui contiendra le bridge
cat > ~/.network-default.xml << EOF
<network>
<name>default</name>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>
EOF
Puis l’appliquer
virsh net-undefine default
virsh net-define ~/.network-default.xml
virsh net-start default
virsh net-autostart default
rm ~/.network-default.xml
cat > ~/.storage-default.xml << EOF
<pool type='dir'>
<name>default</name>
<target>
<path>/storage/qemu</path>
<permissions>
<mode>0755</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</pool>
EOF
Puis le définir
mkdir /storage/qemu
virsh pool-define ~/.storage-default.xml
virsh pool-start default
virsh pool-autostart default
Activer le RAID 1 (mirroir) pour tous les volumes
for volume in swap root storage ; do
lvconvert -m1 /dev/debian/${volume}
done
Créer les dossiers et les liens symboliques
mv /var/lib/lxc/ /storage
ln -s /storage/lxc /var/lib/lxc
On défini une variable qu’on utilisera plus tard
lxchostname=<nom de votre machine>
On créer la machine qui créera un dossier dans /storage/lxc/test contenant notre nouveau système
lxc-create --template download --name $lxchostname
On peut aussi directement spécifier les options en une seule ligne
lxc-create --template download --name $lxchostname -d debian -r stretch -l amd64
On créer le fichier de configuration pour libvirtd qu’on applique
sed "s/HOSTNAME/${lxchostname}/g" ~/.template-lxc.xml > ~/.temp.xml
virsh -c lxc:// define ~/.temp.xml
rm ~/.temp.xml
On fait quelques ajustement si nécessaire dans le nouveau filesystem comme corriger un problème avec systemd
rm /storage/lxc/${lxchostname}/rootfs/etc/systemd/system/getty.target.wants/getty*
On peut entrer (chroot) dans le dossier et faire ce qu’on veut
mount --bind /dev /storage/lxc/${lxchostname}/rootfs/dev
mount --bind /proc /storage/lxc/${lxchostname}/rootfs/proc
cp /etc/resolv.conf /storage/lxc/${lxchostname}/rootfs/etc/resolv.conf
chroot /storage/lxc/${lxchostname}/rootfs/
Puis installer par exemple ssh, ajouter un compte et définir le mot de passe root
apt-get install -y ssh
passwd root
adduser *compte_de_votre_choix*
exit
Ou bien activez sudo, par exemple
apt-get install -y ssh sudo
adduser iabsis
adduser iabsis sudo
exit
Puis installer par exemple ssh, ajouter un compte et définir le mot de passe root
yum install openssh-server
passwd root
adduser *compte_de_votre_choix*
exit
Ou bien activez sudo, par exemple
yum install openssh-server sudo
adduser iabsis
passwd iabsis
usermod -aG wheel iabsis
exit
A la fin, ne pas oublier de démonter les bind
umount /storage/lxc/${lxchostname}/rootfs/dev
umount /storage/lxc/${lxchostname}/rootfs/proc
On peut maintenant démarrer le container et le mettre au démarrage
virsh -c lxc:// start ${lxchostname}
virsh -c lxc:// autostart ${lxchostname}
Si on souhaite se connecter à la console
virsh -c lxc:// console ${lxchostname}
Si on souhaite supprimer le container
virsh -c lxc:// destroy ${lxchostname}
virsh -c lxc:// undefine ${lxchostname}
rm -rf /storage/lxc/${lxchostname}