Prérequis et précision

Tout d'abord, un peu de vocabulaire

  • Dom0 : serveur sûr lequel est installé Xen et qui supporte les serveur virtuels
  • DomU : les serveurs virtuels (que j'appellerais aussi desfois vservers)

Sur le Dom0, on suppose qu'une Ubuntu Hardy Heron est déjà installée et à jour. Je ne détaillerais que l'installation d'un DomU, aussi sous Ubuntu Hardy Heron.
Nous utiliserons une configuration en mode route avec une IP failover fournie par OVH.

Grub

Sur les distrib d'OVH, c'est tjs LILO qui est installé par défaut. Or il est vraiment pas pratique de booter sur le noyau Xen avec lilo. Hormis si vous voulez vraiment bidouiller, il va falloir remettre Grub. Je suppose que vous êtes déjà connecté en SSH sur votre Dom0, on peut donc commencer

sudo apt-get install grub mdadm initramfs-tools

Ensuite on cherche le nom du disk dur

sudo fdisk -l

Disque /dev/sda: 250.0 Go, 250059350016 octets
255 heads, 63 sectors/track, 30401 cylinders
Units = cylindres of 16065 * 512 = 8225280 bytes
Identifiant disque: 0x0cf1421a

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sda1   *           1         392     3148708+  83  Linux
/dev/sda2             393       30336   240525180   83  Linux
/dev/sda3           30337       30401      522112+  82  Linux swap / Solaris

C'est donc /dev/sda chez moi, si vous êtes en RAID, vous aurez sûrement un /dev/sdb aussi

On installe

sudo grub-install --recheck /dev/sda

sudo grub
>root (hd0,0)
>find /boot/grub/stage2 # si pas trouvé, essayer find grub/stage2
>       hd(0,0)
>       hd(1,0) # vous obtenez ceci si vous êtes en RAID

# on utilise le résultat du find
>setup (hd0)
>setup (hd1) # uniquement si vous êtes en RAID
>quit

Bon, grub est installé, mais surtout, il ne faut pas rebooter, car le fichier menu.lst avec les différentes entrées de grub n'est pas créé.

Pour le créer, on va pas s'embêter

sudo apt-get install ubuntu-xen-server

# il vous demandera alors
Could not find /boot/grub/menu.lst file. Would you like /boot/grub/menu.lst generated for you? (y/N)
# Répondez alors y pour créer le menu.lst

Y a plus qu'à reboot

uname -r

Vous devriez voir votre noyau Xen.
Voilà un morceau très pénible de terminé. Ça peut vite devenir sacrément énervant si grub n'est pas ou mal installé et qu'il faut utiliser l'horrible système rescue d'OVH. Personnellement, avec cette méthode appliquée à la lettre, je n'ai jamais eu de soucis, mais j'ai vraiment galéré pour trouver l'install correcte.

Xen

Commençons par une modification préconisée par Xen

Dans /etc/modules,

[...]
loop max_loop=64

Ensuite créez le répertoire qui va contenir les images des disques durs de nos DomU
Vous pouvez bien sûr le mettre où vous voulez

sudo mkdir /home/xen

Pour le réseau, nous utiliserons le mode "route". En effet, OVH ne supporte pas le mode bridge (par défaut dans Xen) et le NAT ne permet pas d'avoir un accès SSH indépendant. Pour cela, il faut modifier
sudo vim /etc/xen/xend-config.sxp
en commentant les entrées correspondant au bridge et en décommentant les entrées route suivante :

(network-script 'network-route netdev=eth0')
(vif-script     vif-route)

Il faut aussi y ajouter le netdev=eth0 tel que ci-dessus.
On redémarre ensuite xend

sudo /etc/init.d/xend restart

1er Dom U

Personnellement, je préfère mettre toutes les options directement dans la ligne de commande que dans la config de Xen, ça permet d'être sûr du DomU qu'on crée sans avoir à chaque fois à regarder comment on avait configurer.

IP failover

Dans votre interface OVH de votre dédié, vous avez dans la rubrique service un lien qui s'appelle IP failover
Suivant le serveur que vous avez, cette option sera peut-être payante.
Créez donc une IP et notez la.

Création du domU

sudo xen-create-image --debootstrap --dir=/home/xen --size=10Gb --memory=512Mb --fs=ext3 --dist=hardy --hostname=xen1.exemple.com --ip=87.98.123.123 --netmask=255.255.255.0 --swap=1024Mb --arch=i386 --kernel=/boot/vmlinuz-2.6.24-22-xen --mirror=http://archive.ubuntu.com/ubuntu/ --passwd

Il faut bien sûr adapter

  • --ip correspond à l'IP failover créée ci-dessus (j'ai mis une IP (fictive) pour la forme, mais dans la suite, je l'appelerais IP_DOMU)
  • --dir correspond à notre répertoire ou sont stockées les images, à adapter si vous avez changé
  • --hostname correspond au nom de notre domU, je vous conseille un nom pleinement qualifié (sous la forme host.domain.ext et pas seulement host). Par exemple, pour un mail, vous pouvez simplement mettre mail.votre-domaine.com
  • --arch peut-être amd64 ou i386
  • --kernel est à adapté en fonction de votre noyau (uname -r pour savoir la version installée)

Il vous demandera alors un mot de passe qui sera le futur pass root, donc lâchez vous.

Une fois votre domU créé, il va falloir éditer son fichier de config. Si le hostname était xen1.exemple.com, alors éditez
sudo vim /etc/xen/xen1.exemple.com.cfg

#remplacer file par tap:aio dans
disk        = [
                  'file:/home/xen/domains/xen1.exemple.com/swap.img,xvda1,w',
                  'file:/home/xen/domains/xen1.exemple.com/disk.img,xvda2,w',
              ]

# Vous aurez donc
disk        = [
                  'tap:aio:/home/xen/domains/xen1.exemple.com/swap.img,xvda1,w',
                  'tap:aio:/home/xen/domains/xen1.exemple.com/disk.img,xvda2,w',
              ]

Lancement du domU

# à adapter bien sûr
sudo xm create /etc/xen/xen1.exemple.com.cfg

# une fois lancée, on peut vérifier avec
sudo xm list

On entre alors dans notre domU par

sudo xm console xen1.exemple.com

Une fois loggué dans votre domU, nous allons brancher Internet, c'est mieux pour un serveur. Editez sudo vim /etc/network/interfaces

# et faites ressembler à ça ([source|http://forum.ovh.com/showthread.php?t=41020|fr])
auto eth0
iface eth0 inet static
 address IP_DOMU
 netmask 255.255.255.0
 post-up /sbin/ip route add default dev eth0

Avec l'IP qui correspond à votre IP failover

Si jamais vos DomU sont lents, vous pourrez décommenter cette ligne dans le fichier interfaces. Ça supprime le checksum TCP, qui ralentit le réseau.

post-up  ethtool -K eth0 tx off

#
# The commented out line above will disable TCP checksumming which
# might resolve problems for some users.  It is disabled by default
#

Éditez ensuite le fichier /etc/resolv.conf
Nous devons y mettre l'adresse de serveur DNS, en effet, l'install de base n'est pas capable de résoudre de nom. J'utilise les serveurs d'OpenDNS
208.67.222.222 et 208.67.220.220
à l'heure ou j'écris

Votre /etc/resolv.conf doit ressembler à ceci

nameserver 127.0.0.1
nameserver 208.67.222.222
nameserver 208.67.220.220
search ovh.net

Redémarrez votre vserver (sudo reboot) et retournez dans la console (sudo xm console xen1.exemple.com) dès que vous en sortez. Relogguez vous en root
On commence par mettre en français

sudo apt-get update
sudo apt-get install language-pack-fr

On édite (ou crée) sudo vim /etc/default/locale

LANG="fr_FR.UTF-8"

On reboot pour avoir en Français
Puis le traditionnel :

sudo apt-get update
sudo apt-get upgrade

A ce stade, vous pouvez vous connecter directement en SSH au Vserver en utilisant l'IP failover

Un peu plus loin

L'install d'ubuntu par ce biais est vraiment très légère. Vous pouvez donc commencer par installer le minimum

sudo apt-get install ubuntu-standard