Différences entre versions de « QEMU »
imported>SylvainBeucler |
imported>SylvainBeucler |
||
(31 versions intermédiaires par 2 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 == | |
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 == | |
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 == | |
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 propre disque-dur == | |
qemu -snapshot -hda /dev/hda -hdb /dev/hdb | qemu -snapshot -hda /dev/hda -hdb /dev/hdb | ||
− | + | == Démarrer sur une image de partition == | |
(et non sur une image de disque complet) | (et non sur une image de disque complet) | ||
Ligne 68 : | Ligne 75 : | ||
qemu -hda debian.img -kernel bzImage -append "root=/dev/hda" # ... | qemu -hda debian.img -kernel bzImage -append "root=/dev/hda" # ... | ||
− | === VNC | + | == 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 79 : | 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 == | |
qemu -smb /path os.img | qemu -smb /path os.img | ||
Ligne 92 : | 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 | + | * [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=249873 bug chez Debian]: ça ne fait que 5 ans. |
Ligne 102 : | Ligne 134 : | ||
* [http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC10 doc] | * [http://fabrice.bellard.free.fr/qemu/qemu-doc.html#SEC10 doc] | ||
− | + | == Optimisation PC->PC == | |
− | + | === KQEMU - QEMU Accelerator Module === | |
KQEMU est libre depuis le 5 février :) | KQEMU est libre depuis le 5 février :) | ||
Ligne 110 : | Ligne 142 : | ||
Il permet d'accélérer des systèmes à base de Linux ou de W2K et ultérieur. | 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 | + | 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: | Si j'ai bien compris, il y a trois mode: | ||
Ligne 118 : | Ligne 150 : | ||
* accélération noyau (-kernel-kqemu) | * 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). | [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). | ||
Ligne 138 : | Ligne 170 : | ||
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. | 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. | ||
− | + | == Désinstallation de la version binaire == | |
tar tzf qemu-0.8.2-i386.tar.gz | (cd / && sudo xargs rm) | tar tzf qemu-0.8.2-i386.tar.gz | (cd / && sudo xargs rm) | ||
− | + | == QEMU-compatible kernel == | |
− | + | === Configuration rapide === | |
make defconfig ARCH=i386 | make defconfig ARCH=i386 | ||
Ligne 154 : | 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 180 : | Ligne 214 : | ||
ne2000 pci macaddr=... | ne2000 pci macaddr=... | ||
− | + | ==== Méthode ==== | |
− | |||
make allnoconfig | 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) | Kernel support for ELF binaries (BINFMT_ELF) | ||
Ligne 206 : | 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 ==== | |
# Précision du type de processeur | # Précision du type de processeur | ||
Ligne 221 : | Ligne 252 : | ||
# /dev/shm | # /dev/shm | ||
Virtual memory file system support (former shm fs) (TMPFS) | Virtual memory file system support (former shm fs) (TMPFS) | ||
− | |||
− | |||
? | ? | ||
Ligne 242 : | 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 249 : | 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. Not all devices are supported on all targets." [http://qemu.org/qemu-doc.html#SEC10] | + | # 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." [http://qemu.org/qemu-doc.html#SEC10] | ||
− | + | ==== Divers ==== | |
− | |||
− | |||
Kernel .config support (IKCONFIG) | Kernel .config support (IKCONFIG) | ||
Ligne 259 : | 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) | ||
+ | |||
+ | 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?) [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 272 : | Ligne 349 : | ||
− | + | ==== 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 ==== | ||
− | + | # Software poweroff: | |
− | |||
− | |||
Power Management support (PM) | Power Management support (PM) | ||
ACPI Support (ACPI) | ACPI Support (ACPI) | ||
+ | Button (ACPI_BUTTON) | ||
The IPv6 protocol (IPV6) | The IPv6 protocol (IPV6) | ||
Ligne 288 : | Ligne 364 : | ||
?generic/default IDE chipset support (IDE_GENERIC) | ?generic/default IDE chipset support (IDE_GENERIC) | ||
− | + | ==== 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 301 : | Ligne 375 : | ||
? | ? | ||
− | On peut prédéfinir ces options dans un fichier <code>allno. | + | === 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_BINFMT_ELF=y | ||
CONFIG_IDE=y | CONFIG_IDE=y | ||
− | + | [...] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
CONFIG_CIFS=y | CONFIG_CIFS=y | ||
CONFIG_VFAT_FS=y | CONFIG_VFAT_FS=y |
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
- Installing from Scratch...: HOWTO pour recréer l'image Debian Sarge
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
- Utilisez dhcp3-server/sarge ou dhcpd/etch comme serveur DHCP (dhcp3-server/etch|lenny ne fonctionne pas, je ne sais pas pourquoi; pistes: 1 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:
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 >(
- bug chez Debian: ça ne fait que 5 ans.
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
- Documentation officielle
- Guide simplifié pour QEMU
- Unofficial #qemu Wiki
- The QEMU forum
- QEMU Networking: panorama des différentes solutions de connexion réseau
- tuntap nécessite des permissions supplémentaires
- Limitations de Etherboot: utiliser ISC DHCPd v2 (pas v3).
- QEMU compilé pour Fedora