Qemu (Kqemu) - l'émulateur libre de Linux
Publi� le 31 janvier 2008
Cr�� le 16 septembre 2006

HISTORIQUE MAJ

31/01/2007 : la version 0.9.1 est sortie de plus la version précédente dispo dans les paquets bugue Ubuntu gutsy
22/10/2007 : dans les dernières versions Linux (par exemple Ubuntu gutsy), la version 0.9.0 est dans les paquets ainsi que le source de kqemu
08/05/2007 : la version 0.9.0 est sortie.
31/10/2006 : la version 0.8.2 est disponible dans les paquets debian/ubuntu edgy. Le script ci-dessous n'est plus nécessaire.
14/09/2006 : suite aux remarques de momo la désinstallation des paquets requis pour la compilation n'est plus obligatoire.
13/09/2006 : Suppression des paquets installés. Correction de l'erreur "Version mismatch between kqemu module and qemu".
09/09/2006 : Correction du script pour gérer d'autres kernel (K7, ...).
03/08/2006 : Le script a été modifié pour gérer les dernières versions : qemu 0.8.2 et kqemu 1.3.0pre9.
10/04/2006 : Le script a été modifié pour gérer les versions : qemu 0.8.0 et kqemu correspondant.

PRESENTATION

QEMU est l'équivalent de vmwareplayer, un logiciel capable d'émuler différentes machines dont les PC dans un container Linux et Windows. Ensuite, on est libre d'installer le système que l'on souhaite : Linux, Windows (surtout). Cela permet, par exemple, quand on est sous Windows, d'utiliser un deuxième ordinateur virtuel Linux dans son Windows sans avoir à repartitionner son disque dur pour installer le 2ème système d'exploitation [1]. L'écran de l'ordinateur émulé s'affiche dans une fenêtre de l'ordinateur d'accueil.

Fabrice Bellard, l'auteur de QEMU ayant à son actif des logiciels libres très connus, propose les binaires et les sources en téléchargement. Sous Ubuntu (ou autre Debian), on préfèrera utiliser un paquetage. Voici donc un script qui permet d'installer QEMU à la dernière version [2] ainsi que KQEMU l'accélérateur (virtualisateur) de QEMU pemettant d'atteindre une vitesse proche du système d'exploitation émulé en natif [3].

Le script ci-dessous génère un .deb adapté à votre configuration et qui s'installe automatiquement.

Zip - 2.7 ko
insQEMU.sh 0.9.1

Vous pouvez télécharger le .deb de QEMU 0.9.0 pour architecture i386.

On pourra le supprimer facilement par la suite :


$ sudo apt-get remove qemu

INSTALLATION

SI QEMU 0.9.1 DISPONIBLE DANS LES PAQUETS

Cette version n'est pas encore disponible dans les paquets debian. Lorsqu'elle le sera, installez qemu par apt-get.


$ sudo apt-get install qemu

Il faut ensuite installer kqemu, ce qui est assez facile.


cd /tmp
sudo apt-get install build-essential
wget http://bellard.org/qemu/kqemu-1.3.0pre11.tar.gz
tar zxf kqemu-1.3.0pre11.tar.gz
cd kqemu-1.3.0pre11
./configure
make
sudo make install

kqemu devra être chargé à chaque démarrage de l'ordinateur comme indiqué ci-dessous.

SINON (QEMU)

Cliquez sur l'icône zip ci-dessus. Décompactez dans un répertoire et lancez le script :

$ sudo sh ./insQEMU.sh

Pour charger KQEMU à chaque démarrage, il faut ajouter la ligne suivante au fichier /etc/rc.local :


modprobe kqemu
mknod /dev/kqemu c 250 0
chmod 666 /dev/kqemu

Pour profiter pleinement de l'accélération, vous pouvez lancer qemu avec l'option -kernel-kqemu [4].

Pour vous éviter de vous en souvenir, vous pouvez créer un alias et l'ajouter au fichier rc.local :


$ alias qemu='qemu -kernel-kqemu'

Si vous préférez les interfaces graphiques plutôt que la ligne de commande :

-  [ !qemu-launcher] disponible depuis peu dans la distribution Ubuntu Feisty Fawn

(PNG)


$ sudo apt-get install qemu-launcher

-  http://kqemu.sourceforge.net/ [5].

(PNG)

Si vous obtenez une erreur à l'installation des paquetages :


Sub-process /usr/bin/dpkg returned an error code

Alors commentez la ligne suivante dans le script :


#apt-get -y install gcc-3.4 g++-3.4 libsdl1.2debian libsdl1.2debian-all build-essential libsdl1.2-dev zlib1g-dev checkinstall || exit 2

UTILISATION

Pour créer une image :


$ qemu create -fmt qcow image.img 2Gb

Pour les distributions libres (linux entre autres), inutile de lancer la procédure d'installation, vous pouvez téléchargez des images directement utilisable dans le zoo des OS ou alors même les appliances pour vmwareplayer sont utilisables car qemu gère ce format (vmdk) !

Il est possible de monter l'image disque de qemu comme un disque dur sous Linux avec un périphérique "loopback".


$ sudo mkdir /mnt/qemu
$ sudo mount -o loop,offset=32256 image.img /mnt/qemu

Pour démonter :

$ sudo umount image.img

Le format d'image disque qemu "qcow" n'est pas compatible avec les périphériques loop. Vous pouvez créer une 2ème image disque au format "raw" :

$ qemu-img convert -f qcow imageqcow.img -O raw imageraw.img

RAPPEL : ne jamais utiliser qemu pendant que l'image est montée !

IMPORTANT : pour ne pas avoir de problèmes de droits d'accès aux périphériques, il vaut mieux lancer qemu en root !

http://wiki.archlinux.org/index.php/Qemu


[1] Qemu fonctionne avec une image disque qui est un fichier classique.

[2] Le script sera modifié régulièrement dès qu'une nouvelle version apparaît. Script basé sur celui de Nando

[3] De l'ordre de 1/2 au lieu de 1/10 sans accélération.

[4] Seulement sur les architectures 32 bits.

[5] Fonctionne avec [ !Kommander] donc seulement sous Linux.

Forum de l'article

# 169 Qemu (Kqemu) - l'émulateur libre de Linux 26 juin 2006, par Olivier OLEJNICZAK

la version du script (insQemu.sh) qui a marché pour moi (dapper on kernel 2.6.15-25-k7)

=====================================

# !/bin/sh # # How to write a shell script # http://vertigo.hsrl.rutgers.edu/ug/shell_help.html #

# Script configuration # ==================== BASE_DIR=/root # BASE_DIR=/usr/local # BASE_DIR=/tmp SRC_DIR=qemu-src QEMUVERSION=0.8.1 KQEMUVERSION=1.3.0pre7 PKGSOURCE=http://fabrice.bellard.free.fr/qemu/qemu-$QEMUVERSION.tar.gz

echo "Now let us remove Qemu if it is installed..." apt-get -y remove qemu || exit 15

# Script starts executing here # ============================ echo echo "InsQEMU - version 0.1 (2005-12-15)" echo "======= by Nando Florestan — http://oui.com.br/n" echo "This script downloads and installs QEMU $QEMUVERSION," echo "with the KQEMU accellerator, verions $KQEMUVERSION in Ubuntu 6.04 Dapper Drake." echo "Based on :" echo "http://www.hants.lug.org.uk/cgi-bin/wiki.pl ?LinuxHints/QemuCompilation" echo echo "If this script succeeds, you will see a message at the end saying :" echo "\"InsQEMU SUCCEEDED !\"" echo "...else you have some problem." echo echo "If you have any difficulties, you can edit the script yourself." echo "It is heavily commented so as to help." echo "Please send any bug corrections to nandoflorestan@gmail.com" echo

if [ $USER != "root" -o $UID != 0 ] ; then echo "This script must be run as root. Type this to become root :" echo "sudo -s" echo "...then run this script again." echo exit 1 fi

echo "First of all, we install the dependencies." # Ubuntu Dapper comes with GCC 4.0 by default, but # Qemu 0.72 will not compile with GCC 4.0 so we need to install GCC 3.4 # The SDL packages should provide sound support # zlib is a compression library # checkinstall is for generating .deb packages apt-get install gcc-4.0 g++-4.0 gcc-3.4 g++-3.4 libsdl1.2debian libsdl1.2debian-all build-essential libsdl1.2-dev zlib1g-dev checkinstall || exit 2

echo echo "Finding out whether your kernel is i386 or i686 or k7." # Run "uname -m" and store the result in the variable KERNEL KERNEL=`uname -m` || exit 10 KERNELK7=`uname -r | grep "k7$"`

# Depending on KERNEL, get a package if [ $KERNELK7 ] ; then echo "Downloading Linux headers for k7..." apt-get install linux-headers-k7 || exit 11 elif [ $KERNEL == "i686" ] ; then echo "Downloading Linux headers for i686..." apt-get install linux-headers-686 || exit 11 elif [ $KERNEL == "i386" ] ; then echo "Downloading Linux headers for i386..." apt-get install linux-headers-386 || exit 12 fi echo

cd $BASE_DIR || exit 3 mkdir $SRC_DIR || echo cd $SRC_DIR || exit 4 echo

# If the directory does NOT exist yet if [ ! -d qemu-$QEMUVERSION/kqemu ] ; then echo "Downloading QEMU..." wget -nv $PKGSOURCE || exit 5 echo echo "Downloading KQEMU..." wget -nv http://fabrice.bellard.free.fr/qemu/kqemu-$KQEMUVERSION.tar.gz || exit 6 echo echo "Uncompressing QEMU..." tar zxvf qemu-$QEMUVERSION.tar.gz || exit 7 echo echo "Entering source dir." cd qemu-$QEMUVERSION || exit 8 echo echo "Uncompressing KQEMU..." tar zxvf ../kqemu-$KQEMUVERSION.tar.gz || exit 9 else echo "Directory already exists : $BASE_DIR/qemu-src/qemu-$QEMUVERSION" echo "I will use its files instead of downloading them from the internet." cd qemu-$QEMUVERSION fi

echo "BEGINNING CONFIGURE !" # sh configure || exit 13 export CPP=g++-3.4 export CC=gcc-3.4 sh ./configure —prefix=/usr —cc=gcc-3.4 —host-cc=gcc-3.4 —kernel-path=/usr/src/linux-headers-$(uname -r)/ || exit 13 echo echo

echo "BUILDING QEMU !" # In Ubuntu Breezy, if you just `make`, it will use GCC 4.0 # even though we configured for GCC 3.4. So we need this workaround : # Change the symlink, compile, then change the symlink back mv /usr/bin/gcc /usr/bin/gcc.bak ln -sf /usr/bin/gcc-3.4 /usr/bin/gcc make EXITCODE=$ ? echo

if [ $EXITCODE != 0 ] ; then echo "PROBLEM IN QEMU MAKE : $EXITCODE" exit 14 fi

mv /usr/bin/gcc.bak /usr/bin/gcc

export CPP=g++-4.0 export CC=gcc-4.0 cd kqemu-$KQEMUVERSION sh ./configure —prefix=/usr —cc=gcc-4.0 —host-cc=gcc-4.0 —kernel-path=/usr/src/linux-headers-$(uname -r)/ || exit 13 echo echo echo "BUILDING KQEMU !"

mv /usr/bin/gcc /usr/bin/gcc.bak ln -sf /usr/bin/gcc-4.0 /usr/bin/gcc make cd .. EXITCODE=$ ? echo

if [ $EXITCODE != 0 ] ; then echo "PROBLEM IN KQEMU MAKE : $EXITCODE" exit 14 fi

echo

# Now make the PACKAGE. Using checkinstall is a great way to # install applications because it makes '.deb' packages. # This means Qemu can later be removed via apt-get or Synaptic. echo "QEMU is a generic processor emulator. This package was compiled by InstQEMU.sh and also contains the KQEMU accellerator. http://fabrice.bellard.free.fr/qemu" > description-pak || exit 16 # The reason for overwriting install.sh so it is empty is # to ensure the package made with checkinstall can install cleanly cat /dev/null > kqemu-$KQEMUVERSION/install.sh || exit 17 # Create the .deb package checkinstall -y —pkgname=qemu —pkgversion=$QEMUVERSION —pkgrelease=1 —pkglicense=Restricted —pkggroup="Miscellaneous - Text Based" —pkgsource=$PKGSOURCE —exclude=kqemu/install.sh || exit 18

echo "QEMU is now installed." echo echo "Loading the KQEMU kernel module..." mkdir -p /lib/modules/$(uname -r)/misc && cp kqemu-$KQEMUVERSION/kqemu.ko /lib/modules/$(uname -r)/misc && depmod -a modprobe kqemu || exit 19 # Load the kernel module mknod /dev/kqemu c 250 0 || exit 20 # Create the KQEMU device chmod 666 /dev/kqemu || exit 21 # Make it accessible to all users echo

echo "When you reboot, the KQEMU accellerator will not load anymore." echo "But you can add a few lines to a boot script to fix this." echo "For more details, please refer to :" echo "http://fabrice.bellard.free.fr/qemu/kqemu-doc.html" echo echo "InsQEMU SUCCEEDED !" exit 0

=====================================

Mon script pour lancer l'install de win98 (win98.sh)

===================================== sudo umount /dev/shm sudo mount -t tmpfs -o size=144m none /dev/shm sudo modprobe kqemu sudo mknod /dev/kqemu c 250 0 sudo chmod 666 /dev/kqemu sudo qemu -boot d -hda win98.img -cdrom WINDOWS_98.iso

=====================================

# 184 Qemu (Kqemu) - l'émulateur libre de Linux 3 août 2006, par Frédéric
Quelles modifications as-tu apporté au script ?
# 190 Qemu (Kqemu) - l'émulateur libre de Linux 12 août 2006, par nerve
petit defaut chez moi, ton script n'a pas détecté le bon kernel (686) j'ai du donc installer les header à la main pour la compilation de kqemu
# 198 Qemu (Kqemu) - l'émulateur libre de Linux 2 septembre 2006, par paco

Un ptit soucy au lancement du script : "./kqemu : line 42 : erreur de syntaxe : fin de fichier inattendue".

Ce script m'intéresse d'autant plus que mon noyau est un 2.6.15-26-k7, idem sous dapper. ;)

Merci d'avance

# 199 Qemu (Kqemu) - l'émulateur libre de Linux 2 septembre 2006, par Frédéric

Est-ce que tu es sûr d'avoir téléchargé et décompacté le fichier en entier ?

La ligne 42 n'est même pas le début du programme.

# 200 Qemu (Kqemu) - l'émulateur libre de Linux 2 septembre 2006, par paco

La ligne 42 est la ligne juste après la dernière ligne du script. J'ai fais un copié/collé de ton script de Olivier OLEJNICZAK (dans cette colonne du site).

Sinon, j'ai dl, décompacté & compilé insQEMU l'original, en modifiant les variables (version actuelle de qemu & kqemu). Par contre, meme en mettant $(uname -r) à la place de i686, il me compil' quand meme avec le flag i386 (petite erreur ds ma modification ?!).

Aucun soucis durant la compil.

Par contre, quand je lance qemu, il me met en fullscreen (ce que je ne veux pas) et là...c'est le drame : écran pour la moitié, noir avec simplement le curseur qui reste bloqué et l'autre moitié brouillée. J'ai laissé quelques dizaines de mn pour voir si ca avait bougé....nada => hard reboot. :(

C'est grave docteur ?

# 201 Qemu (Kqemu) - l'émulateur libre de Linux 3 septembre 2006, par Frédéric

Pourquoi tu ne télécharges pas le fichier inclus dans l'article (en zip) tout simplement ? Il intègre des modifications suite aux commentaires dont la détection du bon kernel par exemple.

Si tu te contentes de copier/coller la version de Olivier OLEJNICZAK (je n'ai rien contre), il faut aussi que tu insères les retours chariots nécessaires.

Pour remettre qemu en fenêtre normale, il faut appuyer sur ctrl-alt-f. Normalement, un simple alt-tab devrait t'amener à ton bureau gnome, comme sous windows (sous Ubuntu en tout cas).

# 211 Qemu (Kqemu) - l'émulateur libre de Linux 14 septembre 2006, par momo

Merci pour ce script bien pratique !

Quelques remarques :

1) La ligne : apt-get -y —purge remove gcc-3.4 g++-3.4 libsdl1.2debian-all build-essential libsdl1.2-dev zlib1g-dev checkinstall

est un peu radicale, puisqu'à travers les dépendance elle a désinstallé toute une série de paquets qui n'avait rien à voir. Faudrait peut-être soit uniquement désinstallé les paquets ni n'était pas installés avant le lancement du script, ou alors, au lieu de désinstaller, juste imprimer une liste des paquets potentiellement à désintaller. Ou alors ne pas utiliser -y...

2) La reconnaissance du kernel ne fonctionne pas :

$ uname -r 2.6.17-2-686

donc

$ KERNEL=`uname -r | cut -d- -f 3` $ echo $KERNEL 686

mais linux-headers-686 n'existe pas. Ca devrait être

linux-headers-2.6.17-2

donc, la ligne devrait simplement être : KERNEL=`uname -r`

3) au lieu d'utiliser checkinstall, ce serait encore mieux d'utiliser apt-get source, d'intégrer kqemu dans les sources débianisées, changer debian/rules pour permettre la compulation de kqemu et alors de lancer dpkg-buildpackage.

# 212 Qemu (Kqemu) - l'émulateur libre de Linux 14 septembre 2006, par Frédéric

Merci momo pour tes remarques constructives !

1) Tu as raison pour les dépendances. J'enlève l'option -y

2) Vérifie ton source.lst

linux-headers-686 existe


$ apt-cache search linux-headers-686
linux
-headers-686 - Linux kernel headers on PPro/Celeron/PII/PIII/PIV

3) C'est une très bonne idée malheureusement les dépôts des sources ne reflètent pas la dernière version ! Mais le plus important étant que kqemu n'étant pas libre, il ne sera pas disponible dans les dépôts.

# 271 Qemu (Kqemu) - l'émulateur libre de Linux 22 janvier 2007, par Olivier OLEJNICZAK

Ci-dessous un lien vers un site proposant un excellent script pour télécharger/compiler/installer Qemu/KQemu sous Ubuntu Breezy et Dapper.

http://www.futuredesktop.net/script-of-moma.html

# 272 Qemu (Kqemu) - l'émulateur libre de Linux 22 janvier 2007, par Olivier OLEJNICZAK

le site intitulé "Ubuntu en Windows : Linux pour ceux qui préfèrent de ne pas sauter dans le vide" traite de façon très didactique l'installation de ubuntu sous Windows dans une machine virtuelle Qemu ou Vmware

(http://homepage.sunrise.ch/mysunrise/ekeller00/ubuntu/11_UbuntuEnWindows_Intro_f.html)

# 408 Qemu (Kqemu) - l'émulateur libre de Linux 4 juillet 2007, par xavier
Est-il possible d'utiliser Qemu en user-mode par installation depuis les dépots, soit en utulisant votre script ? merci
# 852 Qemu (Kqemu) - l'émulateur libre de Linux 18 novembre 2008, par jerome

le lien de la documentation :

wget http://fabrice.bellard.free.fr/qemu/kqemu-1.3.0pre11.tar.gz

ne semble plus répondre même avec l'autre nom de domaine

# 856 Qemu (Kqemu) - l'émulateur libre de Linux 22 novembre 2008, par Frédéric
C'est réparé ;-)
# 891 Qemu (Kqemu) - l'émulateur libre de Linux 12 janvier 2009, par johan

salut, alors moi j'ai utilisé kvm (avec qemu) pour installer vista en machine vituelle sous linux : marche niquel. Seulement je n'arrive pas à monter mon .img (le dd virtuel de vista sous ubuntu).

J'ai éssayé les commandes : johan@tirief : $ sudo mount -o loop,offset=32256 /home/jerome/disk01.img

mount : ne peut repérer /home/jerome/disk01.img dans /etc/fstab ou /etc/mtab

que faire ? Merci ^^

# 894 Qemu (Kqemu) - l'émulateur libre de Linux 18 janvier 2009, par Frédéric

C'est en fin d'article :

"monter l'image disque"

Cà ne marche qu'avec le format "raw" de qemu.

Pour voir le format, utilisez :


$ qemu-img info <votre_image>

Poster un message