samedi 16 janvier 2016

Virtualisation part 2: Préparer les sources de linux et Xen

  Objectifs

Linux est installé, nous préparons les sources à compiler et l'environnement.

  Options qemu

Rapidement parler des options qemu que j'utilise:

 -enable-kvm : comme mon PC est un x86_64 et que je n'émule pas sous qemu une autre architecture, j'utilise kvm pour la virtualisation matérielle,
  -cpu host : j'indique ici à qemu d'utiliser directement le type de cpu de mon PC,
 -smp 4 : je permets à qemu d'utiliser 4 coeurs,
 -m 2048 : je lui donne 2Go de mémoire,
 -hda xxx : le disque 1 sera xxx
 -hdb yyy : le disque 2 sera yyy


  Backing file

Maintenant que l'installation est faite de la Debian 7.8, je vais veiller à ne pas l'abîmer et pour cela rien de plus facile que d'utiliser un snapshot disque.

L'idée est de créer un nouveau disque qui est l'image du 1er mais qui ne contiendra que les modifications du travail qui va suivre.
Ainsi, si pb, le 1er disque est intact et il suffit de refaire une image de travail à partir de lui pour reprendre proprement.

Pour créer le backing, sur mon PC hôte:
$ qemu-img create -f qcow2 -b xendeb.qcow  xendeb2.qcow

xendeb2.qcow devient notre second disque sur lequel nous allons poursuivre les mises à jour.

 DiskB

Autre chose, je crée, sur mon PC hôte, un disqueB qui va me permettre de faciliter les transferts entre mon PC et linux sous qemu.
Je pourrai monter ce disque simplement dans un répertoire local sur mon PC et sous qemu.

Ok, je pouvais faire cela avec le disque qcow, mais je trouve pénible les montages en nbd même si c'est génial et bien pratique dans d'autres circonstances. Et oui aussi, je peux faire cela par réseau lorsque celui-ci sera configuré. A voir suivant mon humeur... :-)

Création du disque B:
$ truncate diskB.raw --size 32G

Je le formate en ext2:
$ sudo mkfs.ext2 diskB.raw

Et je le monte dans un répertoire mnt local (que je crée si nécessaire):
$ mkdir mnt
$ sudo mount diskB.raw mnt

Par la suite j’appellerai Bmnt le répertoire où je monte diskB.

Attention, il me faudra monter/démonter régulièrement ce disque afin de l'utiliser une fois dans mon environnement PC (hôte), une fois sous qemu.

 

  Script lancement qemu

Comme je n'ai pas envie de multiplier les commandes pour démarrer mon environnement qemu, j'écris un script shell go.sh:
#!/bin/bash
# I would like to test XEN Ballooning
#
#
DISKNAME=xendeb.qcow
DISKB=diskB.raw
WORKDISKNAME=xendeb2.qcow
RMWORK="TRUE"

# $1 $... - the message string
die()
{
  retcode=-1
  printf >&2 "%s\n" "$@"
  exit $retcode
}

while [ "$1" != "" ]; do
  if [ "$1" == "-no-rm" ]; then
    RMWORK="FALSE"
  else
    die "Unknown option $1. Only valid is -no-rm";
  fi
  shift
done

# working disk deletion
if [ "$WORKDISKNAME" == "" ]; then
  echo "No Work Disk used !!!";
else
  echo "Work Disk used !!!";
  if [ "$RMWORK" == "TRUE" -a -f $WORKDISKNAME ]; then
      echo "it is recreated"
      rm $WORKDISKNAME || die "$WORKDISKNAME deletion failed"
  else
      echo "it is not recreated"
  fi
fi

# Go go go
if [ "$WORKDISKNAME" != "" ]; then
  if [ ! -f $WORKDISKNAME ]; then
    qemu-img create -f qcow2 -b $DISKNAME $WORKDISKNAME
  fi
else
  WORKDISKNAME=$DISKNAME
fi
qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -m 2048 -hda $WORKDISKNAME -hdb $DISKB
En deux mots, ce script va démarrer qemu avec un disque A (xendeb2.qcow) qui sera le disque de travail et un disque B (diskB.raw).

xendeb2.qcow est effacé à chaque démarrage (si l'option -no-rm n'est pas utilisée) et recréé comme backing file de xendeb.qcow. Nous repartons donc à chaque démarrage sur une image propre.

 

  Linux Vanilla

Je vais utiliser le diskB pour y placer les sources linux et xen que je vais utiliser pour les générations.

Tout d'abord, quelle est la version du noyau que j'ai installé via le CD Debian ?
Pour cela je regarde dans le fichier /boot/config-3.2.0-4-amd64 sous qemu. Donc je lance la machine virtuelle qemu en utilisant mon script:

$ go.sh

Une fois qemu démarré et le linux booté, je me loggue comme root et un simple head me permet d'afficher la 1ère ligne du fichier où se trouve la version exacte du noyau:
$ head /boot/config-3.2.0-4-amd64

Je lis sur la troisième ligne qu'il s'agit d'un 3.2.73. Je vais donc le chercher dans les archives du noyau:
https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.73.tar.xz

Et j'arrête ma machine qemu:
$ halt

Sur mon PC hôte, je télécharge donc les sources d'un kernel linux. Et je le décompresse dans Bmnt:
$ cd Bmnt
$ sudo tar xJf ~/Téléchargements/linux-3.2.73.tar.xz

   Source Xen

Pendant que j'y suis, je vais aussi y placer les sources de Xen 4.1.4:
http://www.xenproject.org/downloads/xen-archives/supported-xen-41-series/xen-414.html

Une fois téléchargées sur le site précédent,  je les décompresse dans Bmnt:
$sudo tar xzf ~/Téléchargements/xen-4.1.4.tar.gz


Voilà pour cette partie deux. Pour la suite nous allons passer sous qemu pour compiler tout ce petit monde...

Aucun commentaire:

Enregistrer un commentaire