Setup de KVM/Libvirt sur une dedibox

Cet article explique le setup de KVM/Libvirt sur une dedibox de chez online.net, sur un serveur hôte en Debian Wheezy. Évidement, une bonne partie des infos sont valides pour n’importe quel hébergeur.

On commence par installer la base :

    apt-get install libvirt-bin bridge-utils qemu-kvm virtinst

On setup un LVM que l’on appelle “system”, sur lequel on créé des LV pour les VM (je vous laisse vous debrouiller).

Il faut commander une IP Failover et sa mac associée, de type KVM, sur console.online.net et l’assigner à votre serveur. On prendra les paramètres suivants :

    IP hote : 4.3.2.10
    IP VM : 1.2.3.4
    Mac VM : 54:52:00:00:00:00 
    Nom de la VM : vm1

On édite la configuration réseau afin de créer un bridge sur lequel les VM seront attachée, et ajouter une route pour que la VM ai une connexion.

    vim /etc/network/interfaces

    auto eth0
    iface eth0 inet static
      address 4.3.2.10
      netmask 255.255.255.0
      gateway 4.3.2.1
      up brctl addbr dmz0
      up brctl setfd dmz0 0
      up brctl stp dmz0 on
      up ifconfig dmz0 up
      up /sbin/route add 1.2.3.4 dev dmz0

Un petit /etc/init.d/networking restart et ça devrait passer.

Faites un “brctl show”, vous devriez voir le bridge.

Ne pas oublier d’activer l’ip_forward sur l’hôte.

Note : Bien qu’il ne devrait plus être indispensable d’activer le proxy arp si on a fait générer une adresse mac sur l’interface d’online, j’ai tout de même eu des soucis, donc activons le !

    vim /etc/sysctl.conf

      net.ipv4.conf.eth0.proxy_arp=1
      net.ipv4.ip_forward=1

Tout d’abord, il faut créer le LV associé avant de lancer l’installation, puis on utilise virt-install pour la suite :

    lvcreate -v -L 20G -n vm1 system
    virt-install -v --os-type=linux -n vm1 -r 2048 --disk=/dev/system/vm1 --vnc --vnclisten=4.3.2.10 --network bridge=dmz0,mac=54:52:00:00:00:00 --cdrom=debian-7.1.0-amd64-i386-netinst.iso

Connectez vous avec vncview sur l’IP de votre hôte et faire une installation tout ce qu’il y a de plus basique (sans réseau). Rebootez la VM, reconnectez vous en VNC, ensuite place à quelques modifications dans la VM afin d’avoir une console et du réseau.

Pour pouvoir acceder à votre VM avec un virsh console vm1 depuis l’hôte (utile en cas de dépanage…), éditez dans la vm

    vim /etc/default/grub

      GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200"

    vim Editer /etc/inittab
      # Decommenter la ligne suivante 
      T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100

Puis update-grub pour mettre à jour le grub.cfg

Pour le réseau

    vim /etc/network/interfaces

    auto eth0
    iface eth0 inet static 
      address 1.2.3.4 # Ip de votre VM
      netmask 255.255.255.255 # oui, un /32
      post-up /sbin/ip route add 4.3.2.10/32 dev eth0
      post-up /sbin/ip route add default via 4.3.2.10 # Oui, c'est l'IP de l'hote !

Faire un halt de la VM, puis éditez la configuration

    virsh shutdown vm1
    virsh edit vm1

Supprimez les lignes dans le XML à propos de vnc pour desactiver VNC

     <graphics type='vnc' listen type='address' address='4.3.2.10'/> >

On start la VM

     virsh start vm1

La console devrait être disponible

     virsh console vm1

Et la machine devrait pinguer sur le réseau, et avoir accès au net :)

Prochaine étape, activer les drivers virtio pour de meilleurs perfs, dans un autre article

Trucs et astuces :

Il est possible de monter les partitions de la VM sur l’hôte (VM éteinte) afin de pouvoir éditer directement les fichiers sans passer par la console/vnc qui peut parfois être récalcitrant. Pour cela, utiliser kpartx pour activer ou désactiver les partitions du LV !

    # Lister les partitions du LV
    kpartx -l /dev/system/vm1

    # Activer les partitions 
    kpartx -av /dev/system/vm1

      add map system-vm11 (254:9): 0 19529728 linear /dev/system/vm1 2048
      add map system-vm12 (254:10): 0 399894530 linear /dev/system/vm1 19533822
      add map system-vm15 : 0 1951744 linear 254:10 2
      add map system-vm16 : 0 397940736 linear 254:10 1953794


    # On peut ensuite mounter une partition !
    mount /dev/mapper/system-vm1 /mnt

    # Ne pas oublier de umount et desactiver les partitions après opération
    umount /mnt
    kpartx -dv /dev/system/vm1