Virtualisation uml rootfs

From UnixWiki

Jump to: navigation, search


Pour utiliser votre noyau, vous aurez besoin d'un système sur lequel démarrer. Il faudra donc installer un système, le support étant un fichier contenant l'image d'une partition. Nous allons donc préparer un fichier, le formater, y extraire un système, et l'adapter pour que le noyau UML fonctionne correctement.

Contents

[edit] Préparation du fichier

Nous devrons choisir la taille de la partition virtuelle. Dans cet exemple, nous prendrons 1500 Mo:

dd if=/dev/zero of=umlrootfs count=1500 bs=1M

Nous allons formater cette partition avec mkreiserfs, car ce système a l'avantage d'être rapide, économique en place, mais vous pouvez naturellement choisir d'utiliser un autre système de fichiers. Dans ce cas, vous devrez penser à adapter le fichier /etc/fstab par la suite:

mkreiserfs -f umlrootfs

Pour accéder au système de fichiers, nous allons le monter:

mkdir -p /mnt/umlfs
mount -o loop umlrootfs /mnt/umlfs

[edit] Extraction du système

Nous allons copier tous les fichiers qui composent un système linux. Dans cet exemple, nous avons choisi d'utiliser un système minimal qui sert de base à l'installation d'un système Gentoo. Vous pouvez le télécharger depuis un Miroir Gentoo. Il existe des versions de ce système pour différents processeurs. a l'heure ou cet article est écrit, la dernière version pour les processeurs de type x86 est distribuée dans le fichier releases/x86/2005.1-r1/stages/x86/stage3-x86-2005.1-r1.tar.bz2.

Il va donc falloir extraire ce système:

tar xfjp stage3-x86-2005.1-r1.tar.bz2 -C /mnt/umlfs

Vérifiez que le système se trouve bien à la racine du dossier /mnt/umlfs, sinon déplacez les fichiers de la façon suivante:

mv /mnt/umlfs/mnt/gentoo/* /mnt/umlfs

Si le noyau UML que vous avez compilé s'accompagne de modules, vous devrez à votre système, en les copiant dans le dossier /lib/modules:

cp -a /lib/modules/2.6.15.1-fduml03 /mnt/umlfs/lib/modules/

Vous pouvez utiliser la commande chroot pour travailler sur ce système de façon naturelle, comme si vous aviez démarré dessus:

chroot /mnt/umlfs /bin/bash

Rappelons que chroot, qui agit uniquement sur le shell dans lequel vous vous trouvez demande au noyau de considérer que la racine du système est /mnt/umlfs. Ainsi, quand vous demandez le fichier /bin/ls, le noyau ira en réalité lire /mnt/umlfs/bin/bash. C'est un moyen simple et très puissant d'unix pour travailler sur un système que l'on veut mettre au point, mais qui sert aussi à sécuriser des programmes en réduisant le périmètre d'action d'un programme.

Une fois que vous êtes entré dans l'environnement chrooté, n'oubliez pas de lancer la commande passwd pour définir le mot de passe du compte root du système invité.

[edit] Adaptation du système

Le système que nous avons extrait a été préparé pour fonctionner normalement, et pose quelques problèmes si on l'utilise directement avec un noyau UML. Voici quelques modifications que vous devrez effectuer pour qu'il fonctionne correctement. Attention, toutes ces opérations sont à effectuer sur le système accessible via /mnt/umlfs, et non pas sur votre système principal.

Commencez par éditer le fichier /etc/fstab, avec des commandes telles que "nano /etc/fstab" ou "vim /etc/fstab". La partition principale du système est accessible par le périphérique /dev/ubda". Modifiez la ligne correspondant à la racine du système, ce qui donnera par exemple ceci:

/dev/ubda               /               reiserfs        noatime                0 1
proc                    /proc           proc            defaults               0 0
shm                     /dev/shm        tmpfs           nodev,nosuid,noexec    0 0

Dans le cas ou vous auriez besoin d'autres partitions, vous pouvez y accéder par les périphériques /dev/ubdb, /dev/ubdc, etc.... Voici par exemple la ligne à ajouter pour avoir une partition de swap:

/dev/ubdb               swap            swap            defaults               0 0

Ensuite, éditez le fichier /etc/inittab pour supprimer les accès inutiles à certains terminaux. Dans le groupe de lignes qui commencent par c1, c2, ... c6, ne laissez que la première entrée (c1), et ajoutez un dièze devant les autres lignes pour les désactiver:

c1:12345:respawn:/sbin/agetty 38400 tty1 linux
#c2:2345:respawn:/sbin/agetty 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux

Supprimez certains services qui peuvent produire des plantages au démarrage, et qui sont inutiles dans le cas d'un système UML. C'est la cas des services consolefont et keymaps avec la gentoo:

rc-update del consolefont default
rc-update del keymaps default

Enfin, désactivez l'accès à la bibliothèque tls qui pose problème. Cela n'empêchera naturellement pas le système de fonctionner normalement:

mv /lib/tls /lib/tls.disabled

[edit] Optimisations du système

Un script d'initialisation ralentit considérablement le démarrage du système. Pour éviter ce problème, éditez le fichier /etc/init.d/modules, et faites le remplacement suivant:

Remplacez ceci:

ebegin "Calculating module dependencies"
    /sbin/modules-update &>/dev/null
eend $? "Failed to calculate dependencies"

par cela:

if [ /etc/modules.d -nt /etc/modules.conf ]
    then
        ebegin "Calculating module dependencies"
        /sbin/modules-update &>/dev/null
        eend $? "Failed to calculate dependencies"
    else
        einfo "Module dependencies are up-to-date"
fi

Suite

Personal tools
Reference cards

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'partimag_ur-mw'@'10.0.64.75' (using password: YES) in /homez.68/partimag/www.unix-resources.net/stats/sps.connect.inc.php on line 30
Connexion a la base impossible