Différences entre versions de « QEMU »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
imported>SylvainBeucler
 
(47 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 
* http://fabrice.bellard.free.fr/qemu
 
* http://fabrice.bellard.free.fr/qemu
 
* [http://fabrice.bellard.free.fr/qemu/download.html Dernière version précompilée]
 
* [http://fabrice.bellard.free.fr/qemu/download.html Dernière version précompilée]
 +
 
  aptitude install qemu
 
  aptitude install qemu
 +
cat <<EOF >> /etc/sysctl.conf
 +
# http://kidsquid.com/cgi-bin/moin.cgi/QemuOnLinux
 +
# Ensure host has 1024 Hz timer
 +
dev.rtc.max-user-freq=1024
 +
EOF
 +
sysctl -p
  
=== Compiler et tester un exécutable de test ===
+
== Compiler et tester un exécutable de test ==
  
 
Pour obtenir powerpc-linux-gcc: [[Compilation croisée]]
 
Pour obtenir powerpc-linux-gcc: [[Compilation croisée]]
Ligne 26 : Ligne 33 :
 
Piste: l'archive [http://fabrice.bellard.free.fr/qemu/download.html gnemul] avec quelques bib systèmes.
 
Piste: l'archive [http://fabrice.bellard.free.fr/qemu/download.html gnemul] avec quelques bib systèmes.
  
=== Des images de systèmes à télécharger ===
+
== Des images de systèmes à télécharger ==
  
 
Sur http://free.oszoo.org/download.html
 
Sur http://free.oszoo.org/download.html
Ligne 50 : Ligne 57 :
 
* [http://www.overselfresearch.com/kb/qemu.html Installing from Scratch...]: HOWTO pour recréer l'image Debian Sarge
 
* [http://www.overselfresearch.com/kb/qemu.html Installing from Scratch...]: HOWTO pour recréer l'image Debian Sarge
  
=== Tester une installation ===
+
== Tester une installation ==
  
 
  wget http://cdimage.debian.org/debian-cd/3.1_r2/powerpc/iso-cd/debian-31r2-powerpc-netinst.iso
 
  wget http://cdimage.debian.org/debian-cd/3.1_r2/powerpc/iso-cd/debian-31r2-powerpc-netinst.iso
Ligne 58 : Ligne 65 :
 
D'après le HOWTO, le noyau 2.6 ne passe pas - utiliser <code>install-powerpc-2.4 ramdisk_size=10000</code> au boot.
 
D'après le HOWTO, le noyau 2.6 ne passe pas - utiliser <code>install-powerpc-2.4 ramdisk_size=10000</code> au boot.
  
=== Démarrer sur son disque-dur ===
+
== Démarrer sur son propre disque-dur ==
  
 
  qemu -snapshot -hda /dev/hda -hdb /dev/hdb
 
  qemu -snapshot -hda /dev/hda -hdb /dev/hdb
  
=== VNC ===
+
== Démarrer sur une image de partition ==
 +
 
 +
(et non sur une image de disque complet)
 +
 
 +
qemu -hda debian.img -kernel bzImage -append "root=/dev/hda" # ...
 +
 
 +
== Démarrer sur une image PXE/BOOTP/netboot ==
 +
 
 +
[http://lists.gnu.org/archive/html/qemu-devel/2007-02/msg00281.html patch] pour la version 0.9.0, intégré dans 0.9.1.
 +
 
 +
Préparation de l'exécutable:
 +
wget ftp://ftp.fr.debian.org/debian/dists/sarge/main/installer-i386/current/images/netboot/netboot.tar.gz
 +
mkdir debian-netboot/
 +
tar xzf netboot.tar.gz -C debian-netboot/
 +
 
 +
Lancer l'installation netboot:
 +
qemu ignorezmoi.img -boot n -tftp debian-netboot/ -bootp /pxelinux.0
 +
 
 +
L'installateur Debian se lance :)
 +
 
 +
== Démarrer l'émulateur sur le réseau ==
 +
 
 +
* Utilisez dhcp3-server/sarge ou dhcpd/etch comme serveur DHCP (dhcp3-server/etch|lenny ne fonctionne pas, [http://qemu-forum.ipi.fi/viewtopic.php?t=2980 je ne sais pas pourquoi]; pistes: [http://os-drive.com/files/docbook/xen-pxeboot.html#id2976732 1] [http://www.etherboot.org/wiki/troubleshooting 2], mais ça ne change rien pour moi)
 +
* Passez en mode bridge sur la machine hôte pour récupérer les réponses DHCP ([[UserModeLinux#Mode_semi-root_avec_tuntap]]).
 +
* Puis lancez:
 +
qemu -hda nimportequoi.img -boot n -net nic -net tap,ifname=tap1,script=no
 +
 
 +
Le transfert TFTP initial du noyau est beaucoup plus lent que sur une machine physique - bizarre.
 +
 
 +
== VNC ==
  
 
Exemple:
 
Exemple:
Ligne 73 : Ligne 109 :
  
 
Problème: la souris VNC et la souris système de sont pas synchro :/
 
Problème: la souris VNC et la souris système de sont pas synchro :/
 +
 +
(Edit de Hostin : afin de corriger ce probleme il faut demarrer avec "-usbdevice tablet" ;-) )
  
 
* [http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC10 doc]
 
* [http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC10 doc]
  
=== Partage Samba avec l'hôte ===
+
== Partage Samba avec l'hôte ==
  
 
  qemu -smb /path os.img
 
  qemu -smb /path os.img
Ligne 86 : Ligne 124 :
 
Purée, je vais encore râler contre les distros, mais QUEL BESOIN ONT CES FOUTUS PACKAGEURS de coder en dur <code>secrets.tdb</code> dans <code>/var/lib/</code> alors que c'est sensé être configurable (option <code>private dir</code>)? Cf. <code>debian/patch/fhs.patch</code>. Du coup il n'est plus possible de lancer smbd sans être root, faute de droits >(
 
Purée, je vais encore râler contre les distros, mais QUEL BESOIN ONT CES FOUTUS PACKAGEURS de coder en dur <code>secrets.tdb</code> dans <code>/var/lib/</code> alors que c'est sensé être configurable (option <code>private dir</code>)? Cf. <code>debian/patch/fhs.patch</code>. Du coup il n'est plus possible de lancer smbd sans être root, faute de droits >(
  
* [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=249873 bug chez Debian]: ça ne fait que 2-3 ans.
+
* [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=249873 bug chez Debian]: ça ne fait que 5 ans.
  
  
Dans la VM:
+
Dans la VM, au choix:
 
  mount //10.0.2.4/qemu smb/
 
  mount //10.0.2.4/qemu smb/
 
  mount -t cifs //10.0.2.4/qemu smb/
 
  mount -t cifs //10.0.2.4/qemu smb/
 
  smbclient //10.0.2.4/qemu
 
  smbclient //10.0.2.4/qemu
  
=== Démarrer sur une image de partition ===
+
* [http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC10 doc]
 +
 
 +
== Optimisation PC->PC ==
  
(et non sur une image de disque complet)
+
=== KQEMU - QEMU Accelerator Module ===
 +
 
 +
KQEMU est libre depuis le 5 février :)
 +
 
 +
Il permet d'accélérer des systèmes à base de Linux ou de W2K et ultérieur.
 +
 
 +
Remarque: kqemu ne donne pas nécessairement de bons résultats. Win98 fonctionne mieux sans. [http://www.kidsquid.com/cgi-bin/moin.cgi/WindowsOnQemu désactiver éventuellement l'ACPI] pour installer WXP.
 +
 
 +
Si j'ai bien compris, il y a trois mode:
 +
 
 +
* pas d'accélération (option -no-kqemu)
 +
* accélération normale (pas d'option et /dev/kqemu installé)
 +
* accélération noyau (-kernel-kqemu)
 +
 
 +
=== qvm86 ===
 +
 
 +
[http://savannah.nongnu.org/projects/qvm86 qvm86] permettait d'avoir une émulation plus rapide mais le code n'a pas été touché depuis 2005-09-04 (qemu 0.7.2), et l'auteur encourage [http://savannah.nongnu.org/forum/forum.php?forum_id=4748] de passer à VirtualBox à la place. Il y a un [http://lists.gnu.org/archive/html/qvm86-devel/2006-02/msg00000.html patch] plus récent mais je n'arrive pas à savoir sur quelle version de qemu il fonctionne. Apparemment [http://lists.gnu.org/archive/html/qvm86-devel/2006-02/msg00002.html] le patch s'applique sur la v0.8.0 mais ne contient que les changements sur qvm86, pas les changements correspondants sur qvm86 (notamment, il manque une mise à jour de patch.qvm86).
 +
 
 +
Compilation:
 +
cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/qemu co -D 2006-09-05 qemu
 +
cd qemu/
 +
cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/qvm86 co qvm86
 +
cat qvm86/patch.qvm86 | patch -p0
 +
./configure --target-list=i386-softmmu --cc=gcc-3.3
 +
make
 +
# sudo make install
 +
# cf. i386-softmmu/qemu et qvm86/qvm86.ko
 +
 
 +
Je ne sais pas trop comment tester l'efficacité du module. En tout cas c'est un excellent moyen de reproduire un BSOD W98 ;) (note: cet OS n'est pas sensé fonctionner avec un accélérateur de toute façon)
  
qemu -hda debian.img -kernel bzImage -append "root=/dev/hda" # ...
+
=== Optimisation avec le noyau Linux ===
  
=== Optimisation PC->PC ===
+
Il y a un patch très simple dans les sources de kqemu (<code>linux-2.6.9-qemu-fast.patch</code>) qui notamment (si j'ai bien compris) réserve une plage mémoire pour qemu. Je suppose que c'est de cela qu'il s'agit lorsque l'on voit des références à une commande <code>qemu-fast</code>. Cependant je ne sais pas comment produire cet exécutable.
  
[http://savannah.nongnu.org/projects/qvm86 qvm86] permettait d'avoir une émulation plus rapide mais le code n'a pas été touché depuis 2005-09-04 (qemu 0.7.1), le code ne compile plus de toute façon (probablement des changements dans gcc) et l'auteur encourage [http://savannah.nongnu.org/forum/forum.php?forum_id=4748] de passer à VirtualBox à la place. Il y a un [http://lists.gnu.org/archive/html/qvm86-devel/2006-02/msg00000.html patch] plus récent mais je n'arrive pas à savoir sur quelle version de qemu il fonctionne.
+
== Désinstallation de la version binaire ==
  
Remarque: l'équivalent propriétaire de qvm86 ne donne pas nécessairement de bons résultats de toute façon. Win98 fonctionne mieux sans, par exemple. Ce n'est donc pas indispensable. VirtualBox en revanche ne fonctionne apparement pas sans le module noyau - et ne fournit certaines fonctionnalités que dans sa [http://www.virtualbox.org/wiki/Editions version] propriétaire.
+
tar tzf qemu-0.8.2-i386.tar.gz | (cd / && sudo xargs rm)
  
=== QEMU-compatible kernel ===
+
== QEMU-compatible kernel ==
  
==== Configuration rapide ====
+
=== Configuration rapide ===
  
 
  make defconfig ARCH=i386
 
  make defconfig ARCH=i386
Ligne 118 : Ligne 186 :
 
Ce noyau est malheureusement trop volumineux pour tenir sur une disquette (2.5Mo) - ce qui est nécessaire pour suivre certains HOWTO les séquences d'amorçage ([http://users.rsise.anu.edu.au/~okeefe/p2b/power2bash/power2bash.html][http://www.tldp.org/HOWTO/Bootdisk-HOWTO/]).
 
Ce noyau est malheureusement trop volumineux pour tenir sur une disquette (2.5Mo) - ce qui est nécessaire pour suivre certains HOWTO les séquences d'amorçage ([http://users.rsise.anu.edu.au/~okeefe/p2b/power2bash/power2bash.html][http://www.tldp.org/HOWTO/Bootdisk-HOWTO/]).
  
==== Configuration précise ====
+
Utiliser éventuellement <code>make ROOT_DEV=/dev/hda1</code>.
 +
 
 +
=== Configuration précise: méthode ===
  
Analyse de la configuration,
+
==== Analyse de la configuration ====
  
 
* Depuis une image qemu qui fonctionne:
 
* Depuis une image qemu qui fonctionne:
Ligne 144 : Ligne 214 :
 
   ne2000 pci macaddr=...
 
   ne2000 pci macaddr=...
  
Configuration du noyau:
+
==== Méthode ====
  
# noyau minimal
 
 
  make allnoconfig
 
  make allnoconfig
  
Méthode
+
Puis amélioration au fur et à mesure:
=======
+
* Erreurs au chargement du noyau
+
* File -> Search dans qconf
Erreurs au chargement du noyau
+
 
File -> Search dans qconf
+
=== Configuration ===
+
 
+
==== Essentiel ====
Essentiel
 
=========
 
 
   
 
   
 
  Kernel support for ELF binaries (BINFMT_ELF)
 
  Kernel support for ELF binaries (BINFMT_ELF)
Ligne 170 : Ligne 237 :
 
  #?? DMA?
 
  #?? DMA?
 
  Ext3 journalling file system support (EXT3_FS)
 
  Ext3 journalling file system support (EXT3_FS)
   
+
  # and/or:
   
+
  Reiserfs support (REISERFS_FS)
La suite
+
 
========
+
==== La suite ====
 
   
 
   
 
  # Précision du type de processeur
 
  # Précision du type de processeur
 
  Pentium-II/Celeron(pre-Coppermine) (MPENTIUMII)
 
  Pentium-II/Celeron(pre-Coppermine) (MPENTIUMII)
 +
 +
# Servers (Apache...)
 +
System V IPC (SYSVIPC)
 
   
 
   
 
  # Systèmes de fichiers
 
  # Systèmes de fichiers
Ligne 182 : Ligne 252 :
 
  # /dev/shm
 
  # /dev/shm
 
  Virtual memory file system support (former shm fs) (TMPFS)
 
  Virtual memory file system support (former shm fs) (TMPFS)
# /dev/log
 
Unix domain sockets (UNIX)
 
 
   
 
   
 
  ?
 
  ?
Ligne 203 : Ligne 271 :
 
   
 
   
 
  Networking support (NET)
 
  Networking support (NET)
 +
# /dev/log
 +
Unix domain sockets (UNIX)
 
  TCP/IP networking (INET)
 
  TCP/IP networking (INET)
 
  Packet socket (PACKET)
 
  Packet socket (PACKET)
Ligne 210 : Ligne 280 :
 
  EISA, VLB, PCI and on board controllers (NET_PCI)
 
  EISA, VLB, PCI and on board controllers (NET_PCI)
 
  PCI NE2000 and clones support (see help) (NE2K_PCI)
 
  PCI NE2000 and clones support (see help) (NE2K_PCI)
   
+
  # TODO: "Qemu can emulate several different models of network card.
   
+
  # Valid values for type are ne2k_pci, ne2k_isa, rtl8139, smc91c111 and lance.
  Misc
+
  # Not all devices are supported on all targets." [http://qemu.org/qemu-doc.html#SEC10]
====
+
 
 +
==== Divers ====
 
   
 
   
 
  Kernel .config support (IKCONFIG)
 
  Kernel .config support (IKCONFIG)
Ligne 219 : Ligne 290 :
 
  CIFS support (advanced network filesystem for Samba, Window and other CIFS compliant servers) (CIFS)
 
  CIFS support (advanced network filesystem for Samba, Window and other CIFS compliant servers) (CIFS)
 
   
 
   
 +
# For the vga=ask kernel parameter
 +
Video mode selection support (VIDEO_SELECT)
 +
Support for frame buffer devices (FB)
 +
Cirrus Logic support (FB_CIRRUS)
 +
 +
==== Multicast ====
 +
 +
Par exemple <code>-net socket,mcast=239.192.168.1:1102</code>.
 +
 +
D'après le livre User Mode Linux il faut activer:
 +
IP: multicasting (IP_MULTICAST)
 +
IP: multicast routing (IP_MROUTE) # nécessaire?
 +
 +
Le réseau multicast est compatible avec UML (ainsi que les réseaux multicast réels, en fait :)).
 +
 +
==== VDE - Virtual Distributed Ethernet ====
 +
 +
apt-get install vde2
 +
 +
On peut créer un réseau entre machines facilement sans accès root avec VDE:
 +
vde_switch
 +
qemu ... -net nic,macaddr=52:54:00:00:00:01 -net vde,sock=/tmp/vde.ctl
 +
qemu ... -net nic,macaddr=52:54:00:00:00:02 -net vde,sock=/tmp/vde.ctl
 +
 +
==== VPN ====
 +
 +
# IPSec - cf. http://www.ipsec-howto.org/x299.html
 +
 +
#? Transformation user configuration interface (XFRM_USER) # for racoon only?
 +
PF_KEY sockets (NET_KEY)
 
   
 
   
  Virtual FAT disk images
+
  IP: AH transformation (INET_AH)
  =======================
+
IP: ESP transformation (INET_ESP)
# ex: qemu debian.img -hdb fat:/tmp
+
#?IP: IPComp transformation (INET_IPCOMP) # strictly necessary?
 +
IP: IPsec transport mode (INET_XFRM_MODE_TRANSPORT)
 +
IP: IPsec tunnel mode (INET_XFRM_MODE_TUNNEL)
 +
#?IP: IPsec BEET mode (INET_XFRM_MODE_BEET)
 +
 +
Null algorithms (CRYPTO_NULL)
 +
AES cipher algorithms (i586) (CRYPTO_AES_586)
 +
 
 +
# PPTP (client only?) [http://pptpclient.sourceforge.net/howto-gentoo.phtml]
 +
IP: GRE tunnels over IP (NET_IPGRE)
 +
PPP (point-to-point protocol) support (PPP)
 +
PPP MPPE compression (encryption) (EXPERIMENTAL) (PPP_MPPE)
 +
  PPP support for async serial ports (PPP_ASYNC)
 +
 
 +
==== Virtual FAT disk images ====
 +
 
 +
Ex: qemu debian.img -hdb fat:/tmp
 
   
 
   
 
  VFAT (Windows-95) fs support (VFAT_FS)
 
  VFAT (Windows-95) fs support (VFAT_FS)
Ligne 232 : Ligne 349 :
 
   
 
   
 
   
 
   
Carte graphique
+
==== Carte graphique ====
===============
 
 
   
 
   
 
  0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446
 
  0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446
 
   
 
   
 +
==== Supprimé pour l'instant ====
 
   
 
   
  Supprimé pour l'instant
+
  # Software poweroff:
=======================
+
  Power Management support (PM)
   
 
 
  ACPI Support (ACPI)
 
  ACPI Support (ACPI)
 +
Button (ACPI_BUTTON)
 
   
 
   
 
  The IPv6 protocol (IPV6)
 
  The IPv6 protocol (IPV6)
Ligne 247 : Ligne 364 :
 
  ?generic/default IDE chipset support (IDE_GENERIC)
 
  ?generic/default IDE chipset support (IDE_GENERIC)
 
   
 
   
+
==== Autre matériel ====
Autre matériel
 
==============
 
  
 
  0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI
 
  0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI
Ligne 259 : Ligne 374 :
 
  0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II]
 
  0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II]
 
  ?
 
  ?
 +
 +
=== Automatisation ===
 +
 +
On peut prédéfinir ces options dans un fichier <code>allno.config</code>, pris en compte au moment du <code>make allnoconfig</code> (cf. le README du noyau). Le fichier se présente sous cette forme (préfixer par <code>CONFIG_</code> et finir par <code>=y</code> - comme dans un <code>.config</code>):
 +
 +
CONFIG_BINFMT_ELF=y
 +
CONFIG_IDE=y
 +
[...]
 +
CONFIG_CIFS=y
 +
CONFIG_VFAT_FS=y
 +
CONFIG_NLS_CODEPAGE_437=y
 +
CONFIG_NLS_ISO8859_1=y
 +
 +
Note: en fait, il faut rajouter un certain nombre d'option qui sont automatiquement ajoutées par xconfig (notamment  CONFIG_IDE_GENERIC pour le disque-dur...).
  
 
== Liens ==
 
== Liens ==
Ligne 266 : Ligne 395 :
 
* [http://www.kidsquid.com/cgi-bin/moin.cgi/FrontPage Unofficial #qemu Wiki]
 
* [http://www.kidsquid.com/cgi-bin/moin.cgi/FrontPage Unofficial #qemu Wiki]
 
* [http://qemu-forum.ipi.fi/ The QEMU forum]
 
* [http://qemu-forum.ipi.fi/ The QEMU forum]
 +
* [http://www.gnome.org/~markmc/qemu-networking.html QEMU Networking]: panorama des différentes solutions de connexion réseau
 +
* [http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=ca6bb5d7ab22ac79f608fe6cbc6b12de6a5a19f0 tuntap nécessite des permissions supplémentaires]
 +
* [http://qemu-forum.ipi.fi/viewtopic.php?t=2980 Limitations de Etherboot]: utiliser ISC DHCPd v2 (pas v3).
 +
* [http://fedoranews.org/tchung/qemu/ QEMU compilé pour Fedora]

Version actuelle datée du 31 octobre 2009 à 21:44

aptitude install qemu
cat <<EOF >> /etc/sysctl.conf
# http://kidsquid.com/cgi-bin/moin.cgi/QemuOnLinux
# Ensure host has 1024 Hz timer
dev.rtc.max-user-freq=1024
EOF
sysctl -p

Compiler et tester un exécutable de test

Pour obtenir powerpc-linux-gcc: Compilation croisée

$ cat <<EOF > hello.c
#include <stdio.h>

int main(void) {
  return ! printf("Hello world!\n");
}
EOF
$ powerpc-linux-gcc hello.c -Wall -ansi -pedantic -static
$ qemu-ppc a.out
Hello world!

Mais:

$ powerpc-linux-gcc hello.c -Wall -ansi -pedantic
$ qemu-ppc ./a.out
/lib/ld.so.1: No such file or directory
Erreur de segmentation

ToDo: trouver une façon de travailler pour gérer les dépendances (chroot recompilé)? Piste: l'archive gnemul avec quelques bib systèmes.

Des images de systèmes à télécharger

Sur http://free.oszoo.org/download.html

Essayer notamment:

btdownloadcurses http://free.oszoo.org/ftp/images/linux-ppc-20040716.tar.bz2.torrent #20M
btdownloadcurses http://free.oszoo.org/ftp/images/debian_sarge_ppc.tar.torrent #1Go!

Avec l'image de base, en tant que root pour avoir le réseau via /dev/net/tun:

qemu-system-ppc -prep -localtime -kernel zImage.prep linux-ppc.img

À l'intérieur, vous pouvez [1]:

ifconfig eth0 172.20.0.2 # qemu
scp me@172.20.0.1:fichier # système hôte

L'image de 1Go est un système Debian sarge PPC pré-installé complet:

qemu-system-ppc -prep -kernel vmlinuz-2.4.27.001 -hda debian_sarge_ppc.img -user-net

Dans celle-ci le réseau à l'air différent:

  • 10.0.2.2: hôte et... serveur DHCP!
  • 10.0.2.15: qemu

Tester une installation

wget http://cdimage.debian.org/debian-cd/3.1_r2/powerpc/iso-cd/debian-31r2-powerpc-netinst.iso
qemu-img create debian_sarge_ppc.img 500M
qemu-system-ppc -hda debian_sarge_ppc.img -cdrom debian-31r2-powerpc-netinst.iso -boot d

D'après le HOWTO, le noyau 2.6 ne passe pas - utiliser install-powerpc-2.4 ramdisk_size=10000 au boot.

Démarrer sur son propre disque-dur

qemu -snapshot -hda /dev/hda -hdb /dev/hdb

Démarrer sur une image de partition

(et non sur une image de disque complet)

qemu -hda debian.img -kernel bzImage -append "root=/dev/hda" # ...

Démarrer sur une image PXE/BOOTP/netboot

patch pour la version 0.9.0, intégré dans 0.9.1.

Préparation de l'exécutable:

wget ftp://ftp.fr.debian.org/debian/dists/sarge/main/installer-i386/current/images/netboot/netboot.tar.gz
mkdir debian-netboot/
tar xzf netboot.tar.gz -C debian-netboot/

Lancer l'installation netboot:

qemu ignorezmoi.img -boot n -tftp debian-netboot/ -bootp /pxelinux.0

L'installateur Debian se lance :)

Démarrer l'émulateur sur le réseau

qemu -hda nimportequoi.img -boot n -net nic -net tap,ifname=tap1,script=no

Le transfert TFTP initial du noyau est beaucoup plus lent que sur une machine physique - bizarre.

VNC

Exemple:

qemu -vnc :0 -k fr os.img

Pour y accéder:

vncviewer localhost

Très pratique pour passer une VM en tâche de fond.

Problème: la souris VNC et la souris système de sont pas synchro :/

(Edit de Hostin : afin de corriger ce probleme il faut demarrer avec "-usbdevice tablet" ;-) )

Partage Samba avec l'hôte

qemu -smb /path os.img

ou plutôt, si vous êtes chez Debian:

sudo qemu -smb /path os.img

Purée, je vais encore râler contre les distros, mais QUEL BESOIN ONT CES FOUTUS PACKAGEURS de coder en dur secrets.tdb dans /var/lib/ alors que c'est sensé être configurable (option private dir)? Cf. debian/patch/fhs.patch. Du coup il n'est plus possible de lancer smbd sans être root, faute de droits >(


Dans la VM, au choix:

mount //10.0.2.4/qemu smb/
mount -t cifs //10.0.2.4/qemu smb/
smbclient //10.0.2.4/qemu

Optimisation PC->PC

KQEMU - QEMU Accelerator Module

KQEMU est libre depuis le 5 février :)

Il permet d'accélérer des systèmes à base de Linux ou de W2K et ultérieur.

Remarque: kqemu ne donne pas nécessairement de bons résultats. Win98 fonctionne mieux sans. désactiver éventuellement l'ACPI pour installer WXP.

Si j'ai bien compris, il y a trois mode:

  • pas d'accélération (option -no-kqemu)
  • accélération normale (pas d'option et /dev/kqemu installé)
  • accélération noyau (-kernel-kqemu)

qvm86

qvm86 permettait d'avoir une émulation plus rapide mais le code n'a pas été touché depuis 2005-09-04 (qemu 0.7.2), et l'auteur encourage [2] de passer à VirtualBox à la place. Il y a un patch plus récent mais je n'arrive pas à savoir sur quelle version de qemu il fonctionne. Apparemment [3] le patch s'applique sur la v0.8.0 mais ne contient que les changements sur qvm86, pas les changements correspondants sur qvm86 (notamment, il manque une mise à jour de patch.qvm86).

Compilation:

cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/qemu co -D 2006-09-05 qemu
cd qemu/
cvs -d:pserver:anonymous@cvs.sv.gnu.org:/sources/qvm86 co qvm86
cat qvm86/patch.qvm86 | patch -p0
./configure --target-list=i386-softmmu --cc=gcc-3.3
make
# sudo make install
# cf. i386-softmmu/qemu et qvm86/qvm86.ko

Je ne sais pas trop comment tester l'efficacité du module. En tout cas c'est un excellent moyen de reproduire un BSOD W98 ;) (note: cet OS n'est pas sensé fonctionner avec un accélérateur de toute façon)

Optimisation avec le noyau Linux

Il y a un patch très simple dans les sources de kqemu (linux-2.6.9-qemu-fast.patch) qui notamment (si j'ai bien compris) réserve une plage mémoire pour qemu. Je suppose que c'est de cela qu'il s'agit lorsque l'on voit des références à une commande qemu-fast. Cependant je ne sais pas comment produire cet exécutable.

Désinstallation de la version binaire

tar tzf qemu-0.8.2-i386.tar.gz | (cd / && sudo xargs rm)

QEMU-compatible kernel

Configuration rapide

make defconfig ARCH=i386
make xconfig
# Activer: NE2K_PCI=Y (ns2000 PCI network ethernet card)
make
file arch/i386/boot/bzImage

Ce noyau est malheureusement trop volumineux pour tenir sur une disquette (2.5Mo) - ce qui est nécessaire pour suivre certains HOWTO les séquences d'amorçage ([4][5]).

Utiliser éventuellement make ROOT_DEV=/dev/hda1.

Configuration précise: méthode

Analyse de la configuration

  • Depuis une image qemu qui fonctionne:
$ uname --machine
i686
$ cat /proc/cpuinfo
[...]
model name      : Pentium II (Klamath)
[...]
# Remarque: il y a une variante x86_64, avec qemu-system-x86_64
$ lspci
0000:00:00.0 Host bridge: Intel Corp. 440FX - 82441FX PMC [Natoma] (rev 02)
0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II]
0000:00:01.1 IDE interface: Intel Corp. 82371SB PIIX3 IDE [Natoma/Triton II]
0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI
0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446
0000:00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
  • Sur la console qemu (Ctrl+Alt+2):
(qemu) info network
VLAN 0 devices:
  user redirector
  ne2000 pci macaddr=...

Méthode

make allnoconfig

Puis amélioration au fur et à mesure:

  • Erreurs au chargement du noyau
  • File -> Search dans qconf

Configuration

Essentiel

Kernel support for ELF binaries (BINFMT_ELF)
# Disque-dur
# 0000:00:01.1 IDE interface: Intel Corp. 82371SB PIIX3 IDE [Natoma/Triton II]
ATA/ATAPI/MFM/RLL support (IDE)
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (BLK_DEV_IDE)
Include IDE/ATA-2 DISK support (BLK_DEV_IDEDISK)
#?PCI IDE chipset support (BLK_DEV_IDEPCI)
#?Generic PCI bus-master DMA support (BLK_DEV_IDEDMA_PCI)
#?Intel PIIXn chipsets support (BLK_DEV_PIIX)
#?? DMA?
Ext3 journalling file system support (EXT3_FS)
# and/or:
Reiserfs support (REISERFS_FS)

La suite

# Précision du type de processeur
Pentium-II/Celeron(pre-Coppermine) (MPENTIUMII)

# Servers (Apache...)
System V IPC (SYSVIPC)

# Systèmes de fichiers
Second extended fs support (EXT2_FS)
# /dev/shm
Virtual memory file system support (former shm fs) (TMPFS)

?
#Deadline I/O scheduler (IOSCHED_DEADLINE)
#Deadline (DEFAULT_DEADLINE)

# Floppy
Normal floppy disk support (BLK_DEV_FD)

# Lecteur CD-ROM
Include IDE/ATAPI CDROM support (BLK_DEV_IDECD)
# ^ À tester! ^
ISO 9660 CDROM file system support (ISO9660_FS)
Microsoft Joliet CDROM extensions (JOLIET)

# Network
# 0000:00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
PCI support (PCI)

Networking support (NET)
# /dev/log
Unix domain sockets (UNIX)
TCP/IP networking (INET)
Packet socket (PACKET)

Network device support (NETDEVICES)
Ethernet (10 or 100Mbit) (NET_ETHERNET)
EISA, VLB, PCI and on board controllers (NET_PCI)
PCI NE2000 and clones support (see help) (NE2K_PCI)
# TODO: "Qemu can emulate several different models of network card.
# Valid values for type are ne2k_pci, ne2k_isa, rtl8139, smc91c111 and lance.
# Not all devices are supported on all targets." [6]

Divers

Kernel .config support (IKCONFIG)
Enable access to .config through /proc/config.gz (IKCONFIG_PROC)
CIFS support (advanced network filesystem for Samba, Window and other CIFS compliant servers) (CIFS)

# For the vga=ask kernel parameter
Video mode selection support (VIDEO_SELECT)
Support for frame buffer devices (FB)
Cirrus Logic support (FB_CIRRUS)

Multicast

Par exemple -net socket,mcast=239.192.168.1:1102.

D'après le livre User Mode Linux il faut activer:

IP: multicasting (IP_MULTICAST)
IP: multicast routing (IP_MROUTE) # nécessaire?

Le réseau multicast est compatible avec UML (ainsi que les réseaux multicast réels, en fait :)).

VDE - Virtual Distributed Ethernet

apt-get install vde2

On peut créer un réseau entre machines facilement sans accès root avec VDE:

vde_switch
qemu ... -net nic,macaddr=52:54:00:00:00:01 -net vde,sock=/tmp/vde.ctl
qemu ... -net nic,macaddr=52:54:00:00:00:02 -net vde,sock=/tmp/vde.ctl

VPN

# IPSec - cf. http://www.ipsec-howto.org/x299.html

#? Transformation user configuration interface (XFRM_USER) # for racoon only?
PF_KEY sockets (NET_KEY)

IP: AH transformation (INET_AH)
IP: ESP transformation (INET_ESP)
#?IP: IPComp transformation (INET_IPCOMP) # strictly necessary?
IP: IPsec transport mode (INET_XFRM_MODE_TRANSPORT)
IP: IPsec tunnel mode (INET_XFRM_MODE_TUNNEL)
#?IP: IPsec BEET mode (INET_XFRM_MODE_BEET)

Null algorithms (CRYPTO_NULL)
AES cipher algorithms (i586) (CRYPTO_AES_586)
# PPTP (client only?) [7]
IP: GRE tunnels over IP (NET_IPGRE)
PPP (point-to-point protocol) support (PPP)
PPP MPPE compression (encryption) (EXPERIMENTAL) (PPP_MPPE)
PPP support for async serial ports (PPP_ASYNC)

Virtual FAT disk images

Ex: qemu debian.img -hdb fat:/tmp

VFAT (Windows-95) fs support (VFAT_FS)
Codepage 437 (United States, Canada) (NLS_CODEPAGE_437)
NLS ISO 8859-1 (Latin 1; Western European Languages) (NLS_ISO8859_1)
# Pas nécessaire pour fat:, mais indispensable pour monter de vraies
# partitions FAT françaises
# Codepage 850 (Europe) (NLS_CODEPAGE_850)


Carte graphique

0000:00:02.0 VGA compatible controller: Cirrus Logic GD 5446

Supprimé pour l'instant

# Software poweroff:
Power Management support (PM)
ACPI Support (ACPI)
Button (ACPI_BUTTON)

The IPv6 protocol (IPV6)

?generic/default IDE chipset support (IDE_GENERIC)

Autre matériel

0000:00:01.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI
?

0000:00:00.0 Host bridge: Intel Corp. 440FX - 82441FX PMC [Natoma] (rev 02)
?

0000:00:01.0 ISA bridge: Intel Corp. 82371SB PIIX3 ISA [Natoma/Triton II]
?

Automatisation

On peut prédéfinir ces options dans un fichier allno.config, pris en compte au moment du make allnoconfig (cf. le README du noyau). Le fichier se présente sous cette forme (préfixer par CONFIG_ et finir par =y - comme dans un .config):

CONFIG_BINFMT_ELF=y
CONFIG_IDE=y
[...]
CONFIG_CIFS=y
CONFIG_VFAT_FS=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y

Note: en fait, il faut rajouter un certain nombre d'option qui sont automatiquement ajoutées par xconfig (notamment CONFIG_IDE_GENERIC pour le disque-dur...).

Liens