Aller au contenu principal

1.13 TP: QEMU Single user

ATTENTION : le TP ne marche pas avec les vieilles images Ubuntu les autres archi ne sont pas dans les dépots archive

Objectifs pédagogiques

Théoriques

  • Connaître les spécificités de la virtualisation KVM
  • Connaître les IHM permettant de piloter KVM

Apprendre à utiliser QEMU pour lancer un processus basé sur une autre architecture.

binfmt_misc est une fonctionnalité du noyau qui permet d'invoquer presque tous les programmes en tapant simplement son nom dans le shell.

Il reconnaît le type binaire en faisant correspondre certains octets au début du fichier avec une séquence d'octets magiques (masquant les bits spécifiés) que vous avez fournie.

binfmt_misc peut également reconnaître une extension de nom de fichier aka '.com' ou '.exe'.


Installer les packages QEMU


$ apt install binfmt-support qemu-user-static

$ grep binfmt /proc/mounts
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,nosuid,nodev,noexec,relatime)

$ dpkg -L qemu-user-static

On voit toute la liste des processeurs que QEMU pourra émuler.


Vérifiez si les entrées binfmt ont été enregistrées avec succès.


$ update-binfmts --display

Cette commande doit imprimer des entrées pour chaque émulateur d'utilisateur cible pris en charge, à l'exception du système hôte.


Réglage du système

Selon les paramètres de votre noyau, vous devrez peut-être définir l'option


$ sysctl 'vm.mmap_min_addr=0'

pour autoriser l'exécution d'un programme sous un utilisateur normal, et non root.


Exécution d'exécutables liés dynamiquement

Avec les instructions ci-dessus, vous devriez pouvoir exécuter des exécutables cibles liés statiquement. Pour pouvoir exécuter des binaires liés dynamiquement, QEMU doit avoir accès à l'interpréteur ELF cible. Le package libc6 pour l'architecture cible contient l'interpréteur ELF de la cible utilisé par QEMU.


$ sudo dpkg --add-architecture armhf
$ sudo apt update
$ sudo apt install libc6:armhf


Test de l'environnement d'émulation

Nous utiliserons le paquet "hello" ARM Debian pour tester le nouvel environnement.

Installez le paquet hello et lancez-le.


$ sudo apt install hello:armhf
$ sudo apt install file
$ file /usr/bin/hello
$ hello
# Il devrait afficher "Bonjour, le monde !".


Confirmer l'utilisation de QEMU

Nous allons utiliser l'utilitaire strace pour afficher les appels systèmes effectués par la commande.

Identifier quels appels systèmes et quelles données affichées indiquent l'usage de binfmt.


$ sudo apt install strace
$ strace hello


Avancé

Peut-on faire la même chose dans un chroot ?

Indice :


$ sudo mkdir /tmp/chroot
$ cd /tmp/chroot
$ sudo debootstrap stable .
$ sudo chroot .
# Suivre les opérations


Peut-on lancer un chroot avec une autre architecture ? Un chroot dans un chroot ?

Indices


$ debootstrap --arch=armhf stable .
...
$ file /bin/bash