wiki:InsiaAdminSysTp3_12

Sommaire

TP - Virtualisation (Lguest, UML)

Ressources:

1. User-mode Linux

Comme son nom l'indique, cette paravirtualisation s'effectue en mode utilisateur, et il n'est en particulier pas nécessaire d'être root. Une version préparée pour Debian est installée sur /morphale/debian/uml.

Etape 1: utilisez un fichier image QEMU existant, et définissez-le comme le périphérique (para)virtuel ubd0 dans UML, n'oubliez pas de préciser où est la partitoon racine. Indice: l'invité ne connaît pas la dénomination ubd, utilisez le nommage root=majeur:mineur où le majeur est 98, le mineur 0 pour le disque virtuel, 1 pour sa première partition, etc.

Etape 2: le démarrage d'un xterm par console virtuelle n'est pas des plus élégants. Reliez les consoles virtuelles de votre système invité à des pseudo-terminaux (pts) dynamiquement alloués par UML. Il s'agit de terminaux virtuels que vous pouvez "consulter" avec screen /dev/pts/<numero> (ou avec cu, ou minicom).

Etape 3: Observations:

  • Combien de temps faut-il pour aller jusqu'au prompt du login ? Comparez avec QEMU.
  • Que voyez-vous au niveau des processus depuis l'hôte (remarquez leur "état")? Voyez-vous une relation avec les processus de l'invité ?
  • Quel est la spécification du processeur de l'invité ?
  • Commentez les erreurs que vous voyez au démarrage, comme:
    • FATAL: Could not load /lib/modules/2.6.21/modules.dep: No such file or directory
    • line_ioctl: tty0: ioctl KDGKBTYPE called
    • hwclock is unable to get I/O port access: the iopl(3) call failed

2. Lguest

Un noyau 2.6.21 patché avec le support Lguest a été préparé et packagé dans /morphale/debian/lguest/. Installez ce noyau dans une image standard Debian Etch sous QEMU (rappel: /morphale/debian/debian-etch-basic.img.tar.gz}, et redémarrez dessus. Récupérez également le programme lguest lui-même.

Note pratique: pour les transferts, démarrez votre QEMU avec une redirection TCP (équivalent au tunnel inverse SSH, mais en permanent) et utilisez SCP, exemple:

$ qemu -hda test_lguest.img -redir tcp:2022::22 &
[QEMU démarre... installez SSH si nécessaire...]
$ ssh -p2022 root@localhost
[...]
$ scp -P2022 fichier_a_transferer root@localhost:~

Le premier système que vous démarrez sera donc à la fois l'hôte et l'hyperviseur. Par défaut il s'agit d'un hôte quelconque, on charge explicitement le superviseur et on lance un invité de cette manière (exemple):

# modprobe lg
# ./lguest  --block=/dev/hdb1 --initrd=/boot/initrd.img-2.6.21 64m /boot/vmlinuz-2.6.21 root=/dev/lgba

Nous lançons donc un système virtuel faisant tourner le même noyau que notre hôte, et qui accède à un périphérique via le block device virtuel /dev/lgba.

Note: on peut arrêter un invité depuis la console où on l'a lancé en tapant Ctrl+C 3 fois en moins d'une seconde (!)

Question 1: Vous devriez voir un message d'erreur tel que modprobe: FATAL: Could not load /lib/modules/2.6.21/modules.dep.... Comment pouvez-vous corriger ce problème ?

Question 2: quand votre invité a fini sa séquence de démarrage, vous ne voyez pas de prompt pour vous logger. En effet, ceux-ci doivent s'afficher sur des consoles virtuelles qui ne sont pas émulées. Pouvez-vous modifier le fichier /etc/inittab de votre invité de telle sorte qu'il lance un seul getty sur la console physique (/dev/console) et non une console virtuelle (/dev/tty[0...]).

Question 3: qu'observez-vous du point de vue de l'hôte, comment voit-on l'invité ? Quels outils vous manquent-ils ?

Last modified 13 years ago Last modified on Jun 17, 2007, 11:04:21 PM