Debian from scratch sous Xen

J’ai mis en place une machine pour me permettre de tunneliser un certain nombre de choses depuis la Colombie. La messagerie par exemple…
Cette machine est une machine virtuelle hébergée par une vraie machine qui tourne dans le placard. Le tout animé par xen.

Il existe déjà des tutoriels sur le net pour installer la machine hôte Debian avec xen et pour créer des machines virtuelles notamment avec l’outil xen-create-image.

Mais… les choses ne seraient pas assez simple sinon… je veux plutôt installer une machine virtuelle Debian 7 en utilisant le DVD d’installation et non en passant par debootstrap ou tout autre méthode similaire…

Pour commencer, je positionne mes machines virtuelles dans un disque dédié monté en /vm . Xen est configuré pour utiliser l’unique interface réseau eth0 comme pont (bridge). La machine accepte 256 périphériques de loop (ajouter loop max_loop=256 dans /etc/modules).

On a besoin de l’ISO du DVD1 de Debian Linux 7.1.0 i386 (par exemple). A télécharger et à mettre dans /vm :
# cd /vm
# wget ftp://ftp.proxad.net/mirrors/cdimage.debian.org/debian-cd/current/i386/iso-dvd/debian-7.1.0-i386-DVD-1.iso
...
# sha256sum debian-7.1.0-i386-DVD-1.iso
a90fdb1c4fc3934ecbef6748581029f2defafc6438b5125af316f3db7d37ee42

On crée le répertoire de la nouvelle machine virtuelle ainsi que ses disques :
# mkdir warhole
# cd warhole
# dd if=/dev/zero of=root.dd bs=1M count=512
# dd if=/dev/zero of=boot.dd bs=1M count=512
# dd if=/dev/zero of=swap.dd bs=1M count=512
# dd if=/dev/zero of=tmp.dd bs=1M count=256
# dd if=/dev/zero of=usr.dd bs=1M count=1024
# dd if=/dev/zero of=var.dd bs=1M count=2048
# dd if=/dev/zero of=home.dd bs=1M count=10240
# for I in *.dd ; do mkfs.ext4 -F $I ; done
# mkswap swap.dd

Xen a besoin d’un fichier de configuration pour pouvoir lancer la machine. En plus, ce fichier est différent pour la phase d’installation proprement dite de la phase d’exploitation. Créer le fichier /etc/xen/warhole.cfg contenant :
kernel      = '/vm/warhole/install_vmlinuz'
ramdisk     = '/vm/warhole/install_initrd.gz'
vcpus       = '1'
memory      = '128'
root        = '/dev/xvdc ro'
disk        = [
'file:/vm/warhole/boot.dd,sda1,w',
'file:/vm/warhole/root.dd,sda2,w',
'file:/vm/warhole/swap.dd,sda3,w',
'file:/vm/warhole/tmp.dd,sda4,w',
'file:/vm/warhole/usr.dd,sdb1,w',
'file:/vm/warhole/var.dd,sdb2,w',
'file:/vm/warhole/home.dd,sdb3,w',
'file:/vm/debian-7.1.0-i386-DVD-1.iso,xvdc,r',
]
name        = 'warhole'
dhcp        = 'dhcp'
vif         = [ 'mac=00:16:3E:11:22:33' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

Il nous manque juste un petit truc pour démarrer notre machine virtuelle : un noyal!
On va aller le chercher sur le DVD :
# mount debian-7.1.0-i386-DVD-1.iso /mnt
# cp /mnt/install.386/xen/initrd.gz install_initrd.gz
# cp /mnt/install.386/xen/vmlinuz install_vmlinuz
# umount /mnt

OK, on y est : allumage !!!
# xm create -c warhole.cfg
...

Ça démarre. C’est tout en noir et blanc, mais pas comme en photo avec des nuances de gris, non c’est noir et blanc. NO PANIC!

Capture du 2013-08-31 15:42:10

En langues disponibles, c’est anglais uniquement. Suivant. Choisir USA, ça na pas d’importance ici. Pareil pour le clavier, il sera en Français de toute façon.

La détection du réseau se passe bien en IPv4 et IPv6.

La détection du DVD se passe mal. NO PANIC!!
C’est normal. Il faut revenir au menu de l’installateur pour choisir Execute a shell. Depuis le shell, on monte le DVD au bon endroit :
# mount -t iso9660 /dev/xvdc /cdrom
# exit

Une fois de retour au menu de l’installateur, choisir Detect and mount CD-ROM. L’installation continue normalement…

Tout se passe normalement pour :

  • le nom de machine ;
  • le nom de domaine ;
  • la création des utilisateurs ;
  • le choix de la zone de temps USA (sic) ;
  • le partitionnement (en manuel) ;
  • l’installation du système de base ;

Le Software selection ne laisse pas beaucoup de choix. suivant. Et là ça coince genre Installation step failed. NO PANIC!!!

Ce n’est pas important. Dans le menu d’installation, on passe directement à Continue without boot loader.
Et voila, c’est terminé! Ne reste qu’à redémarrer…

Bon, la machine virtuelle redémarre. On perd la console sur celle-ci, et de toute façon il manque des choses. Elle coincera au démarrage.
On a besoin de l’arrêter violemment pour modifier son fichier de configuration et la redémarrer :
# xm destroy warhole

Modifier le /etc/xen/warhole.cfg comme cela :
kernel      = '/vm/warhole/vmlinuz-3.2.0-4-686-pae'
ramdisk     = '/vm/warhole/initrd.img-3.2.0-4-686-pae'
vcpus       = '1'
memory      = '128'
root        = '/dev/xvda2 ro'
disk        = [
'file:/vm/warhole/boot.dd,sda1,w',
'file:/vm/warhole/root.dd,sda2,w',
'file:/vm/warhole/swap.dd,sda3,w',
'file:/vm/warhole/tmp.dd,sda4,w',
'file:/vm/warhole/usr.dd,sdb1,w',
'file:/vm/warhole/var.dd,sdb2,w',
'file:/vm/warhole/home.dd,sdb3,w',
]
name        = 'warhole'
dhcp        = 'dhcp'
vif         = [ 'mac=00:16:3E:11:22:33' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

Le noyau doit être récupéré dans la machine virtuelle. Ici c’est la version 3.2.0-4-686-pae. A changer en fonction du votre…
# mount boot.dd /mnt
# cp /mnt/initrd.img-3.2.0-4-686-pae .
# cp /mnt/vmlinuz-3.2.0-4-686-pae .
# umount /mnt

On relance la machine virtuelle :
# xm create -c warhole.cfg
Et ça marche, la machine est prête !!!

Liens :
http://www.debian.org/
http://www.xenproject.org/