Newsflash

2014/12/26 : Le papier "SDN based architecture for IoT and improvement of the security", O. Flauzac, C. Gonzales, A. Hachani et F. Nolot vient d'être accepté pour publication à la conférence internationale IEEE AINA 2015 / PITSac workshop.

 

Virtualisation

Voici la liste des commandes à suivre pour réaliser une installation d'une machine virtuelle sous linux (Réalisé sur une machine hôte Ubuntu 9.04 amd64 pour l'installation d'une machinve virtuelle Debian Testing amd64)

Toutes les images de mes machiens virtuelles sont stockés dans /usr/local. Pour améliorer les performances, ce répertoire /usr/local est monté en Raid 0 logiciel, ce qui me permet d'atteindre les 130 Mo/s (test réalisé avec hdparm -tT /dev/md1).

1. Création du disque virtuel

  • kvm-img create -f qcow2 /usr/local/qemu-image/debian-testing_amd64.img 4G

2. Installation d'une débian testing amd64

  • kvm -m 512 -cdrom /usr/local/ISO/debian-testing-amd64-netinst.iso -boot d /usr/local/qemu-image/debian-testing_amd64.img -localtime

Je vous conseille de faire une installation en mode expert  (Advanced -> Expert) afin de pouvoir minimiser l'espace disque nécessaire à votre installation. Sinon les 4G ne suffiront pas.

Pendant l'install, à part choisir la langue française, vous choisissez systèmatiquement toutes les options proposées par défaut juqu'au choix des logiciels. Pour aller plus vite et minimiser votre installation, choisir uniquement Serveur SSH et Utilitaires standard du système. Nous installerons l'interface graphique à la main, une fois l'installation terminée.

3. Booter votre machine virtuelle

  • kvm -m 512 /usr/local/qemu-image/debian-testing_amd64.img -usb --usbdevice tablet -net nic -net user -localtime

4. Finir l'installation

  • Il ne vous reste plus qu'à vous connecter en root (ou bien en utilisateur et faire un su).
  • Faire un apt-get install gnome-panel gdm gnome-terminal nautilus iceweasel sun-java6-jre sun-java6-plugin
  • Un reboot et vous devrez vous retrouver sous l'invite graphique de connexion

5. Lancement en tâche de fond et connexion avec vnc

Pour l'instant, à chaque lancement de votre machine virtuelle, une fenêtre Qemu s'ouvre sur votre bureau. Pour exécuter votre machine en tâche de fond et vous connecter quand vous le souhaitez, il suffit d'utiliser l'option vnc

  • kvm -m 512 /usr/local/qemu-image/debian-testing_amd64.img -usb --usbdevice tablet -net nic -net user -vnc :1 -k fr &
    • Ou bien kvm -m 512 /usr/local/qemu-image/debian-testing_amd64.img -usb --usbdevice tablet -net nic -net user -vnc :1 -k fr -daemonize
  • vncviewer localhost:1

Pa défault il n'y a pas de mot de passe de connexion et le port utilisé est le 5901. Pourquoi 5901 ? L'option -vnc :1 demande de lancer la machine virtuelle dans l'environnement graphique :1, accessible par le port (5900 + 1). Si vous faite un -vnc :10, vous devrez utiliser le port 5900+10, soit 5910.

 

A partir de cette méthode, j'ai fait l'installation des machines virtuelles suivantes :

  • Debian testing amd_64
  • Debian testing x86
  • Ubuntu 9.04 amd_64
  • Ubuntu 9.04 x86
  • Windows XP SP3 x86

Lors de l'utilisation d'une machine virtuelle, assez souvent la même image est utilisée. Malheureusement, en cas de mauvaises manipulations, votre image peut devenir instable ou pire, inutilisable. Comment peut-on alors revenir en arrière ? Impossible sauf si vous avez pris une précaution : avoir quelque part une copie de votre image avant la mauvaise manipulation. Il existe alors 2 solutions :

  • Faire des snapshot réguliers
  • Utiliser un disque relatif, méthode que nous allons détaillé ci-dessous

A partir de votre image "propre", nous allons créer une image relative qui va être utilisé par notre machine virtuelle. Avec cette méthode, l'image "propre" restera intacte et toutes les modifications seront enregistrées dans l'image relative.

  1. Fabrication de l'image relative
    • Vérifions notre image : kvm-img info debian-testing_x86.img
      • image: debian-testing_x86.img
        file format: qcow2
        virtual size: 4.0G (4294967296 bytes)
        disk size: 1.9G
        cluster_size: 4096
        highest_alloc: 1998299136
  2. Nous supposons que nous avons des images au format qcow2. Si ce n'est pas le cas, vous pouvez utiliser kvm-convert pour faire une conversion. Je ne pourrai vous dire si la technique de l'image relative est fonctionnel avec des images d'autres formats. Pour connaitre le format de votre image, un simple kvm-img info vous l'information.

  3. Création de l'image relative : kvm-img create -b debian-testing_x86.img -f qcow2 debian-testing_x86-rel.img
  4. Utilisons notre image relative
    • kvm -m 512 -localtime debian-testing_x86-rel.img
    Créons un répertoire sur notre compte pour constater l'enregistrement des différences puis faire un kvm -m 512 -localtime debian-testing_x86.img pour constater que ce répertoire existe bien dans la machine virtuelle utilisant l'image debian-testing_x86-rel.img mais pas dans celle debian-testing_x86.img

Pas besoin de snapshot et de faire une copie de votre image "propre". Avec cette méthode, Vous pouvez donc faire plusieurs images relatives de votre image "propre" pour lancer plusieurs machines virtuelles. Evidemment, si vous souhaitez transporter votre image vers une autre machine, il faudra copier les 2 fichiers car seule l'image relative ne vous permettra pas de booter votre machine virtuelle.

Tips : Si vous voulez "fusionner" votre image relative et l'image "propre" pour obtenir une image  "transportable", c'est à dire composé d'un unique fichier : kvm-img convert debian-testing_x86-rel.img -O qcow2 debian-testing_x86-clean.img. Un fsck /dev/hda1 sera peut-être necessaire pour pouvoir utiliser correctement votre nouvelle image.

 

Libvirt : vous ne connaissez pas ? Cela permet de contrôler intégralement des machines virtuelles sans avoir besoin d'être en mode interactif. Pour utiliser cette API, vous avez besoin d'installer les packages libvrt-bin et python-libvirt.

Nous considérons dans ce mini-tutorial sur libvirt que vous avez une image Qemu. Nous allons utiliser les images réalisées lors des tutorials précédents (installation de machines virtuelles avec kvm ou qemu et utilisation de disques relatifs avec kvm et qemu)

  1. Création du fichier de configuration
  2. Pour pouvoir utiliser cette API, vous devez lancer votre machine virtuelle via l'API. Pour cela, on utilise la commande virsh. Pour chaque machine virtuelle, vous devrez créer un fichier XML de configuration détaillant les caractéristiques de votre machine virtuelle : type d'architecture processeur, nombre de processeur, quantité mémoire maximale, nom du fichier contenant l'image de votre machine virtuelle, ... . Pour illustrer, nous allons utiliser l'image ubuntu-9.04_x86.img et nous utiliserons le fichier de configuration suivant :

    <domain type='kvm'>
    <name>ubuntu</name>
    <memory>512000</memory>
    <currentMemory>256000</currentMemory>
    <vcpu>1</vcpu>
    <os>
    <type arch='i686' machine='pc'>hvm</type>
    </os>
    <features>
    <acpi default='on' toggle='yes'/>
    <apic default='on' toggle='no'/>
    </features>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <video type='vga' nvram='8192' heads='1'>
    <acceleration accel3d='yes'/>
    </video>
    <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
    <source file='/usr/local/qemu-image/ubuntu-9.04_x86.img'/>
    <target dev='hda'/>
    </disk>
    <interface type='user'>
    </interface>
    <input type='tablet' bus='usb'/>
    <graphics type='vnc' port='5901' keymap='fr'/>
    </devices>
    </domain>

    Ce fichier aura pour nom ubuntu-x86.xml. Dans la configuration, vous pouvez voir que nous utiliserons vnc, sur le port 5901 pour accéder à cette machine virtuelle.

  3. Lancement de la machine virtuelle
  4. Le lancement d'une machine virtuelle se faire par virsh create ubuntu-x86.xml. Vous pouvez contrôler que votre machine est exécutée en faisant un virsh list. Cela va lister toutes les machines actuellement en fonctionnement. Il ne vous reste plus qu'à faire un vncviewer localhost:1 pour vous connecter à votre machine virtuelle.
  5. Lancement de la machine virtuelle
  6. Le lancement d'une machine virtuelle se faire par virsh create ubuntu-x86.xml. Vous pouvez contrôler que votre machine est exécutée en faisant un virsh list. Cela va lister toutes les machines actuellement en fonctionnement. Il ne vous reste plus qu'à faire un vncviewer localhost:1 pour accéder à votre machine virtuelle.
  7. Création d'un snapshot
  8. Attention, lors de la réalisation de votre snapshot, votre machine virtuelle sera arrêtée. Il vous faudra la relancer ensuite. Pour faire un snapshot, vous aurez besoin de connaitre le nom de votre machine, c'est à dire la valeur de l'élément <name> de votre fichier XML de configuration. Sinon, vous faites un virsh list. Ma machine s'appelle ubuntu donc pour faire mon snapshot, virsh save ubuntu ubuntu.dump

    Si vous refaites un virsh list, vous pourrez constater que la machine virtuelle a été détruite. Il vous faudra la relancer.

  9. Exécuter un snapshot
  10. L'objectif de faire des snapshots, c'est de pouvoir rapidement avoir une machine virtuelle opérationnelle, dans un état donné. Pour faire une restauration d'une machine virtuelle à partir d'un snapshot, tapez la commande suivante : virsh restore ubuntu.dump. Un virsh list permet de constater que la machine est bien restauré et un vncviewer localhost:1 vous permettra d'en prendre le contrôle.
  11. Arrêter une machine virtuelle
  12. L'arrêt peut se faire de plusieurs manières. La plus soft c'est virsh shutdown ubuntu. Sur une ubuntu, cela ouvre automatiquement une fenêtre dans votre machine virtuelle vous demandant ce que vous voulez faire, Eteindre, Redémmarrer, ... Si vous ne faites rien, votre machine virtuelle s'arrêtera au bout de 60 secondes. Autre solution plus violente : virsh destroy ubuntu. Cela arrête instantanément votre machine virtuelle. A utiliser si le shutdown ne donne rien.