Ricochets-Développement, une passion à votre service

Web Agency, Publicité, Maintenance Système : une palette pour réussir vos projets
Le blog

Virtualisation de Raspbian sur Qemu

Bonne année 2014

Tout d’abord permettez moi de vous souhaiter une bonne et heureuse année 2014 qui sera certainement meilleure que l’année précédente … ou pas. C’est selon.

De mon côté, ça commence bien : une revisite des blogs et des ressources pour poursuivre les projets en général. Et ici, les expériences 2014 vont débuter par du rasberry pi et faire ce que me demande un client depuis quelque temps : un slideshow à moindre coût !

Ayant reçu pour Noël un raspberry pi supplémentaire, j’ai pu de nouveau expérimenter la machine et voir si elle était capable d’absorber un slideshow ou kiosque internet. Cependant avant de produire directement le produit, il convient de réfléchir un peu pour réunir toutes les ressources nécessaires.

Pré requis

L’expérience semble un peu geek mais il faut la maîtriser pour optimiser le rendu et les sensations utilisateurs. Pour cela je vais virtualiser le système, le transformer pour correspondre à mes besoins et en faire une image à industrialiser. Les installations seront plus facile à déployer.

Avant de se lancer dans la virtualisation il faut savoir que le raspberry possède un CPU au format ARM donc, et j’ai un peu cherché, il ne semble pas possible de lancer un VirtualBox dans ce contexte.

Après une recherche je me suis dirigé vers Qemu qui propose des virtualisations dans différentes architectures systèmes. Une autre solution aurait pu être préconisée mais ce n’est pas le coeur de notre problème et la littérature technique donne de bons points au logiciel de virtualisation.

Le programme étant choisi, il faut une image d’un système adaptable et optimisé pour le raspberry. Sans hésiter, je me suis tourné naturellement vers la distribution de base Raspbian. Pour le téléchargement préférez le téléchargement torrent car il permet de mieux gérer la bande passante générale sur les serveurs de distribution.

Téléchargement Torrent

Téléchargement Torrent

Utilisation de QEMU

Installation

Vous devez installer le programme Qemu sur votre système. Si vous êtes sur un système GNU/Linux, je vous conseille de récupérer le logiciel via les dépôts de votre distribution mais afin d’obtenir les dernières versions disponibles ou une version spécifique, on peut télécharger les sources sur le site officiel.

ArchLinux

$> sudo pacman -S sdl qemu

Ubuntu / Debian-like

$> sudo apt-get install qemu-system

Compiler soit même Qemu

$> mkdir qemu
$> cd qemu
$> wget -O qemu.tar.bz2 http://wiki.qemu.org/download/qemu-1.7.0.tar.bz2
$> tar jxvf qemu.tar.bz2
$> cd qemu*
$> ./configure -target-list=arm-softmmu,arm-linux-user
$> make && make install

Vérifiez que vous avez bien le support ARM :

$> qemu-system-arm --version
QEMU emulator version 1.5.0 (Debian 1.5.0+dfsg-3ubuntu5.1), 
Copyright (c) 2003-2008 Fabrice Bellard

Si vous êtes sur un environnement Windows, je vous conseille de vous documenter ici : https://www.modmypi.com/blog/raspberry-pi-emuler-raspbian-sous-windows-avec-qemu

Obtenir les images

L’image ARM de Raspbian n’est pas suffisante pour l’environnement ARM de Qemu. En effet pour démarrer la machine virtuelle dans cette architecture, il faut une image noyau. Cette dernière est généralement disponible dans le fichier .IMG de la distribution choisie. Cela n’est pas le cas pour Rasbian.

Pour palier à ce problème, il faut télécharger l’image noyau ici : kernel-qemu.

Démarrage de la machine virtuelle

Manipulation spéciale Raspbian

Tout irait bien dans le meilleur des mondes s’il n’existait pas cette fameuse loi de de murphy où tout ce qui peut mal tourner, va mal tourner !

Raspbian QemuEt effectivement lors du démarrage de qemu avec l’image de raspbian, le système tourne en boucle au moment du respawn du tty. Il se peut que cela vienne de l’image en elle même lorsqu’elle lance le système de configuration rasp-config à la première exécution. Cette erreur doit être spécifique à l’environnement virtualisé car je n’ai pas expérimenté le phénomène sur le raspberry pi.

Pour réparer il faut aller modifier l’image IMG comme suit. Attention, l’image possède 2 partitions : boot et système de fichier. La réparation doit s’effectuer dans la deuxième partition de l’image : il faut commenter la première ligne dans le fichier /etc/ld.so.preload.

Déterminer l’endroit de la partition système

Sachant que l’image possède 2 partitions, il faut d’abord chercher le début du système de fichier. Pour cela je vais utiliser les outils de partionnement et calculer les secteurs.

$> mkdir mnt
$> fdisk -lu 2013-12-20-wheezy-raspbian.img 
Disque 2013-12-20-wheezy-raspbian.img : 2962 Mo, 2962227200 octets
255 têtes, 63 secteurs/piste, 360 cylindres, total 5785600 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Identifiant de disque : 0x000c4661

                 Périphérique Amorçage  Début         Fin      Blocs    Id. Système
2013-12-20-wheezy-raspbian.img1            8192      122879       57344    c  W95 FAT32 (LBA)
2013-12-20-wheezy-raspbian.img2          122880     5785599     2831360   83  Linux

$> sudo mount -o loop,offset=$((512*122880)) 2013-12-20-wheezy-raspbian.img  mnt
$> sudo vi mnt/etc/ld.so.preload
$> sudo umount mnt

Vous remarquerez deux choses pour accéder correctement à la deuxième partition : la taille du secteur 512 et le début du secteur de la partition visée 122880. Dans la commande de montage, on procède au calcul  512*122880 !

Enfin dès que le système est monté, il suffit d’éditer le fichier de configuration en question.

Démarrer et réparer

J’ai donc obtenu une l’image modifiée prête à l’emploi. Le lancement de la virtualisation peut se faire.

Démarrage de Qemu :

$> qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 \
    -M versatilepb -no-reboot -serial stdio \
    -append "root=/dev/sda2 panic=1" \
    -hda 2013-12-20-wheezy-raspbian.img 
    -redir tcp:5022::22

Information importante pour gérer ensuite la plateforme : l’option -redir tcp:5022:22. En effet, il s’agit d’une simple redirection de port NAT pour accéder depuis la machine hôte vers la console SSH de Raspbian. La commande suivante sera à saisir depuis un terminal sachant que le 0 est l’adresse générique 0.0.0.0.

$> ssh -p5022 pi@0

Cependant lors du premier démarrage de la machine virtuelle, le système tente une réparation sans succès de la deuxième partition. Après l’échec Qemu donne un root shell pour effectuer manuellement l’analyse et la réparation de la partition défectueuse :

$> fsck /dev/sda2

Le problème vient du fait qu’on a modifié l’image sans la regénérer depuis les sources. Ainsi, il y a des inodes dans le futur et le programme de réparation a besoin de notre aide pour décider comment changer le système.

On relance la machine virtuelle et le prompt s’affiche. C’est terminé !

Conclusion

Raspbian DesktopLa machine virtuelle raspberry pi sur Qemu est prête et cela me permettra d’effectuer des tests sur différents projets. Il ne restera qu’à configurer la distribution pour notamment overclocker la machine et faire en sorte de démarrer en mode graphique automatique.

Lors du démarrage du mode graphique par startx après le login, il semble impossible de bouger la souris. Dans mon contexte de création d’un kiosque internet, cela ne gênait pas car toutes les commandes se sont faites à la console mais une recherche devra être menée.

Au niveau des performances, la machine hôte n’est pas récente (Intel Core Duo 4Go de RAM) et donc le boot de la machine virtuelle sur Qemu est incroyablement long. Au final, le boot complet jusqu’au démarrage des applications a pris 6 minutes. Il va falloir faire quelque chose 🙂

Dans un prochain article, nous allons voir la configuration de raspbian pour en faire un kiosque internet avec un slideshow automatique à moindre coût.

Enjoy!

email

One comment

  1. Stefdem
    janvier 6th, 2014 9:46  /  Reply

    Superbe article ultra-technique auquel je n’ai compris que la moitié.
    Moi je bosse plus sur du Arduino en ce moment.
    Bon, ce ne sont pas les mêmes usages aussi.
    Longue vie à ce blog et bonne année 2014 !

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload the CAPTCHA.

Our clients

© 2013 - 2017 Mickael Badet – Ricochets Développement . Tous droits réservés - Mentions légales
 
Background
Color scheme