Paravirtualiser une machine virtuelle Ubuntu pour XenServer

Convertir un DomU Ubuntu 11.10 de HVM vers PV sur XenServer 6.0 n’est pas trivial !

Paravirtualiser une machine virtuelle Ubuntu pour XenServer

Convertir un DomU Ubuntu 11.10 de HVM vers PV sur XenServer 6.0 n’est pas trivial !

Dans le cadre du projet ComodIT toutes les méthodes de démarrage des machines virtuelles d’OpenStack sont testées. Il ressort qu’une de ces méthodes n’est pour le moment disponible que pour des machines virtuelles hypervisées au moyen de XenServer. Une documentation explique comment installer et configurer OpenStack dans un DomU sous Ubuntu pour contrôler un Dom0 XenServer. Or, ce DomU doit être en paravirtualisation (PV) et non en virtualisation matérielle (HVM).
Cette conversion n’est pas triviale et peu documentée en particulier pour la version Oneiric (11.10) d’Ubuntu. Cet article explique comment convertir un DomU Ubuntu 11.10 de HVM vers PV sur XenServer 6.0.

1. Créer et installer la VM en mode HVM

  1. Créer une VM depuis le template "Other install media". Le nom de la VM ne doit pas contenir d’espace.
  2. attacher l’ISO d’Ubuntu 11.10 au lecteur DVD de la VM
  3. démarrer la VM
  4. à l’étape de partitionnement du disque, prendre soin de formater en Ext3 et non Ext4, car ’pygrub’, l’amorceur de XenServer en mode PV, n’est pas capable de lire Ext4. Si vous souhaitez conserver les avantages d’Ext4, alors vous devez créer une partition /boot (en Ext3) séparée de / (en Ext4)
  5. terminer l’installation et redémarrer la VM

2. Préparer la VM à la transformation

  1. se connecter via la console de XenCenter et installer un serveur ssh
    sudo apt-get install openssh-server
  2. créer une nouvelle console pour Xen et remplacer tous les ’tty1’ par des ’hvc0’
    sudo cp /etc/init/tty1.conf /etc/init/hvc0.conf
    sudo vi /etc/init/hvc0.conf
  3. identifier l’entrée par défaut dans grub2 et la recopier.
    cat /boot/grub/grub.cfg
    [...]
    menuentry 'Ubuntu, avec Linux 3.0.0-12-generic' --class ubuntu --class gnu-linux --class gnu --class os {
            recordfail
            set gfxpayload=$linux_gfx_mode
            insmod gzio
            insmod part_msdos
            insmod ext2
            set root='(hd0,msdos1)'
            search --no-floppy --fs-uuid --set=root 51a2ba97-2521-44d7-9b08-316b7059db89
            linux        /boot/vmlinuz-3.0.0-12-generic root=UUID=51a2ba97-2521-44d7-9b08-316b7059db89 ro   quiet splash vt.handoff=7
            initrd        /boot/initrd.img-3.0.0-12-generic
    }
    [...]
  4. il y a une régression depuis une ou deux versions d’Ubuntu à cause de laquelle le module xen n’est plus chargé dans l’initramfs. Il faut corriger cela avec :
    sudo echo "xen-blkfront" >> /etc/initramfs-tools/modules
    sudo update-initramfs -u
  5. éteindre la VM
  6. créer un snapshot pour pouvoir revenir à un état stable si quelque chose ne fonctionne pas dans la suite

3. Conversion grâce à makepv.sh

  1. se connecter à l’hôte XenServer et identifier le nom de la VM à convertir
    ssh root@<XenServer>
    xe vm-list
  2. télécharger le script makepv.sh destiné à convertir la VM en PV. Le script peut être téléchargé via le lien en bas du document. Il consiste à :
    • changer l’amorceur (ou bootloader) du mode HVM vers PV
    • donner les chemins vers le noyau (/boot/vmlinuz-3.0.0-12-generic),
    • donner les paramètres du noyau (root=UUID=51a2ba97-2521-44d7-9b08-316b7059db89 ro   quiet splash vt.handoff=7)
    • donner le chemin vers l’initrd (/boot/initrd.img-3.0.0-12-generic)
    • convertir le disque dur virtuel de la VM à l’aide de ce script
      chmod +x makepv.sh
      ./makepv.sh <nom de la vm> # sans espace

4. Installer les ’XenServer tools’

  1. démarrer la VM sans image attachée au lecteur DVD (pour éviter une erreur due à deux disques de démarrage détectés)
  2. attacher à partir de XenCenter xs-tools.iso au lecteur de DVD
  3. monter le volume et installer les XenServer tools
    ssh <adresse ip de la vm>
    sudo mount /dev/cdrom1 /media/cdrom
    cd /media/cdrom/Linux
    sudo dpkg -i xe-guest-utilities_6.0.0-743_amd64.deb
  4. démonter le volume et redémarrer
    sudo umount /media/cdrom
    sudo init 6
  5. se reconnecter en ssh et définir les runlevels des services installés
    ssh <adresse ip de la vm>
    sudo update-rc.d -f xe-linux-distribution remove
    sudo update-rc.d xe-linux-distribution defaults
  6. redémarrez une dernière fois et vous pouvez à présent profiter d’Ubuntu Oneiric Ocelot 11.10 en mode paravirtualisé. La console de la VM dans XenCenter est désormais disponible. En revanche, le serveur X se plaindra de ne pas trouver de pilote pour l’affichage graphique. C’est le mauvais côté du mode paravirtualisé. Si vous trouvez comment faire tourner le serveur X dans ces conditions, nous serions ravis de mettre à jour cet article.

N’hésitez pas à contacter le CETIC pour tout commentaire et/ou question.

Références