Skip to content

KVM/QEMU sur Debian 12

Installation et configuration de KVM sur Debian 12 Bookworm.

Composant Version
Debian 12 Bookworm
QEMU-KVM 7.x
Libvirt 9.x

Durée estimée : 40 minutes


Prérequis

# Vérifier le support CPU
grep -E '(vmx|svm)' /proc/cpuinfo

# Vérifier le module
lsmod | grep kvm

1. Installation

apt update
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients \
    virtinst virt-viewer bridge-utils

# Outils supplémentaires
apt install -y libguestfs-tools virt-top

Ajouter l'utilisateur au groupe

usermod -aG libvirt $USER
usermod -aG kvm $USER

# Se reconnecter ou
newgrp libvirt

Démarrer les services

systemctl enable --now libvirtd
systemctl status libvirtd

virsh version

2. Réseau

Réseau NAT par défaut

virsh net-list --all
virsh net-start default
virsh net-autostart default

Bridge réseau

vim /etc/network/interfaces
auto br0
iface br0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
systemctl restart networking

Ou avec NetworkManager

nmcli connection add type bridge con-name br0 ifname br0
nmcli connection add type ethernet slave-type bridge con-name br0-port ifname eth0 master br0
nmcli connection modify br0 ipv4.addresses "192.168.1.10/24"
nmcli connection modify br0 ipv4.gateway "192.168.1.1"
nmcli connection modify br0 ipv4.method manual
nmcli connection up br0

3. Stockage

# Pool par défaut
virsh pool-list --all
virsh pool-start default
virsh pool-autostart default

# Créer un pool personnalisé
mkdir -p /data/vms

virsh pool-define-as data dir --target /data/vms
virsh pool-build data
virsh pool-start data
virsh pool-autostart data

4. Créer une VM

Télécharger une ISO

cd /var/lib/libvirt/images
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.0.0-amd64-netinst.iso

Installation

virt-install \
  --name debian12-vm \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/debian12-vm.qcow2,size=20 \
  --os-variant debian12 \
  --network network=default \
  --graphics vnc,listen=0.0.0.0 \
  --cdrom /var/lib/libvirt/images/debian-12.0.0-amd64-netinst.iso

Import

virt-install \
  --name imported-vm \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/existing.qcow2 \
  --os-variant debian12 \
  --network network=default \
  --import

Cloud-init

# Télécharger image cloud
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2

# Créer le disque
cp debian-12-generic-amd64.qcow2 /var/lib/libvirt/images/cloud-vm.qcow2
qemu-img resize /var/lib/libvirt/images/cloud-vm.qcow2 20G

# Cloud-init
cat > /tmp/cloud-init.cfg << 'EOF'
#cloud-config
hostname: cloud-vm
users:
  - name: admin
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_authorized_keys:
      - ssh-rsa AAAA...
EOF

cloud-localds /var/lib/libvirt/images/cloud-init.iso /tmp/cloud-init.cfg

virt-install \
  --name cloud-vm \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/cloud-vm.qcow2 \
  --disk path=/var/lib/libvirt/images/cloud-init.iso,device=cdrom \
  --os-variant debian12 \
  --network network=default \
  --import

5. Gestion des VMs

# Lister
virsh list --all

# Démarrer / Arrêter
virsh start debian12-vm
virsh shutdown debian12-vm
virsh destroy debian12-vm
virsh reboot debian12-vm

# Autostart
virsh autostart debian12-vm

# Console
virt-viewer debian12-vm
virsh console debian12-vm

# Supprimer
virsh undefine --remove-all-storage debian12-vm

6. Snapshots

# Créer
virsh snapshot-create-as debian12-vm snap1 "Before update"

# Lister
virsh snapshot-list debian12-vm

# Restaurer
virsh snapshot-revert debian12-vm snap1

# Supprimer
virsh snapshot-delete debian12-vm snap1

7. Clonage

virt-clone \
  --original debian12-vm \
  --name debian12-clone \
  --file /var/lib/libvirt/images/debian12-clone.qcow2

8. Modifier une VM

# RAM
virsh setmaxmem debian12-vm 4G --config
virsh setmem debian12-vm 4G --config

# vCPUs
virsh setvcpus debian12-vm 4 --config --maximum
virsh setvcpus debian12-vm 4 --config

# Ajouter disque
qemu-img create -f qcow2 /var/lib/libvirt/images/data.qcow2 50G
virsh attach-disk debian12-vm /var/lib/libvirt/images/data.qcow2 vdb --persistent

# Ajouter réseau
virsh attach-interface debian12-vm network default --model virtio --persistent

9. Templates

# Préparer le template
virt-sysprep -d debian12-template

# Déployer
cp /var/lib/libvirt/images/debian12-template.qcow2 /var/lib/libvirt/images/new-vm.qcow2

virt-install \
  --name new-vm \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/new-vm.qcow2 \
  --os-variant debian12 \
  --network network=default \
  --import

10. Monitoring

virt-top
virsh domstats debian12-vm
virsh cpu-stats debian12-vm
virsh domblkstat debian12-vm vda

11. Firewall

ufw allow 5900:5910/tcp  # VNC
ufw reload

Comparatif Rocky vs Debian

Aspect Rocky 9 Debian 12
Packages @virtualization-host qemu-kvm libvirt-*
Groupe libvirt libvirt
Réseau nmcli interfaces ou nmcli
Firewall firewalld ufw
SELinux Oui Non (AppArmor)

Vérification

virsh version
virt-host-validate
virsh list --all
virsh net-list --all
virsh pool-list --all

Dépannage

# Logs
journalctl -u libvirtd -f
cat /var/log/libvirt/qemu/*.log

# Permissions
ls -la /var/lib/libvirt/images/

# AppArmor
aa-status

Changelog

Date Modification
2024-12 Création initiale